將即時 innodb 資料庫從一台伺服器移至另一台伺服器

將即時 innodb 資料庫從一台伺服器移至另一台伺服器

我需要將 innodb 資料庫從一台伺服器移到另一台伺服器 - 它也是從 mysql > mariadb 移動的。我想確保完全沒有問題,因此我將使用 mysqldump 匯出,然後在新伺服器上匯入。新伺服器上的 my.cnf 設定不同,因此我不想嘗試複製檔案。我也不完全關心停機時間,只要它確保良好的轉儲/導入沒有問題。

因為這是一個即時資料庫,所以我擔心轉儲中由於事務或其他任何原因而導致的錯誤,這些錯誤在新伺服器上導入時會導致約束問題/損壞。

這裡最好的程式是什麼?這就是我的想法......

  1. 在沒有使用者存取權限的情況下重新啟動 mysql,這樣就沒有人可以讀/寫資料庫。
  2. mysqldump 與mysqldump -u [username] -p[password] -h [host] [databaseName] > [backup-name].sql
  3. 導入與mysql -u [username] -p[password] -h [host] [databaseName] < [filename].sql

是否可以重新啟動mysql並鎖定所有使用者?這是否可以解決任何延遲的交易並確保導入時資料的合法性?基本上,一旦開始備份過程,我想永遠“關閉”對資料庫的訪問,因為一旦將其導入到新伺服器上,就永遠不需要再次訪問它,更重要的是,我不希望在轉儲/期間訪問它恢復到另一台伺服器。當然,我想將資料庫保留在原始伺服器上,以防出現匯入問題。

答案1

請注意,如果資料庫中有任何加密字段,則必須使用--hex-blobwith 。mysqldump如果--hex-blob不使用,匯入時資料將變得無用。

在備份之前,請執行以下操作FLUSH TABLES WITH READ LOCK以防止任何變更發生。您可以一步將備份透過管道傳輸到新伺服器,從而節省複製 SQL 檔案的步驟。

mysqldump --single-transaction --routines --triggers --events --hex-blob db-name | mysql -h server db-name

答案2

您應該做的第一件事是備份資料庫,然後將其導入新伺服器並首先測試新伺服器(如果一切正常),還要檢查創建備份和恢復到新伺服器的時間,以便您知道將新伺服器投入生產需要多少時間。

當您準備好將所有內容傳遞到新伺服器時,最好停用與資料庫的所有連接,除非本機主機,因為您將使用mysqldump 存取資料庫並進行備份,如果對資料庫的所有存取都來自您的網站伺服器,您可以放下另一種方法是設定 iptables 以阻止 mysql 連接埠上除 localhost 之外的所有流量。然後備份資料庫,恢復到新伺服器並將新伺服器設定為活動狀態,並確保所有連線都會轉到新伺服器。

答案3

這一切都取決於你的資料庫是否足夠大或小,也取決於你正在運行什麼服務,但我想一定有一些維護窗口,在周末深夜,關閉你的apache/nginx,你也可以在禁用網絡的情況下重新啟動你的資料庫,防火牆或不同的本機連接埠。出口:

mysqldump -p --single-transaction --routines --triggers --events DATABASE | gzip > backup.sql.gz

進口:

zcat backup.sql.gz | mysql -f -p DATABASE

重新檢查:

mysql_upgrade -p -f

壓縮包 會幫助你做得更快。

相關內容