【1】場景需求
mysql 8.0.22
我從庫落后主庫幾萬~幾十萬個事務,大幾萬秒,我不想要了;
已知
(1)落后期間只有 insert 語句 和 create table
那我不想等那么久了,不想讓它追了;
【2】嘗試解決
(1)設置 gtid_next=最新主庫gtid
stop slave; set gtid_next='1b95dc8e-92e5-11ec-bb5b-fa163ec8e3ff:4947003'; begin;commit; set gtid_next='automatic'; start slave;
很快發現不對了啊,怎么突然就 executed_gtid_set 從 1-1406920 變成了 1-1408858:4947003 了;
這證明是在追中間部分的 gtid事務啊;
(2)直接 set gtid_purged 試試【解決】
我用 show slave status 來看當前執行的gtid
然后針對間隙,做 gtid_purged 操作,結果報錯如下:
錯誤3546(hy000):@@global。不能更改GTID_PURGED:添加的gtid集不能與@@全局集重疊。gtid_executed
ERROR 3546 (HY000): @@GLOBAL.GTID_PURGED cannot be changed: the added gtid set must not overlap with @@GLOBAL.GTID_EXECUTED
重疊?好像沒有啊,show slave status 里不是 1-2300352:4947003 嗎?
我gtid_purged 2300353-4947002 不是正好嗎?
結果仔細看了一下錯誤信息,說是不能和變量 @@GLOBAL.GTID_EXECUTED 中的值 重疊,難道 這個全局變量參數和 show slave status 中的 Executed_Gtid_Set 不一致?
查看一下:
仔細看看我之前的操作:是因為使用的是 stop slave 之前的值,怪不得有重疊;
所以一定要 stop slave 之后,再show slave status啊;查看的 Executed_gtid_set 就一定是准的了
再次 set global gtid_purged=........ 成功,如下圖: