Mysql

MySQL utf8mb4 遷移 - 複製注意事項

  • February 19, 2019

我們計劃根據本文將包含混合表utf8latin1表的 MySQL 數據庫遷移到新utf8mb4字元集:https ://mathiasbynens.be/notes/mysql-utf8mb4 。

我們的伺服器是 5.7.22,實時數據庫有數百個 InnoDB 表,有幾個 GB 大,並且設置在主/從複製中。我已經成功地在測試伺服器上的數據庫副本上執行了轉換腳本。大約需要3個小時才能完成。

實時完成後,是否應該禁用複制並分別針對主伺服器和從伺服器執行轉換腳本,還是可以在複製活動的情況下針對主伺服器執行?

我們正在為此更新計劃一個維護視窗 - 在此過程中,我們應用程序的所有更新/查詢都將暫停。

我對此不確定,因為我一直在閱讀有關 MySQL 8 升級(對我們來說是一個單獨的未來項目)和 MySQL 提到執行需要在禁用複制的情況下重建表的大型操作: https ://dev.mysql.com/doc /refman/8.0/en/replication-upgrade.html。但是,這可能僅與版本 8 升級相關,我們不會同時進行。謝謝。

首先確保任何 latin1 列沒有被弄亂。找到一個重音字母並執行SELECT HEX(col) ...- 任何重音字母都應顯示為 2 個字節。例如é是 latin1 hexE9和 utf8mb4 hex C3A9

如果您看到C383C2A9,您有“雙重編碼”,您現在需要擔心這一點。

至於主/從,…

如果是 Master-Master(為了便於故障轉移),那麼考慮一次做一個,從而避免超過短暫的停機時間(故障轉移)。請務必使用SET禁用會話複製。

你在用ALTER TABLE ... CONVERT TO CHARACTER SET ...嗎?(這可能是進行轉換的唯一有效方法。)

有了主從和大量的停機時間,這ALTER可以簡單地通過複製。

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