首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 資料庫備份與還原:mysqldump 完整指南與參數詳解

     編輯:MySQL 綜合教學

MySQL 資料庫備份與還原:mysqldump 完整指南與參數詳解

在專案營運過程中,資料庫備份與還原是不可或缺的環節。常見的處理方式主要有兩種:使用 SELECT ... INTO OUTFILE 搭配 LOAD DATA INFILE,以及使用官方工具 mysqldump。前者優在於可自訂導出格式、僅導出純資料不含建表結構,便於導入不同結構的資料表,靈活度較高;後者則是標準化的備份方案,功能強大、參數豐富,適合完整庫備份、結構備份及跨環境遷移。

一、使用 INTO OUTFILE / LOAD DATA INFILE 導出入資料

此方法適合需自訂欄位分隔符、行結束符等格式的場景。示例:

-- 導出符合條件的資料到檔案
SELECT * FROM mytable 
WHERE status != 0 AND name != '' 
INTO OUTFILE '/home/db_bak2012' 
FIELDS TERMINATED BY '|' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n';

-- 導入資料到另一張表
LOAD DATA INFILE '/home/db_bak2012' 
INTO TABLE mytable_bak 
FIELDS TERMINATED BY '|' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n';

二、mysqldump 常用實戰範例

1. 備份整個資料庫

mysqldump -u 用戶名 -p 資料庫名 > 導出檔名.sql
mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql

2. 備份單一資料表

mysqldump -u 用戶名 -p 資料庫名 表名 > 導出檔名.sql
mysqldump -u wcnc -p smgp_apps_wcnc users > wcnc_users.sql

3. 僅導出資料庫結構(不含資料)

mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc > d:\wcnc_db.sql
# -d: 不導出資料;--add-drop-table: 每個 CREATE 前加 DROP TABLE

4. 還原資料庫(使用 source 指令)

# 進入 MySQL 控制台
mysql -u root -p
mysql> USE 資料庫名;
mysql> SET NAMES utf8;  -- 注意是 utf8 而非 UTF-8,避免亂碼
mysql> SOURCE d:\wcnc_db.sql;

5. 批量備份多個資料庫

mysqldump -uroot -p --databases test mysql  # 以空格分隔多個庫名

6. 備份所有資料庫

mysqldump -uroot -p --all-databases

三、mysqldump 核心參數詳細說明

以下整理常用參數,供快速查閱:

參數簡寫說明
--all-databases-A導出全部資料庫
--all-tablespaces-Y導出全部表空間
--no-tablespaces-y不導出任何表空間資訊
--add-drop-database每個資料庫建立前加 DROP DATABASE
--add-drop-table每個資料表建立前加 DROP TABLE(預設開啟,可用 --skip-add-drop-table 關閉)
--add-locks導出表前加 LOCK TABLES,後 UNLOCK TABLES(預設開啟)
--allow-keywords允許關鍵字作為欄位名(以表名為前綴)
--apply-slave-statements在 CHANGE MASTER 前加 STOP SLAVE,結尾加 START SLAVE
--character-sets-dir字元集檔案目錄
--comments附加註釋資訊(預設開啟,--skip-comments 關閉)
--compatible導出資料相容其他資料庫或舊版 MySQL(值:ansi、mysql323、postgresql 等)
--compact輸出精簡資訊(去除註釋、頭尾結構),等同多個 --skip-* 選項
--complete-insert-c使用完整 INSERT 語句(含欄位名),提高插入效率但可能受 max_allowed_packet 限制
--compress-C啟用客戶端與伺服器間壓縮傳輸
--create-options-a在 CREATE TABLE 包含所有 MySQL 特有選項(預設開啟)
--databases-B導出多個資料庫,後續參數視為資料庫名
--debug輸出除錯資訊
--default-character-set設定預設字元集(預設 utf8)
--delayed-insert採用 INSERT DELAYED 方式導出
--delete-master-logs備份後刪除主庫 binlog,自動啟用 --master-data
--disable-keys以 ALTER TABLE DISABLE/ENABLE KEYS 包裹 INSERT,加速導入(僅 MyISAM,預設開啟)
--dump-slave將主庫 binlog 位置追加到輸出檔,值 1/2 決定格式
--events-E導出事件
--extended-insert-e使用多值 INSERT 語法,縮減檔案體積並加速導入(預設開啟)
--flush-logs導出前刷新日誌
--flush-privileges導出 mysql 資料庫後發出 FLUSH PRIVILEGES
--force忽略導出過程中的 SQL 錯誤
--hex-blob以十六進位導出二進位欄位(BINARY、VARBINARY、BLOB)
--host-h指定主機資訊
--ignore-table不導出指定表(需重複指定,格式:database.table)
--insert-ignore使用 INSERT IGNORE 語句
--lock-all-tables-x全域讀鎖定所有表,確保一致性(關閉 --single-transaction 和 --lock-tables)
--lock-tables-l導出前鎖定所有表(READ LOCAL),InnoDB 建議用 --single-transaction
--master-data輸出 binlog 位置到檔案,值 1 輸出 CHANGE MASTER,2 為註釋格式
--max_allowed_packet最大封包長度
--net_buffer_lengthTCP/IP 與 socket 連線緩衝區大小
--no-autocommit用 autocommit/commit 包裹表
--no-create-db-n不產生 CREATE DATABASE 語句
--no-create-info-t不產生 CREATE TABLE 語句
--no-data-d不導出資料,僅導出結構
--opt綜合選項:等同 --add-drop-table --add-locks --create-options --quick --extended-insert --lock-tables --set-charset --disable-keys(預設開啟)
--order-by-primary依主鍵或首個唯一鍵排序記錄(導出 MyISAM 到 InnoDB 時有用,但耗時)
--password-p連線密碼
--port-P連線埠號
--protocol連線協定:tcp、socket、pipe、memory
--quick-q不緩衝查詢,直接輸出(預設開啟)
--quote-names-Q用反引號包裹表/欄位名(預設開啟)
--replace使用 REPLACE INTO 取代 INSERT INTO
--result-file-r直接輸出到指定檔案(Windows 換行符適用)
--routines-R導出預存程序與自訂函數
--set-charset輸出 SET NAMES default_character_set(預設開啟)
--single-transaction導出前發 BEGIN,確保一致性(僅 InnoDB,與 --lock-tables 互斥,大表建議搭配 --quick)
--dump-date在輸出檔加入導出時間(預設開啟)
--skip-opt禁用 --opt 選項
--socket-S指定 socket 檔案位置(預設 /tmp/mysql.sock)
--tab-T為每個表建立 tab 分隔文字檔(需 mysqldump 與 mysqld 同機)
--tables覆蓋 --databases,指定導出表名
--triggers導出觸發器(預設開啟,--skip-triggers 關閉)
--tz-utc設定時區 TIME_ZONE='+00:00',保證 TIMESTAMP 正確性
--user-u指定連線用戶名
--where-w只導出符合 WHERE 條件的記錄
--xml-X導出 XML 格式
--plugin_dir客戶端插件目錄
--default_auth客戶端插件預設權限

四、實務建議

  • 大型 InnoDB 資料庫備份首選 --single-transaction --quick --routines --triggers --events 組合,確保一致性且不阻塞寫入。
  • 跨版本遷移時加上 --compatible=ansi 降低相容性風險。
  • Windows 環境下建議使用 --result-file 避免換行符問題。
  • 定期備份腳本應包含錯誤檢查、日誌記錄與舊備份清理機制。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved