一直以来都只听说过mysql有环形主从,但是从未试验过,今天心血来潮,试验了下,期间遇到了一些困难,但最终都解决了,特将配置过程分享出来

QKJ7HETUI2BC@DVIR-300x124.png


结构:A->B->C->A

213232xn8nlulr54vfezee.png

环境:由于我的笔记本无法同时带动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环形主从配置成功!