MySQL主从数据不一致竟然不报错案例
阅读需知
- Retrieved_Gtid_Set 从库已经接收到主库的事务编号(从库的 IO 线程已经接收到了)。
- Executed_Gtid_Set 已经执行的事务编号(从库的执行 SQL 线程已经执行了的 SQL)。
1故障现象
主从数据不一致,但是看复制是正常状态(双 Yes)。此时主库执行,从库本该报错 1062 或者 1032 的 SQL,从库复制线程还是双 Yes,没有报错。
MySQL 版本:5.7.35
2故障复现
查看主库状态
1 2 3 4 5 6 | MySQL [xuzong]> show master status; +------------------+----------+--------------+------------------+--------------------------------------------------------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+--------------------------------------------------------------------------+ | mysql-bin.000008 | 39349641 | | | c233aec0-58d3-11ec-a74a-a0a33ba8b3ff:1-104345 | +------------------+----------+--------------+------------------+--------------------------------------------------------------------------+ |
从库上只需要设置 GTID 值的 gno 大于主库的值即可复现。
1 2 3 4 5 6 7 8 9 10 11 | mysql> stop slave; Query OK, 0 rows affected (0.00 sec) mysql> reset slave all; Query OK, 0 rows affected (0.01 sec) mysql> reset master; Query OK, 0 rows affected (0.01 sec) mysql> set @@GLOBAL.GTID_PURGED='c233aec0-58d3-11ec-a74a-a0a33ba8b3ff:1-1000000'; #1000000>104345 Query OK, 0 rows affected (0.00 sec) |