本文記錄同一 MySQL 實例內不同資料庫間的資料複製,以及 GB 級大資料庫的高效遷移技巧。
mysqldump Portal_DEV -u root -ppassword1$ --add-drop-table | mysql Portal_Optimize -u root -ppassword1$
注意:在 Shell 終端機執行,非 MySQL 命令列。管道流避免中間檔案落地,速度較快。
原因:單行/單封包超過預設 1MB/4MB 限制。
解決:修改 my.cnf:
[mysqld]
max_allowed_packet = 32M
重啟 MySQL 服務生效。
mysqldump -uroot -ppassword --quick Portal_DEV | gzip > Portal_DEV.contents.gz
--quick:逐行讀取寫入管道,不載入全部結果至記憶體gzip:即時壓縮,減少磁碟 I/O 與空間佔用gunzip < Portal_DEV.contents.gz | mysql -uroot -ppassword Portal_Optimize
同樣採用管道流,邊解壓邊導入,無需完整解壓檔案。
| 參數 | 用途 | 建議值 |
|---|---|---|
| --single-transaction | InnoDB 熱備份,取得一致性快照不鎖表 | InnoDB 必加 |
| --master-data=2 | 輸出 CHANGE MASTER 註釋,便於建立從庫 | 遷移做從庫時 |
| --hex-blob | 二進位欄位十六進位導出 | 含 BLOB/二進位欄位必加 |
| --extended-insert=FALSE | 單行 INSERT,利於斷點續傳與部分恢復 | 極大表或網路不穩時 |
| --disable-keys | 導入前禁用索引,導入後重建 | MyISAM 大表顯著加速 |
SET FOREIGN_KEY_CHECKS=0;)ANALYZE TABLE 更新統計資訊