共计 4132 个字符,预计需要花费 11 分钟才能阅读完成。
这篇文章主要介绍 mysql GTID 复制跳过复制错误的方式有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
1、从库执行了事务,主库执行语句时导致冲突:
解决办法一:跳过错误(少数错误推荐)
(1)停止 slave 进程
(2) 设置事务号,事务号从 Executed_Gtid_Set 事务号 + 1 获取,即跳过当前执行完成的下一条事务,在 session 里设置 gtid_next,即跳过这个 GTID
(3)执行空事物
(4) 恢复自动事物号
(5) 启动 slave 进程
mysql STOP SLAVE;
mysql SET @@SESSION.GTID_NEXT= 8f9e146f-0a18-11e7-810a-0050568833c8:4
mysql BEGIN; COMMIT;
mysql SET SESSION GTID_NEXT = AUTOMATIC;
mysql START SLAVE;
解决办法二:重置 master 方法跳过错误(不推荐,因为需要执行 reset master; 如果其他节点记录有该实例的位点信息的话,切换时需要重新找位点)
mysql STOP SLAVE;
mysql RESET MASTER;
mysql SET @@GLOBAL.GTID_PURGED = 8f9e146f-0a18-11e7-810a-0050568833c8:1-4
mysql START SLAVE;
上面这些命令的用意是,忽略 8f9e146f-0a18-11e7-810a-0050568833c8:1-4 这个 GTID 事务,下一次事务接着从 5 这个 GTID 开始,即可跳过上述错误。
解决办法三:使用 pt-slave-restart 工具,忽略特定错误,(冲突较多时可以使用,建议保留 relaylog 核对事务),
pt-slave-restart 工具的作用是监视某些特定的复制错误,然后忽略,并且再次启动 SLAVE 进程(Watch and restart MySQL replication after errors)。
pt-slave-restart 工具原理初探
1、检查版本信息和兼容性
set autocommit=1
SHOW VARIABLES LIKE wait\_timeout
SET SESSION wait_timeout=10000
SELECT @@SQL_MODE
SET @@SQL_QUOTE_SHOW_CREATE = 1/*!40101, @@SQL_MODE= NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION */
SELECT @@SERVER_ID
SHOW SLAVE STATUS
SELECT CONCAT(@@hostname, @@port)
SHOW VARIABLES LIKE version%
SHOW ENGINES
SHOW VARIABLES LIKE innodb_version
SELECT @@GLOBAL.gtid_mode(是否开启 GTID 决定跳过事务的方式)
SELECT @@GLOBAL.slave_parallel_workers AS threads(不支持并行复制)
2、检查同步错误
SHOW SLAVE STATUS;
如果使用 –error-numbers 则检查 Last_SQL_Errno:错误号,判断是否匹配;如果匹配继续进行,不匹配不做任何操作
如果使用 –error-text 则检查 Last_SQL_Error:报错内容,判断是否匹配;如果匹配继续进行,不匹配不做任何操作
3、跳过事务
SET GTID_NEXT= 026b75e5-d99f-11e7-a343-000c29dc5f5c:2023
set autocommit=0;
commit;
set autocommit=1;
SET GTID_NEXT= AUTOMATIC
START SLAVE;
4、继续判断状态,如果还有报错继续 2,3,4 步骤
SHOW SLAVE STATUS;
mysql show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.137.101
Master_User: repluser
Master_Port: 3307
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 3435
Relay_Log_File: mysql-relay-bin.000016
Relay_Log_Pos: 1026
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Wild_Ignore_Table: passport.cooke,passport.user_token,sysbench_test.sbtest1,sysbench_test.sbtest_1
Last_Errno: 1062
Last_Error: Error Duplicate entry 9 for key PRIMARY on query. Default database: test . Query: insert into backup_test (id,backup_que) values(9, 1_111)
Skip_Counter: 0
Exec_Master_Log_Pos: 2856
Relay_Log_Space: 2362
Last_SQL_Errno: 1062
Last_SQL_Error: Error Duplicate entry 9 for key PRIMARY on query. Default database: test . Query: insert into backup_test (id,backup_que) values(9, 1_111)
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1013307
Master_UUID: 026b75e5-d99f-11e7-a343-000c29dc5f5c
Master_Info_File: mysql.slave_master_info
Last_SQL_Error_Timestamp: 180504 11:58:07
Retrieved_Gtid_Set: 026b75e5-d99f-11e7-a343-000c29dc5f5c:1004-2018
Executed_Gtid_Set: 026b75e5-d99f-11e7-a343-000c29dc5f5c:1-2016,
5f5c73b5-2768-11e8-9e7e-000c298bd943:1-2997,
68be50a9-3ba1-11e8-a25d-000c298bd943:1-4
Auto_Position: 1
[root@vm102 yum.repos.d]# pt-slave-restart –user=mg -h227.0.0.1 -P3307 -p123qwe –error-numbers=1062
2018-05-04T11:47:31 P=3307,h=127.0.0.1,p=…,u=mg mysql-relay-bin.000016 448 1062
2018-05-04T11:47:31 P=3307,h=127.0.0.1,p=…,u=mg mysql-relay-bin.000016 737 1062
[root@vm102 yum.repos.d]# pt-slave-restart –user=mg -h227.0.0.1 -P3307 -p123qwe –error-text= backup_test
2018-05-04T12:00:23 P=3307,h=127.0.0.1,p=…,u=mg mysql-relay-bin.000016 1026 1062
2018-05-04T12:00:24 P=3307,h=127.0.0.1,p=…,u=mg mysql-relay-bin.000016 1315 1062
参数解释:
–slave-password=s Sets the password to be used to connect to the slaves
–slave-user=s Sets the user to be used to connect to the slaves
–sleep=i Initial sleep seconds between checking the slave (default 1)
–socket=s -S Socket file to use for connection=
–password=s -p Password to use when connecting
pt-slave-resetart -S./mysql.sock —error-numbers=1032
–error-numbers=h Only restart this comma-separated list of errors
–host=s -h Connect to host
–user=s -u User for login if not current user
以上是“mysql GTID 复制跳过复制错误的方式有哪些”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!