加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql GTID 复制跳过复制错误的方法有哪些

发布时间:2023-09-04 13:40:07 所属栏目:MySql教程 来源:
导读:这篇文章主要介绍mysql GTID复制跳过复制错误的方式有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、从库执行了事务,主库执行语句时导致冲突:解决办法一:跳过错误(少数错误推荐

这篇文章主要介绍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复制跳过复制错误的方式有哪些”这篇文章的所有内容,感谢各位的阅读!

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章