Mysql

如何在兩台伺服器之間複製整個 MySQL 數據庫?

  • August 27, 2013

兩台機器之間有很好的連接(MySQL 5.5.28):

mysqldump -u root -p'password' --all-databases | ssh root@SERVERNAME mysql -u root -p'password' --all-databases

所以 AFAIK 這個 oneliner 就像在伺服器#A 上進行 MySQL 轉儲,然後將轉儲複製到伺服器#B,然後“在伺服器#B 上導入它。

Q1:數據庫中沒有其他內容?這是最快的方法嗎?:) 還是有更快的?發生這種情況時會出什麼問題嗎?

Q2 : 如何測試伺服器#B 上的發送是否完全成功?如何檢查兩個數據庫是否“逐位”相同?

首先,您應該知道使用哪種儲存引擎非常重要。

讓我們假設您的兩個 mysql 伺服器具有相同的版本。然後你可以對 MyISAM 表使用 mysqlhotcopy。這應該非常快,但這種方法僅限於 MyISAM 表。因為 mysqlhotcopy 直接複製文件,你可以很容易地回答你的問題,如果兩個數據庫是“逐位”相同的,借助diff.

INNODB 是 5.5.5 版本的預設儲存引擎。如果您使用 INNODB 儲存引擎,情況看起來會有所不同。在這種情況下,您將無法使用mysqlhotcopy,剩下的就是mysqldump.

如果您使用mysqldump. 例如,如果伺服器#A 上的數據庫有一個不存在的表的視圖,mysql 會嘗試在管道右側創建一個不存在的表的視圖並且失敗。在這種情況下,您可以使用該--force選項來避免中止。

mysql --force ...

我已經複製了一個完整的 mysql 數據庫,mysqldump並比較了兩台伺服器的轉儲,發現轉儲僅在時間戳上有所不同。這可能是您的解決方案。

您還應該看看其他選項mysqldump。例如我想到

--add-drop-database
--add-drop-table
--single-transaction    ( for transactional tables only (like INNODB))

引用自:https://unix.stackexchange.com/questions/67633