匯出
1. 整庫匯出
mysqldump -u user -p dbname > backup.sql
# 指定編碼(防亂碼)
mysqldump -u user -p --default-character-set=utf8mb4 dbname > backup.sql
2. 單表匯出
mysqldump -u user -p dbname table_name > table_backup.sql
3. 僅匯出結構(無資料)
mysqldump -u user -p -d --add-drop-table dbname > schema.sql
-d:no-data
--add-drop-table:每個 CREATE 前加 DROP TABLE
4. 遠端匯出
mysqldump -h 192.168.1.100 -u user -p dbname > backup.sql
匯入
1. 互動模式 SOURCE
mysql -u user -p --default-character-set=utf8mb4
USE dbname;
SOURCE /path/backup.sql;
2. 管道導入(非互動,適合腳本)
mysql -u user -p --default-character-set=utf8mb4 dbname < backup.sql
3. 壓縮檔直接導入
gunzip < backup.sql.gz | mysql -u user -p dbname
# 或 7z
7za x -so backup.sql.7z | mysql -u user -p dbname
亂碼解決鐵律
導出編碼 = 導入編碼 = 資料庫編碼 = 連線編碼 = 檔案實際編碼
常見錯誤組合
| 導出編碼 | 導入編碼 | 結果 |
| utf8mb4 | utf8mb4 | ✅ 正常 |
| latin1 | utf8mb4 | ❌ 雙重編碼亂碼 |
| utf8mb4 | latin1 | ❌ 截斷/問號 |
| 未指定(預設latin1) | utf8mb4 | ❌ 中文變 ??? |
修正已亂碼資料
# 1. 以 latin1 導出(當作二進位)
mysqldump --default-character-set=latin1 -uroot -p dbname > dump_latin1.sql
# 2. 檔案轉碼
iconv -f latin1 -t utf8 dump_latin1.sql > dump_utf8.sql
# 3. 檔案頭插入 SET NAMES
sed -i '1i SET NAMES utf8mb4;' dump_utf8.sql
# 4. 以 utf8mb4 導入
mysql --default-character-set=utf8mb4 -uroot -p dbname < dump_utf8.sql
實用參數速查
| 參數 | 作用 |
--single-transaction | InnoDB 熱備份,不鎖表 |
--quick | 大表逐行讀取,減少記憶體 |
--routines --triggers --events | 包含存儲過程/觸發器/事件 |
--no-create-info | 僅導出資料 |
--where="id>1000" | 條件導出 |