Php

將 MySQL 數據庫移動到另一台伺服器

  • March 8, 2012

我有一個非常大的 mysql 數據庫(160GB)的伺服器。

將此數據庫移動到另一台伺服器的簡單方法是什麼?

當你說“移動到另一台伺服器”時,我們假設你想移動到另一台執行 MySQL 的伺服器,而不是移動到不同的 SQL 伺服器(即 postrgres 或 MSSQL)。

大致有兩種選擇。將/var/lib/mysql目錄按原樣傳輸到新伺服器,或執行導出和導入過程。

複製整個 mysql 目錄將意味著傳輸的數據更少,並且數據庫從一台機器精確複製到另一台機器。但是,MySQL 版本必須相同(我相信理論上次要版本可以改變,但我不會指望這一點)。您可以停止 MySQL,將目錄 tar 並用於scp將其複製到另一台機器。然後解壓另一台機器上的目錄並啟動 MySQL。如果您想定期進行此複製,您可能需要考慮直接rsync執行 lib 目錄,以便該rsync命令的後續執行僅複製差異。

執行導出/導入過程將創建一個巨大的文本文件,其中所有數據都保存為 SQL 插入語句(並在開始時使用表創建語句來設置數據庫)。這應該可以導入到不同的 MySQL 數據庫版本中,但同樣,如果數據庫的版本有很大不同,那麼事情可能會出錯。通常最好保持 MySQL 版本相同。這樣做的主要問題是,由於數據庫中已經有 160GB 的數據,轉儲會非常大,因為 SQL 語句中會有額外的數據。您可以使用上面列出的一些管道命令將數據發送到遠端電腦,或者您可以將文件轉儲出來(通過 gzip 將其壓縮以壓縮它)並通過 scp 傳輸(假設您有足夠的磁碟空間)。

mysqldump -u<user> -p<password> <database name> | gzip > db_dump.sql.gz

您可以使用的另一種技術是通過 gzip 將 mysqldump 命令通過管道傳輸,然後通過 netcat(通過網路將其發送)到在伺服器電腦上執行的另一個 netcat 程序,該程序將其通過管道傳輸到 gzip 並最終傳輸到 mysql。這樣做的好處是在數據通過線路時壓縮數據並且不會創建臨時文件。

在目標機器上:

nc -l 55555 | gzip -d -c | mysql <database name> -u<user> -p<password>

在源機器上

mysqldump -u<user> -p<password> <database name> | gzip | nc <ip of target server> 55555

希望這有助於解釋一些問題。如果您認為我在這裡犯了錯誤,請發表評論。仔細檢查命令的手冊頁,因為我沒有方便的 MySQL 數據庫來測試它。

引用自:https://serverfault.com/questions/367596