1、原题
1.1、英文原题
A simple master-to-slave replication is currently being used. This information is extracted from the SHOW SLAVE STATUS output:
You execute a “SHOW CREATE TABLE mytable” on the slave:
You have issued a STOP SLAVE command. You have determined that it is safe to skip the transaction in this case. One or more statements are required before you can issue a START SLAVE command to resolve the duplicate key error.
Which statement should be used?
A、SET GTID_NEXT=“CONSISTENCY”;BEGIN; COMMIT;SET GTID_NEXT=“AUTOMATIC”;
B、SET GTID_NEXT=“5da6b4f5-6f60-11e8-b2d6-0010e05f3e06:8”; BEGIN; COMMIT;SET GTID_NEXT=“AUTOMATIC”;
C、SET GLOBAL SQL_SKIP_SLAVE_COUNTER=1
D、SET GLOBAL enforce_gtid_consistency=ON
E、SET GTID_EXECUTED=“5da6b4f5-6f60-11e8-b2d6-0010e05f3e06:8”;
1.2、答案
B
2、题目解析
2.1、题干解析
本题考察的是GTID复制模式下,当出现主键重复问题时,如何解决。
3、知识点
3.1、知识点1:GTID模式下跳过一个事务的方法
如果复制由于复制的事务中的事件问题而停止,可以通过跳过复制中的失败事务来恢复复制。在跳过一个事务之前,确保复制的I/O线程和复制的SQL线程都已停止。
- 首先,你需要确定导致错误的复制事件。错误的细节和最后成功应用的事务都记录在性能模式表replication_applier_status_by_worker中。你可以使用mysqlbinlog来检索和显示在错误发生时被记录的事件。另外,你可以在副本上发出SHOW RELAYLOG EVENTS,或者在源上发出SHOW BINLOG EVENTS,然后在输出中搜索以该GTID开头的事务。
- 跳过有GTIDs的事务
SET GTID_NEXT='aaa-bbb-ccc-ddd:N';
BEGIN;
COMMIT;
SET GTID_NEXT='AUTOMATIC';
4、总结
- GTID复制时遇到事务问题时,可以通过跳过一个事务的方法解决。