mysql-gtid主从配置及报错处理

                                       mysql的gtid主从复制配置 

学习网站:https://www.cnblogs.com/zhoujinyi/p/4717951.html
 
一、主从配置:vim /etc/my.cnf
   [mysqld]
   gtid-mode = on
   enforce-gtid-consistency = true
   log_slave_updates = 1

二、从配置:vim /etc/my.cnf
   change master to master_host='127.0.0.1',master_user='rep',master_password='rep',master_port=3306,master_auto_position=1;
   
   主从同步后,再查看:(从上操作)
   show processlist\G
                                     mysql的gtid主从复制--报错处理

一、从库上报错查看:
    show slave status\G

            Retrieved_Gtid_Set: e10c75be-5c1b-11e6-ab7c-000c296078ae:5-6    #6是出错的事务
            Executed_Gtid_Set: e10c75be-5c1b-11e6-ab7c-000c296078ae:1-5     #已经执行过的事务
                Auto_Position: 1

二、解决1:单个跳过事务
    通过设置gtid_next跳过这个出错的事务(只能跳过一个事务)
    mysql> set gtid_next='e10c75be-5c1b-11e6-ab7c-000c296078ae:6';
    mysql> begin;
    mysql> commit;
    mysql> set gtid_next='AUTOMATIC';
    mysql> start slave;

三、解决2:批量的跳过事务
     通过设置gtid_purged完成批量跳过事务
  1:主库操作(查看主库上已执行的事务)
    mysql> show master status;
    +---------------+----------+--------------+------------------+-------------------------------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                         |
    +---------------+----------+--------------+------------------+-------------------------------------------+
    | binlog.000001 |     2364 |              |                  | e10c75be-5c1b-11e6-ab7c-000c296078ae:1-10 |
    +---------------+----------+--------------+------------------+-------------------------------------------+
    1 row in set (0.00 sec) 
    
    从库上操作:
    也可查看从库上已执行的事务,mysql> show master status;
    mysql> reset master;
    mysql> set GLOBAL gtid_purged='e10c75be-5c1b-11e6-ab7c-000c296078ae:1-10';
    mysql> start slave;
    
    
四、快照恢复从库数据
    从库上操作:做好快照后,查看sql文件  
    cat db.sql  | grep GTID_PURGED
    SET @@GLOBAL.GTID_PURGED='e10c75be-5c1b-11e6-ab7c-000c296078ae:1-10';
    
    mysql> reset master;
    再导入sql文件
    mysql> CHANGE MASTER TO MASTER_HOST='主库ip', MASTER_USER='repl', MASTER_PASSWORD='repl', MASTER_AUTO_POSITION = 1;
    mysql> start slave;

                                  mysql的gtid主从复制故障切换

五、故障切换步骤
主有故障时:(切换步骤,需要把其中的一个从设置为主,另一个设置为其的从库)

1:检查从库上,完成事务的从,谁最接近主库

server2:   show salve status\G;

          Master_Log_File: mysql-bin3306.000002    ---(越大越接近)
          Read_Master_Log_Pos: 4156773
          Exec_Master_Log_Pos: 4156773

server3:  show salve status\G;

          Master_Log_File: mysql-bin3306.000001   ---(越大越接近)
          Read_Master_Log_Pos: 83795320
          Exec_Master_Log_Pos: 83795320

相比之下server2完成的事务要比server3更接近或则等于server1,现在需要把server3设置为server2的从库。


2:切换
   1:从库server3,上重新指定主库信息(指向server2)
   mysql> stop slave;   #千万不要执行 reset master,否则会从最先的GTID上开始执行。
   change master to master_host='127.0.0.1',master_user='rep',master_password='rep',master_port=3307,master_auto_position=1; #指定到server2从上
   start slave;  #成功的切换到新主

3:把业务从server1主库上切换到server2(完成的事务最接近主库)--server2当主

                                           实际操作
实列:
32集群3台服务器msyql重启后gtid主从报错(两个no)
解决办法:
1:先到db上查看偏移量(Position)
mysql> show master status;
+------------------+----------+--------------+------------------+----------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                            |
+------------------+----------+--------------+------------------+----------------------------------------------+
| mysql-bin.000014 |      191 |              |                  | 03969184-0807-11e9-9734-001e67f4efb0:1-25434 |
+------------------+----------+--------------+------------------+----------------------------------------------+
1 row in set (0.00 sec)


2:上web1和web2的mysql
reset slave;
CHANGE MASTER TO MASTER_HOST='192.168.116.101', MASTER_USER='hhg', MASTER_PASSWORD='123456',master_port=3306,MASTER_AUTO_POSITION = 191;
start slave;


 



 

猜你喜欢

转载自blog.csdn.net/zzhlinux911218/article/details/85266342