Innodb

mysqldump/restore 或 alter table 哪個更快?

  • September 26, 2011

我有 InnoDB 數據庫,它們使用相同的 ibdata 文件,這個 ibdata 的大小約為 250G。現在我有一個大約 100G 的數據庫。我的經理要求我將此數據庫移動到另一台伺服器並使用 innodb_file_per_table。

現在我不能長時間關閉系統。所以我需要你的建議,這更快:

  • mysqldump -uusername -pmypassword ––extended-insert ––disable-keys ––quick MyDb>Mydb.sql 然後在第二台伺服器上mysql -uusername -ppass mydb

  • 或者將 ibdata 文件複製到我的其他伺服器並檢查所有表並執行以下操作:

    1. ALTER TABLE table_name 禁用鍵;
    2. ALTER TABLE table_name engine=myisam;
    3. ALTER TABLE table_name engine=innodb;
    4. ALTER TABLE table_name 啟用鍵;

如果您有更好的想法,請與我們分享!

謝謝你的幫助

到處複製 ibdata 文件充滿危險。元數據的重要位可以儲存在其他文件中,例如 ib_logfile0 和 ib_logfile1(這不是一個完整的列表),並且新伺服器上的設置(例如這兩個日誌文件的大小)需要與舊伺服器完全相同. 如果你弄錯了這些東西或錯過了複製其中一個文件,新伺服器將無法啟動,你將不得不處理錯誤日誌中 MySQL 的有用錯誤消息。

Xtrabackup為您處理所有這些。在您使用它轉儲數據並“準備”它之後,您可以直接將文件複製到新伺服器並使用新的 ibdata 文件啟動它。“準備”步驟需要大量時間。

但是,由於您提到您要移動的數據庫只是 250GB ibdata 文件中的 100GB,我懷疑使用 mysqldump 方法會更快,因為它只需要傳輸 100GB 數據而不是 250GB。

您可以將 mysqldump 的輸出直接通過管道傳輸到 mysql 以避免必須像這樣將轉儲保存到磁碟:

mysqldump -uusername -pmypassword MyDB | mysql -h server2 -uusername -pmypassword MyDB

mysql 客戶端有一個 -C 選項,如果兩端都支持它,則啟用壓縮。只需將它放在 -h 選項之前。通過網路傳輸可能是整個操作中最慢的部分。如果您的伺服器不支持壓縮,您可以使用 -C 選項通過 ssh 進行傳輸:

mysqldump -uusername -pmypassword MyDB | ssh -C server2 "mysql -uusername -pmypassword MyDB"

最後的想法:除非你有一個 10MB/s 的網路,否則我寫這篇文章所花費的時間可能比這兩種方法加起來的時間要長。開始吧。:-)

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