Mysql

MySQL 8.0 複製過濾器在重新啟動之間失去

  • May 17, 2019

我不知道我是否遇到了錯誤或功能,我多次閱讀文件但沒有找到資訊。

我有兩個 MySQL 伺服器,都在 8.0.15 上並託管在 Windows Server (x64) 上。我將命名這些SRV1SRV2

在 SRV1 上的 5 個數據庫中,我只想在 SRV2 上複製其中的 3 個。

我使用以下查詢設置複製過濾器,忽略剩餘的兩個數據庫,以便將來複製過程將拾取創建的任何新數據庫。

CHANGE REPLICATION FILTER 
    REPLICATE_IGNORE_DB = (ignore1,ignored2);

複製過程按預期工作,我看到三個數據庫在SRV2. 到現在為止還挺好。

結果SHOW SLAVE STATUS \G;是正確的,顯示

[...]
   Replicate_Do_DB:
Replicate_Ignore_DB: ignore1,ignore2
[...]

但是出現了一個狂野的 Windows 更新。並SRV2在夜間重新啟動。我今天檢測到復製過程已停止,因為複制使用者試圖對ignore1.

再一次SHOW SLAVE STATUS \G;證實了這一點,我的複製過濾器不再在這裡了。

[...]
   Replicate_Do_DB:
Replicate_Ignore_DB:
[...]

為了解決它,我再次放置了我的複製過濾器,重新啟動了從屬程序,等待它Seconds_Behind_Master變為 0。然後我要求 Windows 停止 MySQL 服務,然後重新啟動它,就像在正常的作業系統重啟時一樣。

複製過濾器再次失去,從屬程序停止,因為它試圖複製一個不存在的數據庫SRV2

在繼續 8.0.15 之前,我在 3 年內以完全相同的設置繼續 5.7,但在伺服器重新啟動期間從未遇到過類似的問題。這是有意的(我會在 8.0 發行說明中遺漏嗎?)還是我的配置中的錯誤?

我知道我可以通過將--replicate-ignore-db參數添加到 MySQL 服務二進制路徑來修復它,但我仍然想知道是否還有其他方法。

簡短的回答是:這是一個功能。

CREATE REPLICATION FILTER創建語法是為了在不重新啟動的情況下動態修改從屬伺服器上的複製過濾器。(錯誤報告

你是對的,文件有點依賴於此,但我在 MySQL 5.7 中的功能發佈公告中的常見問題解答中找到了這個片段:

11) Are these changes made through the new command persistent upon restarting the server?
A) No, the changes are not persistent. You have to change the values again after restarting the server. If you want these changes to be persistent, you can put them in my.cnf file.

[]

有趣的是,您聲稱這與 5.7 上的設置相同。如果您可以使該行為可重現(在 my.cnf 中沒有選項的 5.7 設置在重新啟動後仍然存在),那就太好了。

我還建議打開 8.0/5.7 的錯誤報告,以至少在官方文件中記錄此行為。

立即修復當然是設置配置選項。

引用自:https://dba.stackexchange.com/questions/238434