跳过mysql复制_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 -h127.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 -h127.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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31535470/viewspace-2153818/,如需转载,请注明出处,否则将追究法律责任。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL主从复制GTID(Global Transaction Identifier)是一种用于标识和跟踪事务的机制。GTID一个全局唯一的标识符,用于确保主从复制中每个事务的唯一性和一致性。它在MySQL 5.6版本中引入,并在之后的版本中得到改进和增强。 使用GTID进行主从复制可以简化配置和管理,并提供更可靠的数据同步。下面是使用GTID进行主从复制的基本步骤: 1. 在主服务器上启用GTID功能: 在主服务器的配置文件(my.cnf)中添加以下参数: ``` [mysqld] server-id=1 log-bin enforce-gtid-consistency=true ``` 启用GTID功能并设置服务器ID和二进制日志。 2. 在从服务器上启用GTID功能: 在从服务器的配置文件中添加以下参数: ``` [mysqld] server-id=2 enforce-gtid-consistency=true ``` 设置服务器ID和启用GTID功能。 3. 配置主从关系: 在主服务器上创建一个用于复制的用户,并授予适当的权限。 4. 在从服务器上配置主服务器信息: 在从服务器上执行以下命令: ``` CHANGE MASTER TO MASTER_HOST='主服务器IP', MASTER_USER='复制用户', MASTER_PASSWORD='复制用户密码', MASTER_AUTO_POSITION=1; ``` 这将配置从服务器以使用GTID复制并将其连接到主服务器。 5. 启动主从复制: 在从服务器上执行以下命令开始复制: ``` START SLAVE; ``` 从服务器将开始从主服务器接收和应用事务。 通过以上步骤,你可以使用GTID实现MySQL主从复制。这种方式可以提供更高的数据一致性和可靠性,并简化了配置和管理过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值