MySQL utf8mb4 遷移 - 複製注意事項
我們計劃根據本文將包含混合表
utf8
和latin1
表的 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 hexC3A9
。如果您看到
C383C2A9
,您有“雙重編碼”,您現在需要擔心這一點。至於主/從,…
如果是 Master-Master(為了便於故障轉移),那麼考慮一次做一個,從而避免超過短暫的停機時間(故障轉移)。請務必使用
SET
禁用會話複製。你在用
ALTER TABLE ... CONVERT TO CHARACTER SET ...
嗎?(這可能是進行轉換的唯一有效方法。)有了主從和大量的停機時間,這
ALTER
可以簡單地通過複製。