作用:
由于架构的扩展,业务量的越来越大,I/O访问频率过高此时需要作多库的存储,提高单个及其的I/O性能。而当一个主服务器出现故障后,此时另一个服务器仍可以继续工作
一.环境
准备4台干净的mysql服务器
192.168.122.196 master1
192.168.122.197 master2
192.168.122.198 slave1
192.168.122.199 slave2
如果是克隆的虚拟机要修改每台服务器UUID //vim /var/lib/mysql/auto.cnf
在每台服务器中配置所有服务器的域名 //vim /etc/hosts
二:配置
1,两台主服务器之间各配置为主从
M——M
master1:
vim /etc/my.cnf
validate_password=off
log-bin = my1log
server-id = 1
gtid_mode=ON //开启gtid
enforce_gtid_consistency=1
systemctl restart mysqld //重启mysql服务,使配置文件生效
创建授权账户:
grant all on . to ‘slave‘@‘%‘ identified by ‘123‘;
master2:
vim /etc/my.cnf
validate_password=off
log-bin = my2log
server-id = 2
gtid_mode=ON
enforce_gtid_consistency=1
systemctl restart mysqld //重启mysql服务,使配置文件生效
help change master to 查找配置文件
edit
change master to
master_host=‘master1‘,
master_user=‘授权用户‘,
master_password=‘授权密码‘,
master_auto_position=1;
start slave;
show slave status\G
如果显示的
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
则说明部署成功
注意:
master2上也要创建一样的授权用户,在master1上进行change master to 的操作
2,两台从服务器分别将两台master配置为主服务器
S——S
slave1:
1,首先备份master1的所有数据,mysqldump -u root -p123 -A > /all.sql
2,scp 将数据发送到slave1和slave2
3,在mysql中将数据分别导入slave1和slave2的数据库中,source /all.sql
4,vim /etc/my.cof slave1和slave2做相同的操作
validate_password=off
log-bin = my3log
server-id = 3 //注意server-id 不能相同
gtid_mode=ON
enforce_gtid_consistency=1
relay_log_info_repository = TABLE
master_info_repository = TABLE
relay_log_recovery = on
当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性
help change master to
edit
CHANGE MASTER TO
MASTER_HOST=‘master1/ip‘,
MASTER_USER=‘slave‘, //主服务器用户
MASTER_PASSWORD=‘big‘,
MASTER_AUTO_POSITION=1 FOR CHANNEL ‘master1‘
start slave;
show slave status;
edit
CHANGE MASTER TO
MASTER_HOST=‘master2/ip‘,
MASTER_USER=‘slave‘, //主服务器用户
MASTER_PASSWORD=‘big‘,
MASTER_AUTO_POSITION=1 FOR CHANNEL ‘master2‘
start slave;
show slave status\G
同理如果显示的
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
则说明部署成功
注意:slave1和slave2上做相同的change master to 操作。
如果不显示成功,错误可能有以下几点:
1,主从服务器的uuid相同,更改每台服务器UUID //vim /var/lib/mysql/auto.cnf
2,主从服务器的server-id相同,更改配置文件/etc/my.cnf中server-id,使每台服务器的server-id不同
3,主服务器与从服务器的数据不统一。
解决方法:
1,首先备份master1的所有数据,mysqldump -u root -p123 -A > /all.sql
2,scp 将数据发送到slave1和slave2
3,在mysql中将数据分别导入slave1和slave2的数据库中,source /all.sql
原文地址:https://blog.51cto.com/14482279/2431897