mysqldump -uusername -ppassword --all-databases > all.sql
mysql> source all.sql;
mysqldump -uusername -ppassword --databases db1 db2 > db1db2.sql
mysql> source db1db2.sql;
# 匯出 mysqldump -uusername -ppassword db1 > db1.sql # 匯入(系統命令列) mysql -uusername -ppassword db1 < db1.sql # 匯入(MySQL 命令列) mysql> source db1.sql;
# 匯出 mysqldump -uusername -ppassword db1 table1 table2 > tb1tb2.sql # 匯入 mysql -uusername -ppassword db1 < tb1tb2.sql # 或 MySQL 命令列 mysql> use db1; source tb1tb2.sql;
mysqldump -uusername -ppassword --default-character-set=gb2312 db1 table1 > tb1.sql
mysqldump 客戶端可轉儲資料庫供備份或遷移至其他 SQL 伺服器。轉儲內容包含建表與/或載入資料的 SQL 陳述式。若伺服器上表皆為 MyISAM,建議使用 mysqlhotcopy 以獲得更快的備份/恢復速度。
shell> mysqldump [options] db_name [tables] shell> mysqldump [options] --databases db1 [db2 db3...] shell> mysqldump [options] --all-databases
未指定表或使用 --databases/--all-databases 時,轉儲整個資料庫。執行 mysqldump --help 可查看版本支援的選項。
| 參數 | 說明 |
|---|---|
--help, -? | 顯示幫助訊息並退出 |
--add-drop-database | 每個 CREATE DATABASE 前加 DROP DATABASE |
--add-drop-table | 每個 CREATE TABLE 前加 DROP TABLE |
--add-locks | 用 LOCK TABLES/UNLOCK TABLES 包裹各表轉儲,重載更快 |
--all-databases, -a | 轉儲所有資料庫所有表 |
--allow-keywords | 允許關鍵字作為欄位名,需加表名前綴 |
--comments[={0|1}] | 0=禁止額外資訊(版本、主機等),預設 1 |
--compact | 精簡輸出,禁用註解並啟用多個 --skip-* 選項 |
--compatible=name | 產生相容其他資料庫/舊版 MySQL 的輸出(ansi、mysql323、postgresql、oracle 等) |
--complete-insert, -c | 使用包含欄位名的完整 INSERT 陳述式 |
--compress, -C | 壓縮客戶端與伺服器間傳輸資料 |
--create-options | 在 CREATE TABLE 中包含所有 MySQL 表選項 |
--databases, -B | 轉儲多個資料庫,所有名稱參數視為資料庫名 |
--debug[=debug_options], -# | 寫除錯日誌 |
--default-character-set=charset | 指定預設字符集(預設 utf8) |
--delayed-insert | 使用 INSERT DELAYED 插入行 |
--delete-master-logs | 主複制伺服器上,轉儲完成後刪除二進制日誌 |
--disable-keys, -k | 以 ALTER TABLE ... DISABLE/ENABLE KEYS 包裹 INSERT,加快 MyISAM 表載入 |
--extended-insert, -e | 使用多行 INSERT 語法,縮小檔案並加速重載 |
--flush-logs, -F | 轉儲前刷新伺服器日誌檔案 |
--force, -f | 轉儲過程中遇 SQL 錯誤仍繼續 |
--host=host_name, -h | 從指定主機轉儲資料(預設 localhost) |
--hex-blob | 十六進制轉儲二進制字串欄位 |
--lock-all-tables, -x | 全域讀鎖定所有資料庫所有表 |
--lock-tables, -l | 轉儲前鎖定所有表(MyISAM 用 READ LOCAL 允許並行插入) |
--master-data[=value] | 將二進制日誌位置/檔名寫入輸出,value=1 寫 CHANGE MASTER,2 寫註解 |
--no-create-db, -n | 禁用 CREATE DATABASE 陳述式 |
--no-create-info, -t | 不寫 CREATE TABLE 陳述式 |
--no-data, -d | 不寫資料行資訊,僅轉儲結構 |
--opt | 速記選項,等同 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset(預設開啟) |
--password[=password], -p | 連線密碼(短選項 -p 後不可有空格) |
--port=port_num, -P | TCP/IP 連接埠號 |
--protocol={tcp|socket|pipe|memory} | 連線協定 |
--quick, -q | 大表轉儲時逐行檢索而非全量緩存 |
--quote-names, -Q | 用反引號引用資料庫/表/欄位名(預設開啟) |
--result-file=file, -r | 輸出導向指定檔案(Windows 下防止換行符轉換) |
--routines, -R | 轉儲存儲程序/函數(含 CREATE PROCEDURE/FUNCTION) |
--set-charset | 輸出中加入 SET NAMES default_character_set(預設開啟) |
--single-transaction | 轉儲前發 BEGIN,適用 InnoDB/BDB 取得一致性快照 |
--socket=path, -S | 連接 localhost 時的套接字檔案 |
--tab=path, -T | 產生 Tab 分隔資料檔(需同機器且有 FILE 權限) |
--tables | 覆蓋 --databases,後續參數視為表名 |
--triggers | 轉儲觸發器(預設開啟) |
--tz-utc | 輸出加入 SET TIME_ZONE='+00:00' 便於跨時區轉儲/重載 |
--user=user_name, -u | MySQL 使用者名稱 |
--verbose, -v | 詳細模式,列印操作資訊 |
--version, -V | 顯示版本資訊並退出 |
--where='where-condition', -w | 只轉儲符合 WHERE 條件的記錄 |
--xml, -X | 輸出 XML 格式 |
# 備份單一資料庫 mysqldump --opt db_name > backup-file.sql # 還原 mysql db_name < backup-file.sql # 或 mysql -e "source /path-to-backup/backup-file.sql" db_name # 跨伺服器複製資料庫 mysqldump --opt db_name | mysql --host=remote_host -C db_name # 備份多個資料庫 mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql # 備份所有資料庫 mysqldump --all-databases > all_databases.sql # InnoDB 線上備份(僅開始需全域讀鎖) mysqldump --all-databases --single-transaction > all_databases.sql # 點對點恢復備份(含二進制日誌位置) mysqldump --all-databases --master-data=2 > all_databases.sql # 或配合刷新日誌 mysqldump --all-databases --flush-logs --master-data=2 > all_databases.sql
max_allowed_packet:客戶端/伺服器通訊緩衝區最大值(最大 1GB)net_buffer_length:通訊緩衝區初始大小,多行 INSERT 時行長度上限可用 --var_name=value 或 --set-variable=var_name=value(不推薦)設定。
掌握 mysqldump 的靈活參數組合,能讓資料庫備份、遷移、災難恢復更高效可控。建議根據業務場景選擇適當的鎖策略、事務隔離與字符集設定。