由于 GTID 复制只是一个事务列表,我假设它们也可以回滚或重新提交以重播事件
文档显示进行空交易
SET GTID_NEXT='aaa-bbb-ccc-ddd:N';
BEGIN;
COMMIT;
SET GTID_NEXT='AUTOMATIC';
所以我假设我们也可以回滚事务或再次提交它,如gtid_next文档中给出的
After this variable has been set to UUID:NUMBER, and a transaction has been committed or rolled back, an explicit SET GTID_NEXT statement must again be issued before any other statement.
因此,出于测试目的,我查看从gtid_executed表执行了哪些事务(从这里开始的所有语句都在副本上执行)
SELECT @@GLOBAL.gtid_executed;
选择一些我想回滚/重播的事务,如下所示
SET GTID_NEXT='aaa-bbb-ccc-ddd:N';
#To rollback the transaction
ROLLBACK;
#To replay/commit the transaction
COMMIT;
SET GTID_NEXT='AUTOMATIC';
然后我按照他们的指示清除日志
FLUSH LOGS;
PURGE BINARY LOGS TO 'binlog.<whatever number>'
但即使在这一切之后,我也没有看到副本上的数据库有任何变化,也没有任何表被改变。
我在这里有什么误解?我使用的是 Windows 10、MySQL 8.0.27 和工作台相同的版本