• MySQL GTID (三)


    五.如何跳过一个GTID

    环境见系列一

    5.1 创建表,模拟数据

    #主机上
    create table t_test (id int primary key ,name varchar(10));
    
    insert into t_test values(1,'aa'),(2,'bb'),(3,'cc');
    
    #备机上插入一条,模拟冲突
    insert into t_test values(4,'dd');
    

    5.2 模拟冲突

    #主机上
    insert into t_test values(4,'dd');
    
    #备机上查看复制状态
    show slave status G;
    

    5.3 通过上图,可以定位到冲突的位置,mysqlbinlog查看具体的语句

    #主库上mysqlbinlog 查看相关语句
    mysqlbinlog --start-position=930 --stop-position=1193 -d test --base64-output=DECODE-ROWS -v /MySQL/my3306/log/binlog/binlog.000018   
    

    5.4 基于GTID模式的复制,跳过一个事务,需要利用一个空事务。

    stop slave;
    set GTID_NEXT='9760cb92-693e-11e8-85bf-000c29b55cf0:11';
    
    #开启一个空事务
    begin;commit;
    
    SET GTID_NEXT='AUTOMATIC';
    start slave ;
    
    #查看复制是否正常
    mysql> show slave status G;
    *************************** 1. row ***************************
    			   Slave_IO_State: Waiting for master to send event
    				  Master_Host: 192.168.2.144
    				  Master_User: rep
    				  Master_Port: 3306
    				Connect_Retry: 60
    			  Master_Log_File: binlog.000019
    		  Read_Master_Log_Pos: 194
    			   Relay_Log_File: relaylog.000017
    				Relay_Log_Pos: 357
    		Relay_Master_Log_File: binlog.000019
    			 Slave_IO_Running: Yes
    			Slave_SQL_Running: Yes
    			  Replicate_Do_DB: 
    		  Replicate_Ignore_DB: 
    		   Replicate_Do_Table: 
    	   Replicate_Ignore_Table: 
    	  Replicate_Wild_Do_Table: 
      Replicate_Wild_Ignore_Table: 
    				   Last_Errno: 0
    				   Last_Error: 
    				 Skip_Counter: 0
    		  Exec_Master_Log_Pos: 194
    			  Relay_Log_Space: 804
    			  Until_Condition: None
    			   Until_Log_File: 
    				Until_Log_Pos: 0
    		   Master_SSL_Allowed: No
    		   Master_SSL_CA_File: 
    		   Master_SSL_CA_Path: 
    			  Master_SSL_Cert: 
    			Master_SSL_Cipher: 
    			   Master_SSL_Key: 
    		Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
    				Last_IO_Errno: 0
    				Last_IO_Error: 
    			   Last_SQL_Errno: 0
    			   Last_SQL_Error: 
      Replicate_Ignore_Server_Ids: 
    			 Master_Server_Id: 101
    				  Master_UUID: 9760cb92-693e-11e8-85bf-000c29b55cf0
    			 Master_Info_File: /MySQL/my3306/data/master.info
    					SQL_Delay: 0
    		  SQL_Remaining_Delay: NULL
    	  Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
    		   Master_Retry_Count: 86400
    				  Master_Bind: 
    	  Last_IO_Error_Timestamp: 
    	 Last_SQL_Error_Timestamp: 
    			   Master_SSL_Crl: 
    		   Master_SSL_Crlpath: 
    		   Retrieved_Gtid_Set: 9760cb92-693e-11e8-85bf-000c29b55cf0:8-11
    			Executed_Gtid_Set: 790ff8a6-918a-11e8-87db-000c29c27768:1,
    9760cb92-693e-11e8-85bf-000c29b55cf0:1-11
    				Auto_Position: 0
    		 Replicate_Rewrite_DB: 
    				 Channel_Name: 
    		   Master_TLS_Version: 
    1 row in set (0.00 sec) 
    

    六.利用GTID模式快速改变主从复制关系

    原架构:主:192.168.2.144
    从:192.168.2.138/192.168.2.147

    先架构:改为级联模式

    基于GTID复制,DBA可以快速调整复制的拓扑结构,只需要调整复制节点的基本信息,不需要手动寻找复制点

    6.1 停止192.168.2.147实例的复制

    STOP SLAVE;
    

    6.2 调整192.168.2.147实例的复制关系,修改复制源为138,MASTER_AUTO_POSITION为1

    CHANGE MASTER TO MASTER_HOST='192.168.2.138',
                     MASTER_PORT=3306,
                     MASTER_AUTO_POSITION=1;
    

    6.3 启动192.168.2.147

    START SLAVE;
    

    6.4 观察复制的情况

    SHOW SLAVE STATUS G;
    

    6.5 START SLAVE后,节点138 与节点 147的交互如下

    1.147节点向138节点发起一个Dump Binlg请求,并将自身已经执行的GTID集合信息一起发送给138节点。
    2.138节点通过对比接收到147节点发送过来的GTID集合,将147节点未执行的Binlog信息发送给C节点。
    3.147节点获取未执行的Binlog信息,并应用这些Binlog,在这个过程中,138节点还会不断的发送最新的Binlog到147.
    4.147节点不断的apply Binlog,最终实现147节点与138节点的同步。
    

    正常来说,到这一步级联复制就建立起来了,但是由于本文之前在192.168.2.138上跳过一个GTID,导致报错

    解决方案:

    RESET MASTER;  
    
    #在 192.168.2.138上 查询Executed_Gtid_Set
    show MASTER status G;
    *************************** 1. row ***************************
    			 File: binlog.000007
    		 Position: 1385
    	 Binlog_Do_DB: 
     Binlog_Ignore_DB: 
    Executed_Gtid_Set: 790ff8a6-918a-11e8-87db-000c29c27768:1,
    9760cb92-693e-11e8-85bf-000c29b55cf0:1-11
    1 row in set (0.00 sec)
    
    #在192.168.2.147跳过这些GTID
    SET GLOBAL GTID_PURGED='9760cb92-693e-11e8-85bf-000c29b55cf0:1-11';
    START SLAVE; 
    
    #此时复制正常
    show slave status G;
    *************************** 1. row ***************************
    			   Slave_IO_State: Waiting for master to send event
    				  Master_Host: 192.168.2.138
    				  Master_User: rep
    				  Master_Port: 3306
    				Connect_Retry: 60
    			  Master_Log_File: binlog.000007
    		  Read_Master_Log_Pos: 1385
    			   Relay_Log_File: relaylog.000003
    				Relay_Log_Pos: 445
    		Relay_Master_Log_File: binlog.000007
    			 Slave_IO_Running: Yes
    			Slave_SQL_Running: Yes
    			  Replicate_Do_DB: 
    		  Replicate_Ignore_DB: 
    		   Replicate_Do_Table: 
    	   Replicate_Ignore_Table: 
    	  Replicate_Wild_Do_Table: 
      Replicate_Wild_Ignore_Table: 
    				   Last_Errno: 0
    				   Last_Error: 
    				 Skip_Counter: 0
    		  Exec_Master_Log_Pos: 1385
    			  Relay_Log_Space: 1203
    			  Until_Condition: None
    			   Until_Log_File: 
    				Until_Log_Pos: 0
    		   Master_SSL_Allowed: No
    		   Master_SSL_CA_File: 
    		   Master_SSL_CA_Path: 
    			  Master_SSL_Cert: 
    			Master_SSL_Cipher: 
    			   Master_SSL_Key: 
    		Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
    				Last_IO_Errno: 0
    				Last_IO_Error: 
    			   Last_SQL_Errno: 0
    			   Last_SQL_Error: 
      Replicate_Ignore_Server_Ids: 
    			 Master_Server_Id: 102
    				  Master_UUID: 790ff8a6-918a-11e8-87db-000c29c27768
    			 Master_Info_File: /MySQL/my3306/data/master.info
    					SQL_Delay: 0
    		  SQL_Remaining_Delay: NULL
    	  Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
    		   Master_Retry_Count: 86400
    				  Master_Bind: 
    	  Last_IO_Error_Timestamp: 
    	 Last_SQL_Error_Timestamp: 
    			   Master_SSL_Crl: 
    		   Master_SSL_Crlpath: 
    		   Retrieved_Gtid_Set: 790ff8a6-918a-11e8-87db-000c29c27768:1
    			Executed_Gtid_Set: 9760cb92-693e-11e8-85bf-000c29b55cf0:1-11
    				Auto_Position: 1
    		 Replicate_Rewrite_DB: 
    				 Channel_Name: 
    		   Master_TLS_Version: 
    1 row in set (0.00 sec)
  • 相关阅读:
    c# 集合的交集、并集、差集
    git版本控制
    jquery html动态添加的元素绑定事件详解
    Binding笔记
    动画
    MSSQL 索引
    TCP和UDP的优缺点及区别
    Fetch API 了解 及对比ajax、axois
    提供图片服务网站
    2017 jq 总结
  • 原文地址:https://www.cnblogs.com/chinesern/p/9428278.html
Copyright © 2020-2023  润新知