upload_max_filesize/post_max_size/memory_limit 限制)。mysql -u username -p database_name < /path/to/backup.sql
mysql -u root -p mydb2 < /data/sqlbak/bak.sql
輸入密碼後靜待完成,無輸出即成功;報錯會顯示行號與錯誤訊息。
| 參數/技巧 | 用途 | 範例 |
|---|---|---|
--max-allowed-packet=256M | 放大封包限制,防大行/大批次 INSERT 失敗 | mysql --max-allowed-packet=256M -u root -p db < dump.sql |
--default-character-set=utf8mb4 | 強制連線字元集,避免亂碼 | mysql --default-character-set=utf8mb4 -u root -p db < dump.sql |
--force | 遇錯繼續執行(慎用,僅用於救援) | mysql --force -u root -p db < dump.sql |
--verbose / -v | 顯示執行進度(每條 SQL 輸出) | mysql -v -u root -p db < dump.sql |
| 管線解壓匯入 | 直接匯入 .gz/.xz,省磁碟空間 | zcat dump.sql.gz | mysql -u root -p dbxzcat dump.sql.xz | mysql -u root -p db |
| PV 顯示進度條 | 視覺化進度、速度、ETA | pv dump.sql | mysql -u root -p db |
| 分庫匯出/匯入 | 單庫操作,減少鎖爭用 | mysqldump -u root -p db1 | mysql -u root -p db1_new |
SET AUTOCOMMIT=0;,結尾加 COMMIT;(或使用 --disable-keys 針對 MyISAM)。innodb_buffer_pool_size、innodb_log_file_size、innodb_flush_log_at_trx_commit=2(匯入期間犧牲 ACID 換速度,匯入後恢復)。SET FOREIGN_KEY_CHECKS=0; ... SET FOREIGN_KEY_CHECKS=1;。SET UNIQUE_CHECKS=0; ... SET UNIQUE_CHECKS=1;。| 錯誤 | 原因 | 解決 |
|---|---|---|
ERROR 2006 (HY000): MySQL server has gone away | 封包過大 / 超時 | 增大 max_allowed_packet、wait_timeout |
ERROR 1153 (08S01): Got a packet bigger than 'max_allowed_packet' | 同前 | 同前 |
ERROR 1062 (23000): Duplicate entry | 主鍵/唯一鍵衝突 | 檢查資料、用 REPLACE 或 IGNORE |
ERROR 1213 (40001): Deadlock | 並發匯入死鎖 | 單線程匯入、按主鍵排序 |
命令列 mysql < file.sql 是匯入大型 SQL 的**標準、高效、可控**方式。配合 pv 進度條、zcat 解壓管線、關鍵參數調優(max_allowed_packet、AUTOCOMMIT、FOREIGN_KEY_CHECKS),可穩定完成 TB 級匯入任務。