Featured image of post MySQL 快速導入恢復大型 SQL 備份檔案

MySQL 快速導入恢復大型 SQL 備份檔案

這裡指的大於 100G 以上的。一般只需耐心等待恢復即可。對於幾百 G 的 SQL 備份檔案,不建議使用 Mobxterm 或 Xshell 這類傳輸工具,總是會出現一些奇怪的問題,建議使用原生的 scp 命令進行傳送。`scp` 命令用於在 Linux 和 Unix 操作系統之間安全複製檔案和目錄。具體的 scp 複製命令可以參考這篇文章:[https://bmzhp.com/knowledge/174.html](https://bmzhp.com/knowledge/174.html)

這裡所提及的大型檔案是指 100G 以上的。一般耐心等待備份恢復即可。對於幾百 G 的 SQL 備份檔案,不建議使用 Mobxterm 或 Xshell 之類的傳輸工具,因為這些工具常常會出現一些無法預測的問題。建議使用原生的 scp 命令進行檔案傳送。scp 命令是用於在 Linux 和 Unix 操作系統之間安全複製檔案和目錄的命令。您可以查看這篇文章以獲取具體的 scp 複製命令:https://bmzhp.com/knowledge/174.html

將 SQL 檔案複製到 Linux 伺服器後,為了優化 MySQL 以加快備份恢復速度,可以採用以下策略:

1. 調整緩衝池

MySQL 會使用內存緩存查詢和表格資料,以減少磁碟 I/O 操作。如果您的系統有更多可用的記憶體,可以適當增加以下緩衝池參數:

  • innodb_buffer_pool_size:如果使用 InnoDB 儲存引擎,可以考慮將此參數設為可用記憶體的 70% 至 80%。
  • key_buffer_size:如果使用的是 MyISAM 儲存引擎,則考慮適度增加此參數以提高性能。

2. 啟用批次處理模式

MySQL 支援使用批次處理模式進行導入,以加快 SQL 檔案的導入速度。為此,您在導入 SQL 檔案時需使用以下命令:

1
mysql -u username -p --default-character-set=utf8 dbname < data.sql

其中,--default-character-set=utf8 可根據 SQL 檔案的字符集進行調整。此外,您還可以使用以下選項啟用批次處理模式:

1
mysql -u username -p --default-character-set=utf8 dbname --max_allowed_packet=512M --net_buffer_length=8M < data.sql

在上述命令中,max_allowed_packet 用於指定 MySQL 資料包的最大大小,而 net_buffer_length 則是指定 MySQL 網路緩衝區的大小。這些參數可根據您的硬體資源進行調整,以提升導入的速度。

3. 禁用日誌

MySQL 在執行 SQL 檔案時,會將每個語句記錄到二進位日誌中,以便進行備份和恢復。但是,如果您不需要二進位日誌,可以禁用它以加快導入速度。為此,請在 MySQL 的配置檔中添加以下行:

1
2
[mysqld]
skip-log-bin

4. 禁用外鍵約束

MySQL 在執行 SQL 檔案時,會驗證外鍵約束,確保資料的一致性。然而,如果您的 SQL 檔案已經符合外鍵約束,可以禁用此功能以加速導入速度。為此,請在 SQL 檔案的開頭添加以下語句:

1
SET foreign_key_checks = 0;

然後,在 SQL 檔案的結尾添加以下語句:

1
SET foreign_key_checks = 1;

如此一來,您就可以暫時禁用外鍵約束,然後再重新啟用。

最後,請確保您的 MySQL 版本已更新至最新,並已應用所有必要的安全補丁和修復程式。這樣可以保證您的 MySQL 數據庫高效、安全並穩定運行。

Licensed under CC BY-NC-SA 4.0