2.找出执行了 drop table 语句的前一句的 pos 位置
- [mysql@mysql-test ~]$ mysqlbinlog -vv /data/mysql_log/mysql_test/mysql-bin.000039 | grep -i -B 10 'drop table `b`';
- ...
- # at 35134
- #190819 11:40:25 server id 83 end_log_pos 35199 CRC32 0x02771167 Anonymous_GTID last_committed=132 sequence_number=133 rbr_only=no
- SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
- # at 35199
- #190819 11:40:25 server id 83 end_log_pos 35317 CRC32 0x50a018aa Query thread_id=37155 exec_time=0 error_code=0
- use `mytest`/*!*/;
- SET TIMESTAMP=1566186025/*!*/;
- DROP TABLE `b` /* generated by server */
从结果中我们可以看到 drop 所在语句的前一句开始位置是 35134,所以我们同步到 35134 (这个可别选错了)
3.延迟库同步到要跳过的 SQL 前一条
- change master to master_delay=0;
- start slave until master_log_file='mysql-bin.000039',master_log_pos=35134;
查看状态看到已经同步到对应节点
- chengqm-3307>>show slave status G;
- ...
- Master_Port: 3306
- Connect_Retry: 60
- Master_Log_File: mysql-bin.000039
- Read_Master_Log_Pos: 65792
- ...
- Slave_IO_Running: Yes
- Slave_SQL_Running: No
- Exec_Master_Log_Pos: 35134
- ...
- Until_Log_File: mysql-bin.000039
- Until_Log_Pos: 35134
4.跳过一条 SQL 后开始同步
- set global sql_slave_skip_counter=1;
- start slave;
查看同步状态,删除表 b 的语句已经被跳过
- chengqm-3307>>show slave status G;
- ...
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
- ...
- 1 row in set (0.00 sec)
- chengqm-3307>>show tables;
- +------------------+
- | Tables_in_mytest |
- +------------------+
- | a |
- | b |
- +------------------+
- 2 rows in set (0.00 sec)
4.2.2 开启 GTID
使用 GTID 跳过的步骤会简单很多,只要执行一条和要跳过的 SQL 的 GTID 相同的事务就可以跳过了
1.停止同步
2.找出执行了 drop table 语句的 GTID (编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|