mysqldump (邏輯備份) 與 SOURCE (還原) 是 MySQL 最基礎、最通用的備份還原工具組合。本文整理 Windows/Linux 基礎操作、常用進階參數、壓縮/結構/多庫/遠程遷移等實戰場景,並深度解析 mysqldump 核心參數機制,助您建立可靠備份策略。
| 操作 | 命令範例 |
|---|---|
| 備份整庫 | mysqldump -h localhost -u root -p123456 dbname > backup.sql |
| 備份單表 | mysqldump -u root -p dbname table1 table2 > tables.sql |
| 僅備份結構 | mysqldump --no-data -u root -p dbname > struct.sql |
| 帶 DROP TABLE | mysqldump --add-drop-table -u root -p dbname > backup.sql |
| 壓縮備份 | mysqldump -u root -p dbname | gzip > backup.sql.gz |
| 多庫備份 | mysqldump --databases db1 db2 db3 > multi.sql |
| 全庫備份 | mysqldump --all-databases > all.sql |
| 還原 (Shell) | mysql -h localhost -u root -p dbname < backup.sql |
| 還原 (MySQL 內部) | mysql> SOURCE /path/backup.sql; |
| 解壓並還原 | gunzip < backup.sql.gz | mysql -u root -p dbname |
| 跨伺服器遷移 | mysqldump -u root -p dbname | mysql -h new_host -C dbname |
bin 目錄:cd /d D:\MySQL\binmysqldump -uroot -p dbname > dbname.sql (輸入密碼)Lock table 錯誤,加 --skip-lock-tables。mysql -uroot -p dbname < dbname.sql 或 MySQL 客戶端 SOURCE dbname.sql;# 備份
cd /var/lib/mysql # 或自定資料目錄
mysqldump -u root -p dbname > backup.sql
# 還原法一:進入客戶端
mysql -u root -p
mysql> USE dbname;
mysql> SOURCE /var/lib/mysql/backup.sql;
# 還原法二:直接管線
mysql -u root -p dbname < backup.sql
| 參數 | 說明 | 建議場景 |
|---|---|---|
--compatible=name | 輸出相容指定 DB/版本 (ansi,mysql323,mysql40,postgresql...) | 跨版本/異構遷移 |
--complete-insert, -c | 完整 INSERT (含欄位名),提高插入效率但可能超過 max_allowed_packet | 小表、需可讀性 |
--default-character-set=charset | 指定匯出字元集,**防止亂碼必加** | 所有非 latin1 環境 |
--disable-keys | INSERT 前後加 DISABLE/ENABLE KEYS,大幅加速 MyISAM 載入 | MyISAM 大表 |
--extended-insert | 多行合併 INSERT (預設開啟),--skip-extended-insert 關閉 | 大表加速,小表可關閉 |
--hex-blob | 二進位欄位 (BLOB/BINARY) 以十六進位輸出,**有二進位資料必加** | 含 BLOB/VARBINARY |
--lock-all-tables, -x | 全域讀鎖,保證一致性,自動關閉 --single-transaction | MyISAM 全庫一致性備份 |
--lock-tables | 鎖定當前庫所有表 (MyISAM),InnoDB 請用 --single-transaction | MyISAM 單庫備份 |
--no-create-info, -t | 僅匯出資料,不含 CREATE TABLE | 資料遷移、同步 |
--no-data, -d | 僅匯出結構 | Schema 版控、審核 |
--opt | 快捷組合:--add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset (預設開啟) | 通用備份,大表需配合 --quick |
--quick, -q | 串流讀取不緩存結果集,**大表必加**防止 OOM | 大表備份 |
--routines, -R | 匯出預存程序/函數 | 完整遷移 |
--single-transaction | 啟動事務一致性讀取 (InnoDB/BDB),不鎖表,**線上熱備份首選** | InnoDB 生產環境 |
--triggers | 匯出觸發器 (預設開啟) | 完整遷移 |
--master-data=1 | 輸出 CHANGE MASTER TO 指定 binlog 位置,配合 --single-transaction 實現線上備份可做 Slave | 建立從庫、時間點恢復 |
/usr/local/mysql/bin/mysqldump -uuser -ppass \
--default-character-set=utf8mb4 --opt --extended-insert=false \
--triggers -R --hex-blob -x db_name > db_name.sql
/usr/local/mysql/bin/mysqldump -uuser -ppass \
--default-character-set=utf8mb4 --opt --extended-insert=false \
--triggers -R --hex-blob --single-transaction db_name > db_name.sql
/usr/local/mysql/bin/mysqldump -uuser -ppass \
--default-character-set=utf8mb4 --opt --master-data=1 \
--single-transaction --flush-logs db_name > db_name.sql
SOURCE 是 **mysql 客戶端內建命令**,非標準 SQL。mysqld 執行用戶需有讀取權限。screen 或 tmux 中執行,防斷線中斷。SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0; 加速,結束後恢復並 COMMIT;。--master-data=1 --flush-logs 獲取 binlog 位置。熟練掌握 mysqldump 參數組合與 SOURCE 還原細節,是 DBA 與開發人員構建資料安全防線的核心基本功。