目录 显示
安装前确认环境
$ rpm -qa | grep mariadb
$ rpm -e -v --nodeps mariadb-libs-5.5.68-1.el7.x86_64
先说明,我三台机器的IP配置如下:
192.168.32.128 192.168.32.129 192.168.32.130
创建目录先把文件上传,mysql 和node 安装包每个节点均需拷贝,manager 包只拷贝到manager 节点即可,我都放了,因为我复制的时候没想好那个节点做manager。
//在三台机器上面执行 $ mkdir -p /home/local/mysql //开启防火墙端口 $ firewall-cmd --add-port=3306/tcp --permanent $ firewall-cmd --reload //关闭selinux $ sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config $ setenforce 0
添加用户
$ groupadd mysql $ useradd -r -g mysql mysql
$ mkdir -p /usr/local/mysql/{data,log} //用自己的的上传路径 $ tar -xvf /home/local/mysql/mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz -C /usr/local/mysql/ --strip-components 1 备注: -C表示解压指定目录如:当前目录/usr/local/mysql/ --strip-components N 表示删除目录结构(n=1表示删除最外层结构)
查看MySQL文件内容,别跳着走,跟着我的节奏
$ ll /usr/local/mysql/
$ cp -a /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld $ chmod +x /etc/rc.d/init.d/mysqld $ chkconfig --add mysqld $ chkconfig --list
$ vi /etc/profile //加在文件最后 $ export PATH=$PATH:/usr/local/mysql/bin $ source /etc/profile //配置完看看环境变量 $ echo $PATH
vim /etc/my.cnf
注意 :以下内容必须全部拷贝, 包括[mysqld]
[mysqld] |
$ /usr/local/mysql/bin/mysqld --initialize-insecure $ chown -R mysql.mysql /usr/local/mysql $ chmod -R 777 /usr/local/mysql
$ service mysqld start $ tail -f /usr/local/mysql/log/error.log
随机密码生成
cat /dev/urandom | LC_ALL=C tr -dc "[:graph:]" | fold -w 10 |head -2 > ./shard.key
$ mysql -uroot -p $ ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Root2020@'; $ CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Root2020@'; $ GRANT ALL ON *.* TO 'root'@'%'; $ FLUSH PRIVILEGES; //开始安装半同步插件 $ install plugin rpl_semi_sync_master SONAME 'semisync_master.so'; $ install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';
创建同步用户,MHA用户与数据半同步用户一起创建,在每台机器都需要执行,我这是开发环境,生成环境请改密码,被黑了,可别来找我
,注意: 别写成我的IP导致最后通信失败了
mysql -uroot -pRoot2020@ use mysql; select user,host from user; CREATE USER 'repl'@'192.168.32.%' IDENTIFIED BY 'Root2020@'; ALTER USER 'repl'@'192.168.32.%' IDENTIFIED WITH mysql_native_password BY 'Root2020@'; grant replication slave on *.* to repl@'172.168.9.%'; CREATE USER 'manager'@'192.168.32.%' IDENTIFIED BY 'Root2020@'; grant all on *.* to manager@'192.168.32.%'; ALTER USER 'manager'@'192.168.32.%' IDENTIFIED WITH mysql_native_password BY 'Root2020@'; FLUSH PRIVILEGES;
以上操作在三台机器需要全部完成,操作完成后进行主从数据半同步测试
修改三台机器的my.cnf配置数据半同步,在文件尾追加增加如下配置:
#server_id 每台机器需要不同,随机,自增都可以 //以下配置拷贝至128节点my.cnf #master节点
server_id = 1 log-bin = mysql-bin binlog_format=mixed rpl_semi_sync_master_enabled = 1 rpl_semi_sync_master_timeout = 1000 rpl_semi_sync_slave_enabled = 1 relay_log_purge = 0 relay-log = relay-bin relay-log-index = slave-relay-bin.index |
//以下配置拷贝至129节点my.cnf #slave 1 主机新增以下配置,这个节点用来做master高可用切换
server_id = 2 log-bin = mysql-bin binlog_format = mixed rpl_semi_sync_master_enabled = 1 rpl_semi_sync_master_timeout = 1000 rpl_semi_sync_slave_enabled = 1 relay_log_purge = 0 relay-log = relay-bin relay-log-index = slave-relay-bin.index |
//以下配置拷贝至130节点my.cnf
server_id=3 log-bin = mysql-bin relay-log = relay-bin relay-log-index = slave-relay-bin.index read_only = 1 rpl_semi_sync_slave_enabled = 1 |
配置完成后重启服务,这里有个中继日志,用来干啥,在集群恢复的时候详细说
查看半同步状态
mysql -uroot -pRoot2020@ show variables like '%rpl_semi_sync%'; show status like '%rpl_semi_sync%';
#关于上个命令查看到的信息,有几个状态值得关注,将在下面写下来 rpl_semi_sync_master_status :显示主服务是异步复制模式还是半同步复制模式,ON为半同步; rpl_semi_sync_master_clients :显示有多少个从服务器配置为半同步复制模式; rpl_semi_sync_master_yes_tx :显示从服务器确认成功提交的数量 rpl_semi_sync_master_no_tx :显示从服务器确认不成功提交的数量 rpl_semi_sync_master_tx_avg_wait_time :事务因开启 semi_sync ,平均需要额外等待的时间 rpl_semi_sync_master_net_avg_wait_time :事务进入等待队列后,到网络平均等待时间 |
登录master主机,我现在定了就128啦
$ mysql -uroot -pRoot2020@ $ show master status\G; |
在129,130执行从节点配置与主节点建立关联
mysql -uroot -pRoot2020@ change master to master_host='192.168.32.128', master_port=3306, master_user='repl', master_password='Root2020@', master_log_file = 'mysql-bin.000001', master_log_pos=156, get_master_public_key=1; start slave; FLUSH PRIVILEGES;
配置完成后重启服务,查看节点配置
看到如下状态服务半同步主从建立成功
看到主节点注册成功两个从节点
看到两个从节点状态正常
可能遇到的问题,及解决方案
Q1: Slave_IO_Running:Connecting;Slave_SQL_Running:Yes ? A1: 从几个点来排除:具体问题具体分析 1.网络不通 2.账户密码错误 3.防火墙 4.mysql配置文件问题 5.主服务器mysql权限 6.创建slave关联时IP错误,或者配置错误 Q2:Slave_IO_Running:No; The slave I/O thread stops because master and slave have equal MySQL server UUIDs ? 这个问题是我自己把虚拟机做克隆,mysql的UUID搞成一样的了,所以注册不过去,解决办法: vim /usr/local/mysql/data/auto.cnf 修改UUID,重启服务 Q3: 遇见问题不要慌,仔细看看那里配置出错了,具体问题具体分析。
在slave服务器上通过如下命令
mysql> show slave status\G;
显示如下情况:表示slave不同步
Slave_IO_Running: Yes
Slave_SQL_Running: No
解决方法一(忽略错误,继续同步):
解决方法二(重新做主从,完全同步):
mysql> CHANGE MASTER TO |
显示如下信息则表示正常Slave_IO_Running: Yes
Slave_SQL_Running: Yes