關於從 MySQL 5.6 數據庫複製 MySQL 5.1 的問題
我有一個關於從 MySQL 5.6 DB 複製的 MySQL 5.1 DB 可能發生的潛在問題的問題。
我知道基於http://dev.mysql.com/doc/refman/5.6/en/replication-compatibility.html 和https://serverfault.com/questions/262936/is-replication等資源所涉及的風險-from-mysql-5-5-master-to-a-5-1-slave-possible
但是,這是一個非常特殊的情況,因為我試圖用 5.6 版本替換 MySQL 5.1 數據庫,而使停機時間最短的唯一方法是先設置一個 5.6 數據庫,然後讓它從 5.1 數據庫複製,這反過來也會從 5.6 DB 複製以形成循環複製。這樣做的目的是確保在切換期間(當 5.6 DB 將成為接收實時寫入而不是 5.1 的活動數據庫時),不會失去任何寫入數據。
我很好奇是否有人曾經在從 5.6 數據庫複製 5.1 數據庫時進行過這種設置,以及您是否遇到過任何問題。我不確定 5.6 DB 中的哪些 SQL 命令在複製期間可能會對 5.1 DB 造成問題。
準確的說5.6版本是5.6.21,5.1版本是5.1.73
謝謝
信不信由你,我曾經寫過一篇關於為什麼不應該這樣做的文章(如何在 MySQL 5.5 上完全禁用 utf8mb4?)。但是,本著我的舊文章和@ChristopherSchultz的評論的精神,我會竭盡全力告訴你如何做到這一點,然後告訴你為什麼不應該這樣做。
我曾經寫過一篇關於任何空二進制日誌的主位置的文章:
120
在 MySQL 5.6 中107
在 MySQL 5.5 中106
在 MySQL 5.1 中98
在 MySQL 4.1/5.0- MySQL master binlog 損壞
多年來,在這個論壇上,我從某人(我認為是 Aaron Brown 或 Morgan Tocker)那裡了解到,無論 MySQL 版本如何,所有二進制日誌都有一個通用位置:位置 4。
我曾經把它放在一個答案中(
Mar 05, 2013
:MySQL Replication without stop master)。在我回答的第 6 步中,我寫了這個:CHANGE MASTER TO MASTER_HOST='10.1.20.30', MASTER_PORT=3306, MASTER_USER='repluser', MASTER_PASSWORD='replpass', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=4;
我還在這些其他文章中使用了位置 4
Apr 02, 2014
:如何解決從網路讀取時複製事件校驗和驗證失敗的問題。錯誤程式碼:1743Mar 05, 2014
:在 MySQL 伺服器主機上更改時鐘時間的風險出於某種原因,我很少在任何其他文章中重複此資訊。就個人而言,我擔心 binlog 事件在每個事件的大小(以字節為單位)方面可能因版本而異。信不信由你,在過去的兩周里,我一直在從 MySQL 5.5 升級數據庫伺服器。到 MySQL 5.6。由於混合模式二進制日誌記錄,複製中斷時會發生罕見的事件,並且您無法通過標準複製技術從二進制日誌文件和位置重置它。我不得不在 Master 上處理二進制日誌,複製數據,並從頭開始設置複製幾次(400 個虛擬機中有 5 個,但它仍然發生了 5 次)。我非常肯定,從一個新的 Master 複製到一個舊的 Slave 會導致更多的問題。
因此,我只能說理論上可以做到,MySQL 可能不會反對,也就是說,直到 MySQL Replication 遇到一個它無法辨識且無法解釋的格式的 binlog 事件。
請自擔風險試一試!!!
更新 2014-11-18 22:32 EST
僅供官方參考,本例 CHANGE MASTER TO 命令
CHANGE MASTER TO MASTER_HOST='master2.mycompany.com', MASTER_USER='replication', MASTER_PASSWORD='bigs3cret', MASTER_PORT=3306, MASTER_LOG_FILE='master2-bin.001', MASTER_LOG_POS=4, MASTER_CONNECT_RETRY=10;
出現在MySQL 5.6 文件中。它也在MySQL 4.1 文件中。
因此,位置 4 一直為人所知(我只知道幾年)。儘管如此,我相信 MySQL 複製從舊的 Master 到新的 Slave(但不是永久的)。我不信任從新 Master 到舊 Slave 的 MySQL 複製。
更新 2014-11-19 17:47 EST
請不要走循環複製路徑,因為它只會增加因版本不同而失去 binlog 事件的風險。您應該始終將一個方向複製到較新的版本。然後,只需故障轉移到較新的版本。
我已經在短時間內成功地完成了 5.1 到 5.5 和 5.5 到 5.6,就像你打算做的那樣。可以分步升級嗎?也就是5.1到5.5到5.6?
您可能遇到的一些問題可能是由您的工作負載所特有的事情引起的。我使用 pt-upgrade 工具 ( http://www.percona.com/doc/percona-toolkit/2.2/pt-upgrade.html ) 對複製到新版本的舊版本執行一批查詢,用於測試(在具有生產大小數據的單獨測試伺服器對上)。