主服务器单节点设置,如果主服务器故障则会影响全局的写入事件,所以要设置为双主。在前面的实验中已经将master1设置为master2的主服务器,这里只需要设置master2为master1的主服务器。
设置master2为master1的主服务器
grant replication slave,replication client on *.* to 'rep'@'192.168.83.%' identified by 'Mysql@123';
flush privileges;# 刷新
change master to master_host='master2',master_user='rep',master_password='Mysql@123',master_auto_position=1;
start slave;# 开启奴隶模式
show slave status\G;
这时master1也是别人的主服务器,同样也是别人的从服务器,master1和master2互为主从服务器。
master1上面插入数据,在master2上观察数据是否同步
在master2上面插入数据,在master1上观察数据是否同步
如果有问题可以在/var/log/mysqld.log查看,双方互相同步。
有另外两台的mysql数据库作为服务器
同步现有的数据库
使用mysqldump备份master1的数据
mysqldump -p'Mysql@123' --all-databases --single-transaction --master-data=2 --flush-logs > mmss-mysql-all.sql
备份完成后将sql文件传送给slave1和slave2
scp -r master1:/mmss-mysql-all.sql slave1:/tmp/
scp -r master1:/mmss-mysql-all.sql slave2:/tmp/
分别登录slave1和slave2并且手动同步数据
slave1和slave2
mysql -uroot -p'Mysql@123' < /tmp/mmss-mysql-all.sql
启动从服务器的ID和GTID
开启slave1和slave2的二进制日志功能和服务器ID和GTID
slave1的数据库:
vi /etc/my.cnf
另起几行写到
server-id=3
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE
保存退出并且重启slave1的数据库
systemctl restart mysqld
slave2的数据库:
vi /etc/my.cnf
server-id=4
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE
保存退出并且重启slave2的数据库
systemctl restart mysqld
设置主服务器
登录slave1的数据库
change master to master_host='master1',master_user='rep',master_password='Mysql@123',master_auto_position=1 for channel 'master1';
change master to master_host='master2',master_user='rep',master_password='Mysql@123',master_auto_position=1 for channel 'master2';
start slave;#开启奴隶模式
查看运行状态
show slave status\G;
登录slave2的数据库并进行操作
change master to master_host='master1',master_user='rep',master_password='Mysql@123',master_auto_position=1 for channel 'master1';
change master to master_host='master2',master_user='rep',master_password='Mysql@123',master_auto_position=1 for channel 'master2';
start slave;#开启奴隶模式
查看运行状态
show slave status\G;
双方的数据已经同步了。
如果集群有问题,可以去/var/lib/mysql/
中的所有文件进行删除,重启数据库后就是一个全新的数据库。
进行测试
可以分别在master1和master2中插入数据进,可以在slave1和slave2中进行查看,验证实验是否成功