文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  mysqldump — 資料庫備份程式

6.5.4 mysqldump — 資料庫備份程式

mysqldump 用戶端公用程式執行邏輯備份,產生一組 SQL 陳述式,這些陳述式可以執行以重現原始資料庫物件定義和資料表資料。它會傾印一個或多個 MySQL 資料庫以進行備份或傳輸到另一個 SQL 伺服器。mysqldump 命令也可以產生 CSV、其他分隔文字或 XML 格式的輸出。

提示

請考慮使用MySQL Shell 傾印公用程式,它提供多執行緒的平行傾印、檔案壓縮和進度資訊顯示,以及雲端功能,例如 Oracle Cloud Infrastructure Object Storage 串流,以及 MySQL HeatWave Service 相容性檢查和修改。可以使用MySQL Shell 載入傾印公用程式,輕鬆將傾印匯入 MySQL 伺服器執行個體或 MySQL HeatWave Service DB 系統。MySQL Shell 的安裝說明可以在這裡找到。

mysqldump 至少需要傾印資料表的SELECT 權限、傾印檢視表的SHOW VIEW 權限、傾印觸發器的TRIGGER 權限、如果未使用--single-transaction 選項則需要LOCK TABLES 權限,如果未使用 --no-tablespaces 選項則需要PROCESS 權限,以及如果 gtid_mode=ONgtid_purged=ON|AUTO 都存在,則使用--single-transaction 時需要 RELOADFLUSH_TABLES 權限。某些選項可能需要其他權限,如選項描述中所述。

若要重新載入傾印檔案,您必須擁有執行其中包含的陳述式所需的權限,例如為這些陳述式建立的物件提供適當的 CREATE 權限。

mysqldump 輸出可以包含變更資料庫定序的 ALTER DATABASE 陳述式。當傾印儲存的程式以保留其字元編碼時,可能會使用這些陳述式。若要重新載入包含這類陳述式的傾印檔案,則需要受影響資料庫的 ALTER 權限。

注意

在 Windows 上使用 PowerShell 進行傾印,並使用輸出重新導向會建立具有 UTF-16 編碼的檔案

mysqldump [options] > dump.sql

但是,UTF-16 不允許作為連線字元集(請參閱不允許的用戶端字元集),因此傾印檔案無法正確載入。若要解決此問題,請使用 --result-file 選項,它會以 ASCII 格式建立輸出

mysqldump [options] --result-file=dump.sql

如果您的傾印檔案包含系統資料表,則不建議在伺服器上啟用 GTID 時載入傾印檔案(gtid_mode=ON)。mysqldump 會針對使用非交易性 MyISAM 儲存引擎的系統資料表發出 DML 指示,當啟用 GTID 時,不允許此組合。

效能和可擴展性考量

mysqldump 的優點包括在還原之前檢視甚至編輯輸出的便利性和彈性。您可以複製資料庫以進行開發和 DBA 工作,或產生現有資料庫的輕微變體以進行測試。它不適用於備份大量資料的快速或可擴展解決方案。對於大型資料大小,即使備份步驟花費合理的時間,還原資料也可能非常緩慢,因為重新執行 SQL 陳述式涉及插入、索引建立等的磁碟 I/O。

對於大規模備份和還原,實體備份更適合,以原始格式複製資料檔案,以便可以快速還原。

如果您的資料表主要為 InnoDB 資料表,或者如果您同時有 InnoDBMyISAM 資料表,請考慮使用 mysqlbackup,這是 MySQL Enterprise 的一部分。此工具為 InnoDB 備份提供高效能且干擾最小;它也可以備份來自 MyISAM 和其他儲存引擎的資料表;它還提供許多方便的選項,以適應不同的備份情境。請參閱第 32.1 節,〈MySQL Enterprise Backup 概觀〉

mysqldump 可以逐行擷取並傾印表格內容,或者它可以從表格中擷取全部內容並在傾印前將其緩衝至記憶體中。如果您傾印大型表格,記憶體緩衝可能會造成問題。要逐行傾印表格,請使用 --quick 選項(或 --opt,它會啟用 --quick)。預設情況下會啟用 --opt 選項(因此也會啟用 --quick),因此要啟用記憶體緩衝,請使用 --skip-quick

如果您使用較新版本的 mysqldump 來產生要重新載入到非常舊的 MySQL 伺服器中的傾印,請使用 --skip-opt 選項,而不是 --opt--extended-insert 選項。

有關 mysqldump 的其他資訊,請參閱 第 9.4 節,〈使用 mysqldump 進行備份〉

調用語法

一般來說,有三種方式可以使用 mysqldump — 以傾印一組或多個表格、一組或多個完整的資料庫,或整個 MySQL 伺服器 — 如下所示

mysqldump [options] db_name [tbl_name ...]
mysqldump [options] --databases db_name ...
mysqldump [options] --all-databases

要傾印整個資料庫,請不要在 db_name 後面命名任何表格,或使用 --databases--all-databases 選項。

若要查看您版本的 mysqldump 支援的選項清單,請發出命令 mysqldump --help

選項語法 - 依字母順序摘要

mysqldump 支援以下選項,這些選項可以在命令列或選項檔案的 [mysqldump][client] 群組中指定。有關 MySQL 程式使用的選項檔案資訊,請參閱 第 6.2.2.2 節,〈使用選項檔案〉

表 6.13 mysqldump 選項

選項名稱 描述
--add-drop-database 在每個 CREATE DATABASE 陳述式之前新增 DROP DATABASE 陳述式
--add-drop-table 在每個 CREATE TABLE 陳述式之前新增 DROP TABLE 陳述式
--add-drop-trigger 在每個 CREATE TRIGGER 陳述式之前新增 DROP TRIGGER 陳述式
--add-locks 用 LOCK TABLES 和 UNLOCK TABLES 陳述式包圍每個表格傾印
--all-databases 傾印所有資料庫中的所有表格
--allow-keywords 允許建立為關鍵字的欄名稱
--apply-replica-statements 在 CHANGE REPLICATION SOURCE TO 陳述式之前包含 STOP REPLICA,並在輸出結束時包含 START REPLICA
--apply-slave-statements 在 CHANGE MASTER 陳述式之前包含 STOP SLAVE,並在輸出結束時包含 START SLAVE
--bind-address 使用指定的網路介面連線到 MySQL 伺服器
--character-sets-dir 字元集安裝所在的目錄
--column-statistics 寫入 ANALYZE TABLE 陳述式以產生統計直方圖
--comments 將註解新增至傾印檔案
--compact 產生更精簡的輸出
--compatible 產生與其他資料庫系統或較舊的 MySQL 伺服器更相容的輸出
--complete-insert 使用包含欄名稱的完整 INSERT 陳述式
--compress 壓縮用戶端與伺服器之間傳送的所有資訊
--compression-algorithms 允許連線到伺服器的壓縮演算法
--create-options 在 CREATE TABLE 陳述式中包含所有 MySQL 特有的表格選項
--databases 將所有名稱引數解譯為資料庫名稱
--debug 寫入除錯日誌
--debug-check 程式結束時列印除錯資訊
--debug-info 程式結束時列印除錯資訊、記憶體和 CPU 統計資料
--default-auth 要使用的驗證外掛程式
--default-character-set 指定預設字元集
--defaults-extra-file 除了常用的選項檔案外,還讀取指定的選項檔案
--defaults-file 僅讀取指定的選項檔案
--defaults-group-suffix 選項群組後綴值
--delete-master-logs 在複寫來源伺服器上,執行傾印作業後刪除二進位日誌
--delete-source-logs 在複寫來源伺服器上,執行傾印作業後刪除二進位日誌
--disable-keys 針對每個表格,用陳述式來停用和啟用索引鍵包圍 INSERT 陳述式
--dump-date 如果給定 --comments,則包含傾印日期作為「傾印完成於」註解
--dump-replica 包含列出複本來源二進位日誌座標的 CHANGE REPLICATION SOURCE TO 陳述式
--dump-slave 包含列出複本來源二進位日誌座標的 CHANGE MASTER 陳述式
--enable-cleartext-plugin 啟用明文驗證外掛程式
--events 從傾印的資料庫中傾印事件
--extended-insert 使用多列 INSERT 語法
--fields-enclosed-by 此選項與 --tab 選項一起使用,其含義與 LOAD DATA 的對應子句相同
--fields-escaped-by 此選項與 --tab 選項一起使用,其含義與 LOAD DATA 的對應子句相同
--fields-optionally-enclosed-by 此選項與 --tab 選項一起使用,其含義與 LOAD DATA 的對應子句相同
--fields-terminated-by 此選項與 --tab 選項一起使用,其含義與 LOAD DATA 的對應子句相同
--flush-logs 在開始傾印之前清除 MySQL 伺服器日誌檔案
--flush-privileges 傾印 mysql 資料庫後發出 FLUSH PRIVILEGES 陳述式
--force 即使在表格傾印期間發生 SQL 錯誤,仍繼續執行
--get-server-public-key 從伺服器請求 RSA 公開金鑰
--help 顯示說明訊息並結束
--hex-blob 使用十六進位標記傾印二進位欄
--host MySQL 伺服器所在的伺服器主機
--ignore-error 忽略指定的錯誤
--ignore-table 不要傾印指定的表格
--ignore-views 跳過傾印表格檢視
--include-master-host-port 在用 --dump-slave 產生的 CHANGE MASTER 陳述式中包含 MASTER_HOST/MASTER_PORT 選項
--include-source-host-port 在用 --dump-replica 產生的 CHANGE REPLICATION SOURCE TO 陳述式中包含 SOURCE_HOST 和 SOURCE_PORT 選項
--init-command 連線或重新連線到 MySQL 伺服器後要執行的單一 SQL 陳述式;重設現有已定義的命令
--init-command-add 新增一個 SQL 陳述式,以便在連線或重新連線到 MySQL 伺服器後執行
--insert-ignore 寫入 INSERT IGNORE 而不是 INSERT 陳述式
--lines-terminated-by 此選項與 --tab 選項一起使用,其含義與 LOAD DATA 的對應子句相同
--lock-all-tables 鎖定所有資料庫中的所有表格
--lock-tables 在傾印所有表格之前先鎖定它們
--log-error 將警告和錯誤附加到指定檔案
--login-path 從 .mylogin.cnf 讀取登入路徑選項
--master-data 將二進位日誌檔案名稱和位置寫入輸出
--max-allowed-packet 要傳送至或接收自伺服器的最大封包長度
--mysqld-long-query-time 慢查詢臨界值的會話值
--net-buffer-length 用於 TCP/IP 和 Socket 通訊的緩衝區大小
--network-timeout 增加網路逾時,以允許較大的表格傾印
--no-autocommit 將每個傾印表格的 INSERT 陳述式包圍在 SET autocommit = 0 和 COMMIT 陳述式中
--no-create-db 不要寫入 CREATE DATABASE 陳述式
--no-create-info 不要寫入重新建立每個傾印表格的 CREATE TABLE 陳述式
--no-data 不要傾印表格內容
--no-defaults 不讀取任何選項檔案
--no-login-paths 不要從登入路徑檔案讀取登入路徑
--no-set-names 與 --skip-set-charset 相同
--no-tablespaces 不要在輸出中寫入任何 CREATE LOGFILE GROUP 或 CREATE TABLESPACE 陳述式
--opt --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset 的縮寫
--order-by-primary 將每個表格的資料列依其主索引鍵或其第一個唯一索引排序後傾印
--output-as-version 決定傾印中使用的複本和事件術語;以與較舊版本相容
--password 連線到伺服器時要使用的密碼
--password1 連線到伺服器時要使用的第一個多因素驗證密碼
--password2 連線到伺服器時要使用的第二個多因素驗證密碼
--password3 連線到伺服器時要使用的第三個多因素驗證密碼
--pipe 使用具名管道連線到伺服器(僅限 Windows)
--plugin-authentication-kerberos-client-mode 允許透過 Windows 上的 MIT Kerberos 程式庫進行 GSSAPI 外掛程式驗證
--plugin-dir 外掛程式安裝所在的目錄
--port 連線的 TCP/IP 連接埠號碼
--print-defaults 列印預設選項
--protocol 要使用的傳輸協定
--quick 一次從伺服器擷取表格的一列資料列
--quote-names 在反引號字元中引用識別碼
--replace 寫入 REPLACE 陳述式而不是 INSERT 陳述式
--result-file 將輸出直接導向至指定的檔案
--routines 從傾印的資料庫中傾印已儲存的常式(程序和函式)
--server-public-key-path 包含 RSA 公開金鑰的檔案路徑名稱
--set-charset 將 SET NAMES default_character_set 新增至輸出
--set-gtid-purged 是否將 SET @@GLOBAL.GTID_PURGED 新增至輸出
--shared-memory-base-name 用於共用記憶體連線的共用記憶體名稱(僅限 Windows)
--show-create-skip-secondary-engine 從 CREATE TABLE 陳述式中排除 SECONDARY ENGINE 子句
--single-transaction 在從伺服器傾印資料之前發出 BEGIN SQL 陳述式
--skip-add-drop-table 不要在每個 CREATE TABLE 陳述式之前新增 DROP TABLE 陳述式
--skip-add-locks 不要新增鎖定
--skip-comments 不要將註解新增至傾印檔案
--skip-compact 不要產生更精簡的輸出
--skip-disable-keys 不要停用索引鍵
--skip-extended-insert 關閉 extended-insert
--skip-generated-invisible-primary-key 不要在傾印檔案中包含產生的隱藏主索引鍵
--skip-opt 關閉 --opt 設定的選項
--skip-quick 不要一次從伺服器擷取表格的一列資料列
--skip-quote-names 不要引用識別碼
--skip-set-charset 不要寫入 SET NAMES 語句
--skip-triggers 不要傾印觸發器
--skip-tz-utc 關閉 tz-utc
--socket 要使用的 Unix socket 檔案或 Windows 具名管道
--source-data 將二進位日誌檔案名稱和位置寫入輸出
--ssl-ca 包含受信任 SSL 憑證授權單位列表的檔案
--ssl-capath 包含受信任 SSL 憑證授權單位憑證檔案的目錄
--ssl-cert 包含 X.509 憑證的檔案
--ssl-cipher 用於連線加密的允許密碼
--ssl-fips-mode 是否在客戶端啟用 FIPS 模式
--ssl-key 包含 X.509 金鑰的檔案
--ssl-mode 與伺服器連線所需的安全性狀態
--ssl-session-data 包含 SSL 會期資料的檔案
--ssl-session-data-continue-on-failed-reuse 若會期重複使用失敗是否要建立連線
--tab 產生以 Tab 分隔的資料檔案
--tables 覆寫 --databases 或 -B 選項
--tls-ciphersuites 用於加密連線的允許 TLSv1.3 密碼套件
--tls-sni-servername 客戶端提供的伺服器名稱
--tls-version 用於加密連線的允許 TLS 協定
--triggers 傾印每個傾印表格的觸發器
--tz-utc 將 SET TIME_ZONE='+00:00' 新增至傾印檔案
--user 連線至伺服器時要使用的 MySQL 使用者名稱
--verbose 詳細模式
--version 顯示版本資訊並結束
--where 僅傾印由給定 WHERE 條件選取的列
--xml 產生 XML 輸出
--zstd-compression-level 使用 zstd 壓縮連線至伺服器的壓縮層級

連線選項

mysqldump 命令會登入 MySQL 伺服器以擷取資訊。以下選項指定如何連線至同一部機器或遠端系統上的 MySQL 伺服器。

  • --bind-address=ip_address

    命令列格式 --bind-address=ip_address

    在具有多個網路介面的電腦上,使用此選項選取要用於連線至 MySQL 伺服器的介面。

  • --compress, -C

    命令列格式 --compress[={OFF|ON}]
    已棄用
    類型 布林值
    預設值 關閉

    如果可能,壓縮用戶端和伺服器之間傳送的所有資訊。請參閱第 6.2.8 節,「連線壓縮控制」

    此選項已棄用。預計會在 MySQL 的未來版本中移除。請參閱設定舊版連線壓縮

  • --compression-algorithms=value

    命令列格式 --compression-algorithms=value
    類型 設定
    預設值 未壓縮
    有效值

    zlib

    zstd

    未壓縮

    允許連線至伺服器的壓縮演算法。可用的演算法與 protocol_compression_algorithms 系統變數的相同。預設值為 uncompressed

    如需詳細資訊,請參閱第 6.2.8 節,「連線壓縮控制」

  • --default-auth=plugin

    命令列格式 --default-auth=plugin
    類型 字串

    關於要使用的用戶端驗證外掛程式的提示。請參閱第 8.2.17 節,「可插拔驗證」

  • --enable-cleartext-plugin

    命令列格式 --enable-cleartext-plugin
    類型 布林值
    預設值 FALSE

    啟用 mysql_clear_password 明文驗證外掛程式。(請參閱第 8.4.1.3 節,「用戶端明文可插拔驗證」。)

  • --get-server-public-key

    命令列格式 --get-server-public-key
    類型 布林值

    要求伺服器提供 RSA 金鑰對密碼交換所需的公開金鑰。此選項適用於使用 caching_sha2_password 驗證外掛程式進行驗證的用戶端。對於該外掛程式,伺服器不會傳送公開金鑰,除非要求。對於不使用該外掛程式進行驗證的帳戶,會忽略此選項。如果未使用基於 RSA 的密碼交換,也會忽略此選項,就像用戶端使用安全連線連線至伺服器時一樣。

    如果給定 --server-public-key-path=file_name 並指定有效的公開金鑰檔案,它會優先於 --get-server-public-key

    如需有關 caching_sha2_password 外掛程式的資訊,請參閱第 8.4.1.1 節,「快取 SHA-2 可插拔驗證」

  • --host=host_name, -h host_name

    命令列格式 --host

    從給定主機上的 MySQL 伺服器傾印資料。預設主機為 localhost

  • --login-path=name

    命令列格式 --login-path=name
    類型 字串

    .mylogin.cnf 登入路徑檔案中具名的登入路徑讀取選項。「登入路徑」是一個選項群組,其中包含指定要連線至哪個 MySQL 伺服器以及要驗證為哪個帳戶的選項。若要建立或修改登入路徑檔案,請使用 mysql_config_editor 公用程式。請參閱第 6.6.7 節,「mysql_config_editor — MySQL 設定公用程式」

    如需有關此選項和其他選項檔案選項的其他資訊,請參閱第 6.2.2.3 節,「影響選項檔案處理的命令列選項」

  • --no-login-paths

    命令列格式 --no-login-paths

    略過從登入路徑檔案讀取選項。

    請參閱 --login-path 以取得相關資訊。

    如需有關此選項和其他選項檔案選項的其他資訊,請參閱第 6.2.2.3 節,「影響選項檔案處理的命令列選項」

  • --password[=password], -p[password]

    命令列格式 --password[=password]
    類型 字串

    用於連線至伺服器的 MySQL 帳戶密碼。密碼值是選用的。若未指定,mysqldump 會提示輸入密碼。若有指定,--password=-p 與後面的密碼之間不得有空格。如果未指定密碼選項,則預設為不傳送密碼。

    在命令列上指定密碼應視為不安全。為避免在命令列上提供密碼,請使用選項檔案。請參閱第 8.1.2.1 節,「最終使用者密碼安全指南」

    若要明確指定沒有密碼,且 mysqldump 不應提示輸入密碼,請使用 --skip-password 選項。

  • --password1[=pass_val]

    用於連線至伺服器的 MySQL 帳戶多因素驗證因素 1 的密碼。密碼值是選用的。若未指定,mysqldump 會提示輸入密碼。若有指定,--password1= 與後面的密碼之間不得有空格。如果未指定密碼選項,則預設為不傳送密碼。

    在命令列上指定密碼應視為不安全。為避免在命令列上提供密碼,請使用選項檔案。請參閱第 8.1.2.1 節,「最終使用者密碼安全指南」

    若要明確指定沒有密碼,且 mysqldump 不應提示輸入密碼,請使用 --skip-password1 選項。

    --password1--password 是同義詞,--skip-password1--skip-password 也是同義詞。

  • --password2[=pass_val]

    用於連線至伺服器的 MySQL 帳戶多因素驗證因素 2 的密碼。此選項的語意與 --password1 的語意類似;請參閱該選項的描述以取得詳細資訊。

  • --password3[=pass_val]

    用於連線至伺服器的 MySQL 帳戶多因素驗證因素 3 的密碼。此選項的語意與 --password1 的語意類似;請參閱該選項的描述以取得詳細資訊。

  • --pipe, -W

    命令列格式 --pipe
    類型 字串

    在 Windows 上,使用具名管道連線至伺服器。僅當伺服器啟動時已啟用 named_pipe 系統變數以支援具名管道連線時,此選項才適用。此外,建立連線的使用者必須是 named_pipe_full_access_group 系統變數指定的 Windows 群組成員。

  • --plugin-authentication-kerberos-client-mode=value

    命令列格式 --plugin-authentication-kerberos-client-mode
    類型 字串
    預設值 SSPI
    有效值 GSSAPI

    在 Windows 上,authentication_kerberos_client 驗證外掛程式支援此外掛程式選項。它提供用戶端使用者可在執行階段設定的兩個可能值:SSPIGSSAPI

    用戶端外掛程式選項的預設值使用安全支援提供者介面 (Security Support Provider Interface, SSPI),它可以從 Windows 的記憶體快取中取得憑證。或者,用戶端使用者可以選擇一種模式,該模式透過 Windows 上的 MIT Kerberos 程式庫支援通用安全服務應用程式介面 (Generic Security Service Application Program Interface, GSSAPI)。GSSAPI 能夠取得先前使用 kinit 命令產生的快取憑證。

    如需更多資訊,請參閱GSSAPI 模式中 Windows 用戶端的命令

  • --plugin-dir=dir_name

    命令列格式 --plugin-dir=dir_name
    類型 目錄名稱

    尋找外掛程式的目錄。如果 --default-auth 選項用於指定身分驗證外掛程式,但 mysqldump 找不到它,請指定此選項。請參閱第 8.2.17 節「可插拔驗證」

  • --port=port_num, -P port_num

    命令列格式 --port=port_num
    類型 數值
    預設值 3306

    對於 TCP/IP 連線,要使用的連接埠號碼。

  • --protocol={TCP|SOCKET|PIPE|MEMORY}

    命令列格式 --protocol=type
    類型 字串
    預設值 [請參閱文字]
    有效值

    TCP

    SOCKET

    PIPE

    MEMORY

    用於連線到伺服器的傳輸協定。當其他連線參數通常導致使用您不想要的協定時,此選項很有用。如需允許值的詳細資訊,請參閱第 6.2.7 節「連線傳輸協定」

  • --server-public-key-path=file_name

    命令列格式 --server-public-key-path=file_name
    類型 檔案名稱

    PEM 格式檔案的路徑名稱,其中包含伺服器需要的公開金鑰的用戶端副本,用於基於 RSA 金鑰對的密碼交換。此選項適用於使用 sha256_passwordcaching_sha2_password 身分驗證外掛程式進行驗證的用戶端。對於未使用其中一個外掛程式進行驗證的帳戶,此選項會被忽略。如果未使用基於 RSA 的密碼交換,也會忽略此選項,例如當用戶端使用安全連線連線到伺服器時。

    如果給定 --server-public-key-path=file_name 並指定有效的公開金鑰檔案,它會優先於 --get-server-public-key

    對於 sha256_password,此選項僅在 MySQL 使用 OpenSSL 建置時適用。

    有關 sha256_passwordcaching_sha2_password 外掛程式的資訊,請參閱第 8.4.1.2 節「SHA-256 可插拔驗證」第 8.4.1.1 節「快取 SHA-2 可插拔驗證」

  • --socket=path, -S path

    命令列格式 --socket={file_name|pipe_name}
    類型 字串

    對於連線到 localhost,要使用的 Unix socket 檔案,或在 Windows 上,要使用的具名管道名稱。

    在 Windows 上,只有在啟動伺服器時啟用 named_pipe 系統變數以支援具名管道連線時,此選項才適用。此外,進行連線的使用者必須是 named_pipe_full_access_group 系統變數指定的 Windows 群組成員。

  • --ssl*

    --ssl 開頭的選項指定是否使用加密連線到伺服器,並指示在哪裡可以找到 SSL 金鑰和憑證。請參閱加密連線的命令選項

  • --ssl-fips-mode={OFF|ON|STRICT}

    命令列格式 --ssl-fips-mode={OFF|ON|STRICT}
    已棄用
    類型 列舉
    預設值 關閉
    有效值

    關閉

    ON

    STRICT

    控制是否在用戶端啟用 FIPS 模式。--ssl-fips-mode 選項與其他 --ssl-xxx 選項不同,它不用於建立加密連線,而是影響要允許哪些加密運算。請參閱第 8.8 節「FIPS 支援」

    允許這些 --ssl-fips-mode

    • OFF:停用 FIPS 模式。

    • ON:啟用 FIPS 模式。

    • STRICT:啟用 嚴格 FIPS 模式。

    注意

    如果 OpenSSL FIPS 物件模組不可用,則 --ssl-fips-mode 的唯一允許值為 OFF。在這種情況下,將 --ssl-fips-mode 設定為 ONSTRICT 會導致用戶端在啟動時產生警告,並在非 FIPS 模式下執行。

    此選項已被棄用。預期會在未來版本的 MySQL 中移除。

  • --tls-ciphersuites=ciphersuite_list

    命令列格式 --tls-ciphersuites=ciphersuite_list
    類型 字串

    使用 TLSv1.3 的加密連線允許的密碼套件。此值是一個或多個以冒號分隔的密碼套件名稱的清單。可為此選項命名的密碼套件取決於用於編譯 MySQL 的 SSL 程式庫。如需詳細資訊,請參閱第 8.3.2 節「加密連線 TLS 協定和密碼」

  • --tls-sni-servername=server_name

    命令列格式 --tls-sni-servername=server_name
    類型 字串

    指定時,名稱會使用 mysql_options()MYSQL_OPT_TLS_SNI_SERVERNAME 選項傳遞至 libmysqlclient C API 程式庫。伺服器名稱不區分大小寫。若要顯示用戶端為目前工作階段指定的伺服器名稱 (如果有的話),請檢查 Tls_sni_server_name 狀態變數。

    伺服器名稱指示 (Server Name Indication, SNI) 是 TLS 協定的一種延伸 (必須使用 TLS 延伸編譯 OpenSSL,此選項才能運作)。SNI 的 MySQL 實作僅代表用戶端。

  • --tls-version=protocol_list

    命令列格式 --tls-version=protocol_list
    類型 字串
    預設值

    TLSv1,TLSv1.1,TLSv1.2,TLSv1.3 (OpenSSL 1.1.1 或更高版本)

    TLSv1,TLSv1.1,TLSv1.2 (其他情況)

    加密連線允許的 TLS 協定。此值是一個或多個以逗號分隔的協定名稱的清單。可為此選項命名的協定取決於用於編譯 MySQL 的 SSL 程式庫。如需詳細資訊,請參閱第 8.3.2 節「加密連線 TLS 協定和密碼」

  • --user=user_name, -u user_name

    命令列格式 --user=user_name
    類型 字串

    用於連線到伺服器的 MySQL 帳戶的使用者名稱。

    如果您正在使用 Rewriter 外掛程式,您應該授予此使用者 SKIP_QUERY_REWRITE 權限。

  • --zstd-compression-level=level

    命令列格式 --zstd-compression-level=#
    類型 整數

    對於使用 zstd 壓縮演算法連線到伺服器的連線,要使用的壓縮等級。允許的等級為 1 到 22,較大的值表示壓縮等級越高。預設的 zstd 壓縮等級為 3。壓縮等級設定對不使用 zstd 壓縮的連線沒有影響。

    如需詳細資訊,請參閱第 6.2.8 節,「連線壓縮控制」

選項檔案選項

這些選項用於控制要讀取哪個選項檔案。

DDL 選項

mysqldump 的使用情境包括設定整個新的 MySQL 執行個體(包括資料庫表格),以及使用現有的資料庫和表格替換現有執行個體內的資料。以下選項可讓您在還原傾印時,透過在傾印檔案中編碼各種 DDL 陳述式,來指定要拆除和設定哪些內容。

除錯選項

下列選項會列印除錯資訊、在傾印檔案中編碼除錯資訊,或讓傾印操作繼續進行,而不考慮潛在問題。

  • --allow-keywords

    命令列格式 --allow-keywords

    允許建立屬於關鍵字的欄名稱。其做法是為每個欄名稱加上表格名稱的前置詞。

  • --comments, -i

    命令列格式 --comments

    在傾印檔案中寫入其他資訊,例如程式版本、伺服器版本和主機。此選項預設為啟用。若要抑制此其他資訊,請使用 --skip-comments

  • --debug[=debug_options], -# [debug_options]

    命令列格式 --debug[=debug_options]
    類型 字串
    預設值 d:t:o,/tmp/mysqldump.trace

    寫入除錯日誌。典型的 debug_options 字串為 d:t:o,file_name。預設值為 d:t:o,/tmp/mysqldump.trace

    只有在使用 WITH_DEBUG 建置 MySQL 時,此選項才可用。Oracle 提供的 MySQL 發行二進位檔不是使用此選項建置的。

  • --debug-check

    命令列格式 --debug-check
    類型 布林值
    預設值 FALSE

    程式結束時列印一些除錯資訊。

    只有在使用 WITH_DEBUG 建置 MySQL 時,此選項才可用。Oracle 提供的 MySQL 發行二進位檔不是使用此選項建置的。

  • --debug-info

    命令列格式 --debug-info
    類型 布林值
    預設值 FALSE

    程式結束時列印除錯資訊和記憶體及 CPU 使用率統計資料。

    只有在使用 WITH_DEBUG 建置 MySQL 時,此選項才可用。Oracle 提供的 MySQL 發行二進位檔不是使用此選項建置的。

  • --dump-date

    命令列格式 --dump-date
    類型 布林值
    預設值 TRUE

    如果給定 --comments 選項,mysqldump 會在傾印結尾產生以下形式的註解

    -- Dump completed on DATE

    但是,日期會導致在不同時間取得的傾印檔案看起來不同,即使資料相同也是如此。--dump-date--skip-dump-date 控制是否將日期新增到註解中。預設值為 --dump-date(將日期包含在註解中)。--skip-dump-date 會抑制日期列印。

  • --force, -f

    命令列格式 --force

    忽略所有錯誤;即使表格傾印期間發生 SQL 錯誤,仍繼續執行。

    此選項的用途之一,是讓 mysqldump 即使遇到由於定義參考已捨棄的表格而失效的檢視表,仍能繼續執行。如果沒有 --forcemysqldump 會傳回錯誤訊息並結束。使用 --force 時,mysqldump 會列印錯誤訊息,但也會將包含檢視表定義的 SQL 註解寫入傾印輸出,並繼續執行。

    如果也指定了 --ignore-error 選項來忽略特定錯誤,則 --force 優先。

  • --log-error=file_name

    命令列格式 --log-error=file_name
    類型 檔案名稱

    將警告和錯誤訊息附加到指定的檔案中記錄。預設為不記錄。

  • --skip-comments

    命令列格式 --skip-comments

    請參閱 --comments 選項的說明。

  • --verbose, -v

    命令列格式 --verbose

    詳細模式。印出更多關於程式所做動作的資訊。

說明選項

以下選項顯示關於 mysqldump 命令本身的資訊。

  • --help, -?

    命令列格式 --help

    顯示說明訊息並結束。

  • --version, -V

    命令列格式 --version

    顯示版本資訊並結束。

國際化選項

以下選項變更 mysqldump 命令如何使用國家語言設定來表示字元資料。

複寫選項

mysqldump 命令常用於在複寫組態中的複本伺服器上建立空實例,或包含資料的實例。以下選項適用於在複寫來源伺服器和複本上傾印和還原資料。

  • --apply-replica-statements

    命令列格式 --apply-replica-statements
    類型 布林值
    預設值 FALSE

    對於使用 --dump-replica 選項產生的複本傾印,此選項會在包含二進位日誌座標的陳述式之前,新增 STOP REPLICA 陳述式,並在輸出結尾新增 START REPLICA 陳述式。

  • --apply-slave-statements

    命令列格式 --apply-slave-statements
    已棄用
    類型 布林值
    預設值 FALSE

    這是 --apply-replica-statements 的已棄用別名。

  • --delete-source-logs

    命令列格式 --delete-source-logs

    在複寫來源伺服器上,在執行傾印操作後,傳送 PURGE BINARY LOGS 陳述式到伺服器,以刪除二進位日誌。此選項需要 RELOAD 權限,以及足夠執行該陳述式的權限。此選項會自動啟用 --source-data

  • --delete-master-logs

    命令列格式 --delete-master-logs
    已棄用

    這是 --delete-source-logs 的已棄用別名。

  • --dump-replica[=value]

    命令列格式 --dump-replica[=value]
    類型 數值
    預設值 1
    有效值

    1

    2

    此選項類似於 --source-data,但用於傾印複本伺服器,以產生可用於將另一個伺服器設定為與已傾印伺服器具有相同來源的複本的傾印檔案。此選項會使傾印輸出包含 CHANGE REPLICATION SOURCE TO 陳述式,指出已傾印複本來源的二進位日誌座標(檔案名稱和位置)。 CHANGE REPLICATION SOURCE TO 陳述式會從 SHOW REPLICA STATUS 輸出讀取 Relay_Master_Log_FileExec_Master_Log_Pos 的值,並將它們分別用於 SOURCE_LOG_FILESOURCE_LOG_POS。這些是複本開始複寫的複寫來源伺服器座標。

    注意

    已執行的中繼日誌交易順序不一致可能會導致使用錯誤的位置。如需更多資訊,請參閱 第 19.5.1.35 節,「複寫和交易不一致」

    --dump-replica 會導致使用來源的座標,而不是已傾印伺服器的座標,就像 --source-data 選項所做的那樣。此外,指定此選項會覆寫 --source-data 選項。

    警告

    如果將要套用傾印的伺服器使用 gtid_mode=ONSOURCE_AUTO_POSITION=1,則不應使用 --dump-replica

    選項值的處理方式與 --source-data 相同。設定無值或 1 會將 CHANGE REPLICATION SOURCE TO 陳述式寫入傾印。設定 2 會將陳述式寫入,但包含在 SQL 註解中。它在啟用或停用其他選項以及如何處理鎖定方面,具有與 --source-data 相同的效果。

    --dump-replica 會導致 mysqldump 在傾印之前停止複寫 SQL 執行緒,並在之後重新啟動。

    --dump-replica 會傳送 SHOW REPLICA STATUS 陳述式到伺服器以取得資訊,因此它們需要足夠執行該陳述式的權限。

    --apply-replica-statements--include-source-host-port 選項可與 --dump-replica 一起使用。

  • --dump-slave[=value]

    命令列格式 --dump-slave[=value]
    已棄用
    類型 數值
    預設值 1
    有效值

    1

    2

    這是 --dump-replica 的已棄用別名。

  • --include-source-host-port

    命令列格式 --include-source-host-port
    類型 布林值
    預設值 FALSE

    將複本來源的主機名稱和 TCP/IP 連接埠號碼的 SOURCE_HOSTSOURCE_PORT 選項新增到使用 --dump-replica 選項產生的複本傾印中的 CHANGE REPLICATION SOURCE TO 陳述式。

  • --include-master-host-port

    命令列格式 --include-master-host-port
    已棄用
    類型 布林值
    預設值 FALSE

    這是 --include-source-host-port 的已棄用別名。

  • --master-data[=value]

    命令列格式 --master-data[=value]
    已棄用
    類型 數值
    預設值 1
    有效值

    1

    2

    這是 --source-data 的已棄用別名。

  • --output-as-version=value

    命令列格式 --output-as-version=value
    類型 列舉
    預設值 SERVER
    有效值

    BEFORE_8_0_23

    BEFORE_8_2_0

    決定用於複本和事件相關陳述式的術語層級,使其能夠建立與不接受較新術語的舊版 MySQL 相容的傾印。此選項可以採用以下任何一個值,並具有如下所述的效果

    • SERVER:讀取伺服器版本,並使用與該版本相容的最新陳述式版本。這是預設值。

    • BEFORE_8_0_23:使用已棄用術語(例如slavemaster)的複寫 SQL 陳述式,將寫入輸出,而不是使用replicasource的陳述式,如同在 8.0.23 之前的 MySQL 版本中。

      此選項也會複製 BEFORE_8_2_0SHOW CREATE EVENT 輸出的效果。

    • BEFORE_8_2_0:此選項會使 SHOW CREATE EVENT 反映事件在 8.2.0 之前的 MySQL 伺服器中建立的方式,顯示 DISABLE ON SLAVE 而不是 DISABLE ON REPLICA

    此選項會影響來自 --events--dump-replica--source-data--apply-replica-statements--include-source-host-port 的輸出。

  • --source-data[=value]

    命令列格式 --source-data[=value]
    類型 數值
    預設值 1
    有效值

    1

    2

    用於傾印複寫來源伺服器,以產生可用於設定另一個伺服器作為來源複本的傾印檔案。這些選項會使傾印輸出包含 CHANGE REPLICATION SOURCE TO 陳述式,指出傾印伺服器的二進位日誌座標(檔案名稱和位置)。這些是複本在將傾印檔案載入到複本後應開始複寫的複寫來源伺服器座標。

    如果選項值為 2,CHANGE REPLICATION SOURCE TO 陳述式會寫成 SQL 註解,因此僅供參考;重新載入傾印檔案時不會生效。如果選項值為 1,則陳述式不會寫成註解,並且在重新載入傾印檔案時生效。如果未指定選項值,則預設值為 1。

    --source-data 會將 SHOW BINARY LOG STATUS 陳述式傳送到伺服器以獲取資訊,因此它們需要足夠的權限來執行該陳述式。此選項還需要 RELOAD 權限,並且必須啟用二進位日誌。

    --source-data 會自動關閉 --lock-tables。它們也會開啟 --lock-all-tables,除非也指定了 --single-transaction,在這種情況下,僅在傾印開始時短時間內取得全域讀取鎖定(請參閱 --single-transaction 的描述)。在所有情況下,對日誌的任何操作都會在傾印的確切時刻發生。

    也可以使用 --dump-replica 選項,從現有來源的複本傾印設定複本,這會覆寫 --source-data,導致其被忽略。

  • --set-gtid-purged=value

    命令列格式 --set-gtid-purged=value
    類型 列舉
    預設值 AUTO
    有效值

    關閉

    ON

    AUTO

    此選項適用於使用基於 GTID 的複寫的伺服器 (gtid_mode=ON)。它控制在傾印輸出中包含 SET @@GLOBAL.gtid_purged 陳述式,該陳述式會更新重新載入傾印檔案的伺服器上的 gtid_purged 值,以新增來源伺服器 gtid_executed 系統變數中的 GTID 集。gtid_purged 保存伺服器上已套用的所有交易的 GTID,但這些 GTID 不存在於伺服器上的任何二進位日誌檔案中。mysqldump 因此會新增在來源伺服器上執行的交易的 GTID,以便目標伺服器將這些交易記錄為已套用,即使目標伺服器的二進位日誌中沒有這些交易。--set-gtid-purged 還控制包含 SET @@SESSION.sql_log_bin=0 陳述式,這會在重新載入傾印檔案時停用二進位日誌記錄。此陳述式可防止產生新的 GTID 並將其指派給傾印檔案中的交易,以便使用交易的原始 GTID。

    如果您未設定 --set-gtid-purged 選項,則預設情況下,如果要在備份的伺服器上啟用 GTID,並且 gtid_executed 系統變數的全域值中的 GTID 集不是空的,則會在傾印輸出中包含 SET @@GLOBAL.gtid_purged 陳述式。如果伺服器上已啟用 GTID,則也會包含 SET @@SESSION.sql_log_bin=0 陳述式。

    您可以將 gtid_purged 的值替換為指定的 GTID 集,或在陳述式中新增加號 (+),將指定的 GTID 集附加到 gtid_purged 已保存的 GTID 集。mysqldump 記錄的 SET @@GLOBAL.gtid_purged 陳述式包含版本特定的註解中的加號 (+),以便 MySQL 將傾印檔案中的 GTID 集新增到現有的 gtid_purged 值。

    請務必注意,mysqldumpSET @@GLOBAL.gtid_purged 陳述式所包含的值,包含伺服器上 gtid_executed 集中的所有交易的 GTID,甚至是那些變更了資料庫的受抑制部分,或伺服器上未包含在部分傾印中的其他資料庫。這可能表示在重新播放傾印檔案的伺服器上更新 gtid_purged 值後,出現的 GTID 與目標伺服器上的任何資料無關。如果不在目標伺服器上重新播放任何其他傾印檔案,則多餘的 GTID 不會對伺服器未來的運作造成任何問題,但它們會使比較或協調複寫拓撲中不同伺服器上的 GTID 集變得更加困難。如果重新播放另一個包含相同 GTID 的目標伺服器上的傾印檔案 (例如,來自相同來源伺服器的另一個部分傾印),則第二個傾印檔案中的任何 SET @@GLOBAL.gtid_purged 陳述式都會失敗。在這種情況下,請在重新播放傾印檔案之前手動移除該陳述式,或輸出不包含該陳述式的傾印檔案。

    如果 SET @@GLOBAL.gtid_purged 陳述式在目標伺服器上不會產生預期的結果,您可以從輸出中排除該陳述式,或包含該陳述式但將其註解掉,以便它不會自動執行。您也可以包含該陳述式,但在傾印檔案中手動編輯它以達到預期的結果。

    --set-gtid-purged 選項的可能值如下

    AUTO

    預設值。如果要在備份的伺服器上啟用 GTID,且 gtid_executed 不為空,則會將 SET @@GLOBAL.gtid_purged 新增至輸出,其中包含來自 gtid_executed 的 GTID 集。如果已啟用 GTID,則會將 SET @@SESSION.sql_log_bin=0 新增至輸出。如果未在伺服器上啟用 GTID,則不會將這些陳述式新增至輸出。

    關閉

    不會將 SET @@GLOBAL.gtid_purged 新增至輸出,也不會將 SET @@SESSION.sql_log_bin=0 新增至輸出。對於未使用 GTID 的伺服器,請使用此選項或 AUTO。僅當您確定目標伺服器上的 gtid_purged 中已存在所需的 GTID 集且不應變更,或者您打算手動識別並新增任何遺失的 GTID 時,才對使用 GTID 的伺服器使用此選項。

    ON

    如果要在備份的伺服器上啟用 GTID,則會將 SET @@GLOBAL.gtid_purged 新增至輸出 (除非 gtid_executed 為空),並且會將 SET @@SESSION.sql_log_bin=0 新增至輸出。如果您設定此選項,但伺服器上未啟用 GTID,則會發生錯誤。對於使用 GTID 的伺服器,請使用此選項或 AUTO,除非您確定目標伺服器上不需要 gtid_executed 中的 GTID。

    COMMENTED

    如果要在備份的伺服器上啟用 GTID,則會將 SET @@GLOBAL.gtid_purged 新增至輸出 (除非 gtid_executed 為空),但會將其註解掉。這表示 gtid_executed 的值可在輸出中使用,但在重新載入傾印檔案時不會自動採取任何動作。SET @@SESSION.sql_log_bin=0 會新增至輸出,並且不會註解掉。透過 COMMENTED,您可以手動或透過自動化控制 gtid_executed 集的使用。例如,如果您要將資料移轉到另一個已具有不同活動資料庫的伺服器,您可能會偏好執行此作業。

格式選項

以下選項指定如何在傾印檔案中表示整個傾印檔案或特定類型的資料。它們還控制是否將某些選用資訊寫入傾印檔案。

  • --compact

    命令列格式 --compact

    產生更精簡的輸出。此選項會啟用 --skip-add-drop-table--skip-add-locks--skip-comments--skip-disable-keys--skip-set-charset 選項。

  • --compatible=name

    命令列格式 --compatible=name[,name,...]
    類型 字串
    預設值 ''
    有效值

    ansi

    mysql323

    mysql40

    postgresql

    oracle

    mssql

    db2

    maxdb

    no_key_options

    no_table_options

    no_key_options

    產生與其他資料庫系統或舊版 MySQL 伺服器更相容的輸出。此選項唯一允許的值是 ansi,其與設定伺服器 SQL 模式的對應選項具有相同的含義。請參閱 第 7.1.11 節, 「伺服器 SQL 模式」

  • --complete-insert-c

    命令列格式 --complete-insert

    使用包含欄名稱的完整 INSERT 陳述式。

  • --create-options

    命令列格式 --create-options

    CREATE TABLE 陳述式中包含所有 MySQL 特有的資料表選項。

  • --fields-terminated-by=...--fields-enclosed-by=...--fields-optionally-enclosed-by=...--fields-escaped-by=...

    命令列格式 --fields-terminated-by=string
    類型 字串
    命令列格式 --fields-enclosed-by=string
    類型 字串
    命令列格式 --fields-optionally-enclosed-by=string
    類型 字串
    命令列格式 --fields-escaped-by
    類型 字串

    這些選項與 --tab 選項搭配使用,並且與 LOAD DATA 的對應 FIELDS 子句具有相同的含義。請參閱 第 15.2.9 節, 「LOAD DATA 陳述式」

  • --hex-blob

    命令列格式 --hex-blob

    使用十六進位表示法傾印二進位欄 (例如,'abc' 變成 0x616263)。受影響的資料類型為 BINARYVARBINARYBLOB 類型、BIT、所有空間資料類型,以及與 binary 字元集搭配使用時的其他非二進位資料類型。

    當使用 --tab 時,--hex-blob 選項會被忽略。

  • --lines-terminated-by=...

    命令列格式 --lines-terminated-by=string
    類型 字串

    此選項與 --tab 選項搭配使用,並且與 LOAD DATA 的對應 LINES 子句具有相同的含義。請參閱 第 15.2.9 節, 「LOAD DATA 陳述式」

  • --quote-names-Q

    命令列格式 --quote-names
    由以下選項停用 skip-quote-names

    ` 字元內加上識別碼 (例如,資料庫、資料表和欄名稱) 的引號。如果啟用了 ANSI_QUOTES SQL 模式,則識別碼會以 " 字元加上引號。預設會啟用此選項。可以使用 --skip-quote-names 停用此選項,但此選項應在任何可能會啟用 --quote-names 的選項之後指定,例如 --compatible

  • --result-file=file_name-r file_name

    命令列格式 --result-file=file_name
    類型 檔案名稱

    將輸出導向至指定的檔案。即使在產生傾印時發生錯誤,也會建立結果檔案並覆寫其先前的內容。

    應該在 Windows 上使用此選項,以防止換行符號 \n 字元轉換為 \r\n 回車換行序列。

  • --show-create-skip-secondary-engine=value

    命令列格式 --show-create-skip-secondary-engine

    CREATE TABLE 陳述式中排除 SECONDARY ENGINE 子句。它會藉由在傾印作業期間啟用 show_create_table_skip_secondary_engine 系統變數來執行此動作。或者,您可以在使用 mysqldump 之前啟用 show_create_table_skip_secondary_engine 系統變數。

  • --tab=dir_name-T dir_name

    命令列格式 --tab=dir_name
    類型 目錄名稱

    產生以 Tab 分隔的文字格式資料檔案。對於每個傾印的資料表,mysqldump 會建立一個 tbl_name.sql 檔案,其中包含建立資料表的 CREATE TABLE 陳述式,並且伺服器會寫入一個 tbl_name.txt 檔案,其中包含其資料。選項值是要寫入檔案的目錄。

    注意

    只有當 mysqldump 在與 mysqld 伺服器相同的電腦上執行時,才應使用此選項。由於伺服器會在您指定的目錄中建立 *.txt 檔案,因此該目錄必須可由伺服器寫入,並且您使用的 MySQL 帳戶必須具有 FILE 權限。由於 mysqldump 會在相同目錄中建立 *.sql,因此您的系統登入帳戶必須可寫入該目錄。

    預設情況下,.txt 資料檔案的格式設定為在欄值之間使用 Tab 字元,並且在每行結尾使用換行符號。可以使用 --fields-xxx--lines-terminated-by 選項明確指定格式。

    欄值會轉換為 --default-character-set 選項所指定的字元集。

  • --tz-utc

    命令列格式 --tz-utc
    由以下選項停用 skip-tz-utc

    此選項允許在不同時區的伺服器之間傾印和重新載入 TIMESTAMP 欄。mysqldump 會將其連線時區設定為 UTC,並將 SET TIME_ZONE='+00:00' 新增至傾印檔案。如果沒有此選項,則會在來源和目的地伺服器的本機時區中傾印和重新載入 TIMESTAMP 欄,如果伺服器位於不同的時區,可能會導致值變更。--tz-utc 也能夠防止因日光節約時間而造成的變更。--tz-utc 預設為啟用。若要停用它,請使用 --skip-tz-utc

  • --xml-X

    命令列格式 --xml

    將傾印輸出寫入為格式正確的 XML。

    NULL'NULL' 和空值:對於名為 column_name 的欄,此選項產生的輸出會區分 NULL 值、空字串和字串值 'NULL',如下所示。

    XML 表示法
    NULL ( 未知的值 )

    <field name="column_name" xsi:nil="true" />

    '' ( 空字串 )

    <field name="column_name"></field>

    'NULL' ( 字串值 )

    <field name="column_name">NULL</field>

    使用 --xml 選項執行時,來自 mysql 用戶端的輸出也遵循上述規則。(請參閱 第 6.5.1.1 節, 「mysql 用戶端選項」。)

    來自 mysqldump 的 XML 輸出包含 XML 名稱空間,如下所示

    $> mysqldump --xml -u root world City
    <?xml version="1.0"?>
    <mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <database name="world">
    <table_structure name="City">
    <field Field="ID" Type="int(11)" Null="NO" Key="PRI" Extra="auto_increment" />
    <field Field="Name" Type="char(35)" Null="NO" Key="" Default="" Extra="" />
    <field Field="CountryCode" Type="char(3)" Null="NO" Key="" Default="" Extra="" />
    <field Field="District" Type="char(20)" Null="NO" Key="" Default="" Extra="" />
    <field Field="Population" Type="int(11)" Null="NO" Key="" Default="0" Extra="" />
    <key Table="City" Non_unique="0" Key_name="PRIMARY" Seq_in_index="1" Column_name="ID"
    Collation="A" Cardinality="4079" Null="" Index_type="BTREE" Comment="" />
    <options Name="City" Engine="MyISAM" Version="10" Row_format="Fixed" Rows="4079"
    Avg_row_length="67" Data_length="273293" Max_data_length="18858823439613951"
    Index_length="43008" Data_free="0" Auto_increment="4080"
    Create_time="2007-03-31 01:47:01" Update_time="2007-03-31 01:47:02"
    Collation="latin1_swedish_ci" Create_options="" Comment="" />
    </table_structure>
    <table_data name="City">
    <row>
    <field name="ID">1</field>
    <field name="Name">Kabul</field>
    <field name="CountryCode">AFG</field>
    <field name="District">Kabol</field>
    <field name="Population">1780000</field>
    </row>
    
    ...
    
    <row>
    <field name="ID">4079</field>
    <field name="Name">Rafah</field>
    <field name="CountryCode">PSE</field>
    <field name="District">Rafah</field>
    <field name="Population">92020</field>
    </row>
    </table_data>
    </database>
    </mysqldump>

篩選選項

下列選項會控制將哪些類型的結構描述物件寫入傾印檔案:依類別 (例如觸發程序或事件);依名稱 (例如,選擇要傾印哪些資料庫和資料表);甚至使用 WHERE 子句篩選資料表資料中的資料列。

  • --all-databases-A

    命令列格式 --all-databases

    傾印所有資料庫中的所有資料表。這與使用 --databases 選項並在命令列上命名所有資料庫相同。

    注意

    如需關於此選項與 --all-databases 不相容的資訊,請參閱 --add-drop-database 的描述。

    在 MySQL 9.0 之前,使用 mysqldump--routines--events 選項在使用 --all-databases 選項時並不需要包含預存常式和事件:傾印會包含 mysql 系統資料庫,因此也會包含 mysql.procmysql.event 資料表,其中包含預存常式和事件定義。從 MySQL 9.0 開始,不使用 mysql.eventmysql.proc 資料表。對應物件的定義儲存在資料字典資料表中,但不會傾印這些資料表。若要在使用 --all-databases 建立的傾印中包含預存常式和事件,請明確使用 --routines--events 選項。

  • --databases-B

    命令列格式 --databases

    傾印數個資料庫。一般而言,mysqldump 會將命令列上的第一個名稱引數視為資料庫名稱,後續的名稱則視為表格名稱。使用此選項,它會將所有名稱引數視為資料庫名稱。在每個新資料庫之前,輸出中會包含 CREATE DATABASEUSE 陳述式。

    此選項可用於傾印 performance_schema 資料庫,即使使用 --all-databases 選項通常也不會傾印該資料庫。(同時使用 --skip-lock-tables 選項。)

    注意

    關於此選項與 --databases 的不相容性資訊,請參閱 --add-drop-database 的說明。

  • --events, -E

    命令列格式 --events

    在輸出中包含已傾印資料庫的事件排程器事件。此選項需要這些資料庫的 EVENT 權限。

    使用 --events 產生的輸出包含用於建立事件的 CREATE EVENT 陳述式。

  • --ignore-error=error[,error]...

    命令列格式 --ignore-error=error[,error]...
    類型 字串

    忽略指定的錯誤。此選項值為逗號分隔的錯誤編號列表,指定在執行 mysqldump 期間要忽略的錯誤。如果同時給予 --force 選項以忽略所有錯誤,則 --force 具有優先權。

  • --ignore-table=db_name.tbl_name

    命令列格式 --ignore-table=db_name.tbl_name
    類型 字串

    不要傾印給定的表格,必須同時指定資料庫和表格名稱。若要忽略多個表格,請多次使用此選項。此選項也可用於忽略視圖。

  • --ignore-views=boolean

    命令列格式 --ignore-views
    類型 布林值
    預設值 FALSE

    跳過傾印檔案中的表格視圖。

  • --init-command=str

    命令列格式 --init-command=str
    類型 字串

    連線到 MySQL 伺服器後要執行的單一 SQL 陳述式。此定義會重設它或 init-command-add 所定義的現有陳述式。

  • --init-command-add=str

    命令列格式 --init-command-add=str
    類型 字串

    新增要在連線或重新連線到 MySQL 伺服器後執行的額外 SQL 陳述式。它可以在沒有 --init-command 的情況下使用,但如果在它之前使用則無效,因為 init-command 會重設要呼叫的命令列表。

  • --no-data, -d

    命令列格式 --no-data

    不寫入任何表格列資訊(也就是說,不傾印表格內容)。如果您只想傾印表格的 CREATE TABLE 陳述式(例如,透過載入傾印檔案來建立表格的空白副本),這會很有用。

  • --routines, -R

    命令列格式 --routines

    在輸出中包含已傾印資料庫的預存常式(程序和函式)。此選項需要全域 SELECT 權限。

    使用 --routines 產生的輸出包含用於建立常式的 CREATE PROCEDURECREATE FUNCTION 陳述式。

  • --skip-generated-invisible-primary-key

    命令列格式 --skip-generated-invisible-primary-key
    類型 布林值
    預設值 FALSE

    此選項會導致從輸出中排除產生的隱形主鍵。有關更多資訊,請參閱第 15.1.20.11 節,「產生的隱形主鍵」

  • --tables

    命令列格式 --tables

    覆寫 --databases-B 選項。mysqldump 將此選項之後的所有名稱引數視為表格名稱。

  • --triggers

    命令列格式 --triggers
    由以下選項停用 skip-triggers

    在輸出中包含每個已傾印表格的觸發器。預設會啟用此選項;使用 --skip-triggers 停用它。

    若要能夠傾印表格的觸發器,您必須擁有該表格的 TRIGGER 權限。

    允許使用多個觸發器。mysqldump 會依啟用順序傾印觸發器,以便在重新載入傾印檔案時,會以相同的啟用順序建立觸發器。但是,如果 mysqldump 傾印檔案包含具有相同觸發事件和動作時間的表格的多個觸發器,則嘗試將傾印檔案載入不支援多個觸發器的較舊伺服器時,會發生錯誤。(如需因應措施,請參閱降級注意事項;您可以轉換觸發器以與較舊的伺服器相容。)

  • --where='where_condition', -w 'where_condition'

    命令列格式 --where='where_condition'

    僅傾印由給定的 WHERE 條件選取的列。如果條件包含空格或其他對您的命令直譯器而言特殊的字元,則條件周圍的引號是必要的。

    範例

    --where="user='jimf'"
    -w"userid>1"
    -w"userid<1"

效能選項

下列選項與效能最相關,特別是還原操作的效能。對於大型資料集,還原操作(處理傾印檔案中的 INSERT 陳述式)是最耗時的部分。當需要快速還原資料時,請提前規劃並測試此階段的效能。對於以小時測量的還原時間,您可能偏好替代的備份和還原解決方案,例如僅適用於 InnoDB 和混合使用資料庫的 MySQL Enterprise Backup

效能也受到交易選項的影響,主要用於傾印操作。

  • --column-statistics

    命令列格式 --column-statistics
    類型 布林值
    預設值 關閉

    在輸出中新增 ANALYZE TABLE 陳述式,以便在重新載入傾印檔案時為傾印的表格產生長條圖統計資料。預設會停用此選項,因為大型表格的長條圖產生可能需要很長時間。

  • --disable-keys, -K

    命令列格式 --disable-keys

    對於每個表格,請使用 /*!40000 ALTER TABLE tbl_name DISABLE KEYS */;/*!40000 ALTER TABLE tbl_name ENABLE KEYS */; 陳述式來包圍 INSERT 陳述式。這會使載入傾印檔案的速度更快,因為索引會在插入所有列後才建立。此選項僅對 MyISAM 表格的非唯一索引有效。

  • --extended-insert, -e

    命令列格式 --extended-insert
    由以下選項停用 skip-extended-insert

    使用包含數個 VALUES 清單的多列語法來寫入 INSERT 陳述式。這會產生較小的傾印檔案,並在重新載入檔案時加速插入。

  • --insert-ignore

    命令列格式 --insert-ignore

    寫入 INSERT IGNORE 陳述式,而不是 INSERT 陳述式。

  • --max-allowed-packet=value

    命令列格式 --max-allowed-packet=value
    類型 數值
    預設值 25165824

    用戶端/伺服器通訊的緩衝區最大大小。預設值為 24MB,最大值為 1GB。

    注意

    此選項的值是 mysqldump 特有的,不應與 MySQL 伺服器的 max_allowed_packet 系統變數混淆;即使 mysqldump 選項的設定較大,來自 mysqldump 的單一封包也不會超過伺服器值。

  • --mysqld-long-query-time=value

    命令列格式 --mysqld-long-query-time=value
    類型 數值
    預設值 伺服器全域設定

    設定 long_query_time 系統變數的工作階段值。如果您想增加 mysqldump 的查詢被記錄到慢速查詢記錄檔之前的允許時間,請使用此選項。mysqldump 會執行完整表格掃描,這表示其查詢通常會超過對常規查詢有用的全域 long_query_time 設定。預設的全域設定為 10 秒。

    您可以使用 --mysqld-long-query-time 來指定一個從 0 (表示 mysqldump 的每個查詢都會記錄到慢查詢日誌) 到 31536000 (相當於 365 天,以秒為單位) 的會話值。對於 mysqldump 的選項,您只能指定整數秒。當您不指定此選項時,伺服器的全域設定會應用於 mysqldump 的查詢。

  • --net-buffer-length=value

    命令列格式 --net-buffer-length=value
    類型 數值
    預設值 16384

    用戶端/伺服器通訊的緩衝區初始大小。當建立多列 INSERT 陳述式時 (例如使用 --extended-insert--opt 選項),mysqldump 會建立最多 --net-buffer-length 位元組長的資料列。如果您增加此變數,請確保 MySQL 伺服器 net_buffer_length 系統變數的值至少這麼大。

  • --network-timeout, -M

    命令列格式 --network-timeout[={0|1}]
    類型 布林值
    預設值 TRUE

    透過將 --max-allowed-packet 設定為最大值,並將網路讀取和寫入逾時設定為較大的值,啟用大型資料表的傾印。預設情況下會啟用此選項。若要停用它,請使用 --skip-network-timeout

  • --opt

    命令列格式 --opt
    由以下選項停用 skip-opt

    此選項預設為啟用,是 --add-drop-table--add-locks--create-options--disable-keys--extended-insert--lock-tables--quick--set-charset 的組合簡寫。它提供快速的傾印操作,並產生一個可以快速重新載入到 MySQL 伺服器中的傾印檔案。

    由於 --opt 選項預設為啟用,您只需指定其相反選項 --skip-opt 來關閉數個預設設定。請參閱 mysqldump 選項群組 的討論,以取得關於選擇性啟用或停用 --opt 所影響選項子集的資訊。

  • --quick, -q

    命令列格式 --quick
    由以下選項停用 skip-quick

    此選項對於傾印大型資料表很有用。它會強制 mysqldump 從伺服器一次擷取一個資料表的資料列,而不是擷取整個資料列集並在寫出之前將其緩衝在記憶體中。

  • --skip-opt

    命令列格式 --skip-opt

    請參閱 --opt 選項的說明。

交易選項

以下選項會權衡傾印操作的效能,與匯出資料的可靠性和一致性。

  • --add-locks

    命令列格式 --add-locks

    在每個資料表傾印前後加上 LOCK TABLESUNLOCK TABLES 陳述式。這會在重新載入傾印檔案時加快插入速度。請參閱第 10.2.5.1 節, 「最佳化 INSERT 陳述式」

  • --flush-logs, -F

    命令列格式 --flush-logs

    在開始傾印之前清除 MySQL 伺服器日誌檔案。此選項需要 RELOAD 權限。如果您將此選項與 --all-databases 選項結合使用,則日誌會為每個傾印的資料庫清除。例外情況是使用 --lock-all-tables--source-data--single-transaction。在這些情況下,日誌只會清除一次,與 FLUSH TABLES WITH READ LOCK 鎖定所有資料表的時刻相對應。如果您希望傾印和日誌清除在完全相同的時間發生,您應該將 --flush-logs--lock-all-tables--source-data--single-transaction 一起使用。

  • --flush-privileges

    命令列格式 --flush-privileges

    在傾印 mysql 資料庫之後,將 FLUSH PRIVILEGES 陳述式新增至傾印輸出。只要傾印包含 mysql 資料庫和任何其他依賴 mysql 資料庫中資料以進行正確還原的資料庫,就應該使用此選項。

    由於傾印檔案包含 FLUSH PRIVILEGES 陳述式,因此重新載入檔案需要足以執行該陳述式的權限。

  • --lock-all-tables, -x

    命令列格式 --lock-all-tables

    鎖定所有資料庫中的所有資料表。這是透過在整個傾印期間取得全域讀取鎖定來實現的。此選項會自動關閉 --single-transaction--lock-tables

  • --lock-tables, -l

    命令列格式 --lock-tables

    對於每個傾印的資料庫,在傾印之前鎖定所有要傾印的資料表。資料表以 READ LOCAL 鎖定,以便在 MyISAM 資料表的情況下允許並行插入。對於諸如 InnoDB 之類的交易式資料表,--single-transaction 是比 --lock-tables 好得多的選項,因為它根本不需要鎖定資料表。

    由於 --lock-tables 會為每個資料庫單獨鎖定資料表,因此此選項不保證傾印檔案中的資料表在資料庫之間邏輯一致。不同資料庫中的資料表可能會以完全不同的狀態傾印。

    某些選項 (例如 --opt) 會自動啟用 --lock-tables。如果您想覆寫此行為,請在選項列表的末尾使用 --skip-lock-tables

  • --no-autocommit

    命令列格式 --no-autocommit

    將每個傾印資料表的 INSERT 陳述式括在 SET autocommit = 0COMMIT 陳述式中。

  • --order-by-primary

    命令列格式 --order-by-primary

    依每個資料表的主索引鍵或第一個唯一索引 (如果存在) 排序傾印每個資料表的資料列。當傾印 MyISAM 資料表以載入到 InnoDB 資料表時,這會很有用,但會使傾印操作花費更多時間。

  • --shared-memory-base-name=name

    命令列格式 --shared-memory-base-name=name
    平台特定 Windows

    在 Windows 上,使用共用記憶體連線到本機伺服器時要使用的共用記憶體名稱。預設值為 MYSQL。共用記憶體名稱區分大小寫。

    僅當伺服器啟動時啟用 shared_memory 系統變數以支援共用記憶體連線時,此選項才適用。

  • --single-transaction

    命令列格式 --single-transaction

    此選項會將交易隔離模式設定為 REPEATABLE READ,並在傾印資料之前向伺服器傳送 START TRANSACTION SQL 陳述式。它僅對諸如 InnoDB 之類的交易式資料表有用,因為它會在發出 START TRANSACTION 時傾印資料庫的一致狀態,而不會封鎖任何應用程式。

    如果 gtid_mode=ONgtid_purged=ON|AUTO 皆成立,則在使用 --single-transaction 時,需要 RELOADFLUSH_TABLES 權限。

    當使用此選項時,您應該記住只有 InnoDB 表格會以一致的狀態傾印。例如,任何使用此選項傾印的 MyISAMMEMORY 表格,其狀態仍有可能改變。

    --single-transaction 傾印正在進行時,為了確保有效的傾印檔案(正確的表格內容和二進制日誌座標),不應有其他連線使用以下語句:ALTER TABLECREATE TABLEDROP TABLERENAME TABLETRUNCATE TABLE。一致性讀取不會與這些語句隔離,因此在要傾印的表格上使用這些語句可能會導致 mysqldump 執行的 SELECT 查詢,在擷取表格內容時取得不正確的內容或失敗。

    --single-transaction 選項和 --lock-tables 選項是互斥的,因為 LOCK TABLES 會導致任何待處理的事務被隱式提交。

    要傾印大型表格,請將 --single-transaction 選項與 --quick 選項結合使用。

選項群組

  • --opt 選項會啟用多個設定,這些設定會協同工作以執行快速的傾印操作。所有這些設定預設都是啟用的,因為 --opt 預設為啟用。因此,您很少甚至永遠不會指定 --opt。相反地,您可以透過指定 --skip-opt 來關閉這些設定,然後可選擇性地透過在命令列上指定相關選項來重新啟用某些設定。

  • --compact 選項會關閉多個設定,這些設定控制輸出中是否出現可選的語句和註解。同樣地,您可以在此選項後接其他選項來重新啟用某些設定,或使用 --skip-compact 形式來開啟所有設定。

當您選擇性地啟用或停用群組選項的效果時,順序很重要,因為選項會從第一個到最後一個依序處理。例如,--disable-keys --lock-tables --skip-opt 不會產生預期的效果;它與單獨使用 --skip-opt 相同。

範例

要備份整個資料庫

mysqldump db_name > backup-file.sql

要將傾印檔案載回伺服器

mysql db_name < backup-file.sql

另一種重新載入傾印檔案的方式

mysql -e "source /path-to-backup/backup-file.sql" db_name

mysqldump 也非常適用於透過將資料從一個 MySQL 伺服器複製到另一個伺服器來填充資料庫

mysqldump --opt db_name | mysql --host=remote_host -C db_name

您可以使用一個命令傾印多個資料庫

mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql

要傾印所有資料庫,請使用 --all-databases 選項

mysqldump --all-databases > all_databases.sql

對於 InnoDB 表格,mysqldump 提供了一種進行線上備份的方法

mysqldump --all-databases --source-data --single-transaction > all_databases.sql

此備份會在傾印開始時取得所有表格的全域讀取鎖定 (使用 FLUSH TABLES WITH READ LOCK)。一旦取得此鎖定,就會讀取二進制日誌座標並釋放鎖定。如果在發出 FLUSH 語句時正在執行長時間的更新語句,則 MySQL 伺服器可能會停頓,直到這些語句完成。之後,傾印會變成無鎖定狀態,並且不會干擾表格上的讀取和寫入。如果 MySQL 伺服器接收到的更新語句很短(就執行時間而言),則即使有許多更新,初始鎖定時間也不應被察覺。

對於時間點復原(也稱為 向前復原,當您需要還原舊備份並重播自該備份以來發生的變更時),通常有用的做法是旋轉二進制日誌(請參閱 第 7.4.4 節「二進制日誌」),或至少知道傾印對應的二進制日誌座標

mysqldump --all-databases --source-data=2 > all_databases.sql

mysqldump --all-databases --flush-logs --source-data=2 > all_databases.sql

--source-data 選項可以與 --single-transaction 選項同時使用,如果表格是使用 InnoDB 儲存引擎儲存,這會提供一種方便的方式來進行適合在時間點復原之前使用的線上備份。

有關進行備份的更多資訊,請參閱 第 9.2 節「資料庫備份方法」,以及 第 9.3 節「備份與復原策略範例」

限制

mysqldump 預設不會傾印 performance_schemasys 綱要。要傾印任何這些綱要,請在命令列上明確命名它們。您也可以使用 --databases 選項來命名它們。對於 performance_schema,也請使用 --skip-lock-tables 選項。

mysqldump 不會傾印 INFORMATION_SCHEMA 綱要。

mysqldump 不會傾印 InnoDB CREATE TABLESPACE 語句。

mysqldump 不會傾印 NDB Cluster ndbinfo 資訊資料庫。

mysqldump 包含重新建立 mysql 資料庫的傾印之 general_logslow_query_log 表格的語句。不會傾印日誌表格內容。

如果您因權限不足而遇到備份檢視表的問題,請參閱 第 27.10 節「檢視表的限制」,以取得解決方法。