一直以来都只听说过mysql有环形主从,但是从未试验过,今天心血来潮,试验了下,期间遇到了一些困难,但最终都解决了,特将配置过程分享出来
结构:A->B->C->A
环境:由于我的笔记本无法同时带动3台虚拟机,所以我就用一台机子上的3个数据库实体作为试验
mysql1 端口:3306
mysql2 端口:3307
mysql3 端口:3308
一.保持三个数据库的初始数据同步
(1)将mysql1的mysql库备份出来:mysqldump -uroot -S /tmp/mysql1.sock mysql>123.sql
(2) 在三个mysql上都创建空数据库db1
(3) 将123.sql里的数据恢复到三个mysql各自的db1库中
mysql -uroot -S /tmp/msyql1.sock db1<123.sql
mysql -uroot -S /tmp/msyql2.sock db1<123.sql
mysql -uroot -S /tmp/msyql3.sock db1<123.sql
二.修改各自的配置文件my.cnf
server-id = 1 //3个mysql各不相同,可以依次设置为1,2,3
log-bin = mysql-bin //3个mysql可以自定义
replicate-do-db = db1 //3个mysql都一样
auto-increment-increment = 3 //每次增长3,3个mysql都一样
auto-increment-offset = 1 //设置自动增长的字段的偏移量,即初始值为1,msyql2设为2,mysql3设为3
log-slave-updates = true //是否继续传递下去为“是”,非常重要,三个mysql都必须加上!
注:二都只有server-id不同和 auto-increment- offset不同auto-increment-increment的值应设为整个结构中服务器的总数,本案例用到三个实例,所以值设为3。
三.创建用户并授权
>grant replication slave on *.* to 'repl'@'127.0.0.1' identified by '123123';
>flush privileges;
ps:为了方便,防止搞混,三个mysql的授权用户名和密码都一样
四.依次进行主从配置,具体为A主B从,B主C从,C主A从,连起来形成环状,A->B->C->A
1.进入mysql1
flush tables with read lock;
show master status; //记下前面两列内容
进入mysql2
slave stop;
change master to master_host='127.0.0.1', master_port=3306, master_user='repl', master_password='123123',master_log_file='mysql-bin.000006', master_log_pos=474952;
slave start;
mysql1解锁表:unlock tables;
mysql2查看slave 状态:show slave status\G; //查看有无两个YES
2.mysql2和mysql3之间,mysql3和mysql1之间重复上面的操作,配置好相互之间的主从关系(注意chang master时,注意三个加黑加粗的部分)
五.测试
在三个mysql中任意一个上进行增删表操作,查看另外两个有无同步变化,如果严格按照上面的步骤和配置进行,应该不会出错
至此,mysql环形主从配置成功!
转载于:https://blog.51cto.com/11030696/1750755