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=ON
和 gtid_purged=ON|AUTO
都成立,則使用 --single-transaction
時需要 RELOAD
或 FLUSH_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
表格,或者您混合使用 InnoDB
和 MyISAM
表格,請考慮使用 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 | 新增一個在連線或重新連線至 MySQL 伺服器後執行的其他 SQL 語句 |
--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-crl | 包含憑證撤銷清單的檔案 |
--ssl-crlpath | 包含憑證撤銷清單檔案的目錄 |
--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
在具有多個網路介面的電腦上,使用此選項選取要用於連線至 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
類型 字串 關於要使用哪個用戶端驗證外掛程式的提示。請參閱章節 8.2.17,「可插拔驗證」。
-
命令列格式 --enable-cleartext-plugin
類型 布林值 預設值 FALSE
啟用
mysql_clear_password
明文驗證外掛程式。(請參閱章節 8.4.1.4,「用戶端明文可插拔驗證」。) -
命令列格式 --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.2,「快取 SHA-2 可插拔驗證」。 --host=
、host_name
-h
host_name
命令列格式 --host
從指定主機上的 MySQL 伺服器傾印資料。預設主機為
localhost
。-
命令列格式 --login-path=name
類型 字串 從
.mylogin.cnf
登入路徑檔案中的指定登入路徑讀取選項。「登入路徑」是一個選項群組,其中包含指定要連線至哪個 MySQL 伺服器以及要驗證為哪個帳戶的選項。若要建立或修改登入路徑檔案,請使用 mysql_config_editor 公用程式。請參閱章節 6.6.7,「mysql_config_editor — MySQL 設定公用程式」。如需有關此選項和其他選項檔案選項的詳細資訊,請參閱章節 6.2.2.3,「影響選項檔案處理的命令列選項」。
-
命令列格式 --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
選項。用於連線至伺服器的 MySQL 帳戶多因素驗證因素 1 的密碼。密碼值是選用的。如果未提供,mysqldump 會提示輸入密碼。如果提供密碼,
--password1=
與後面的密碼之間不得有空格。如果未指定密碼選項,則預設為不傳送密碼。在命令列中指定密碼應視為不安全。若要避免在命令列中提供密碼,請使用選項檔案。請參閱章節 8.1.2.1,「密碼安全性的最終使用者指南」。
若要明確指定沒有密碼,且讓 mysqldump 不要提示輸入密碼,請使用
--skip-password1
選項。--password1
和--password
是同義詞,--skip-password1
和--skip-password
也是同義詞。用於連線伺服器的 MySQL 帳戶的多因素驗證的第二因素密碼。此選項的語意與
--password1
的語意類似;詳細資訊請參閱該選項的描述。用於連線伺服器的 MySQL 帳戶的多因素驗證的第三因素密碼。此選項的語意與
--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
驗證外掛程式支援此外掛程式選項。它提供兩個用戶端使用者可在執行階段設定的可能值:SSPI
和GSSAPI
。用戶端外掛程式選項的預設值使用安全支援提供者介面 (SSPI),該介面能夠從 Windows 記憶體快取中取得認證。或者,用戶端使用者可以選取透過 Windows 上的 MIT Kerberos 程式庫支援通用安全服務應用程式介面 (GSSAPI) 的模式。GSSAPI 能夠取得先前使用 kinit 命令產生的快取認證。
如需詳細資訊,請參閱 GSSAPI 模式中 Windows 用戶端的命令。
-
命令列格式 --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_password
(已過時) 或caching_sha2_password
驗證外掛程式進行驗證的用戶端。對於不使用這些外掛程式之一進行驗證的帳戶,此選項會被忽略。如果未使用基於 RSA 的密碼交換 (例如,當用戶端使用安全連線連線到伺服器時),也會忽略此選項。如果已指定
--server-public-key-path=
並指定有效的公開金鑰檔案,則會優先於file_name
--get-server-public-key
。對於
sha256_password
(已過時),只有在使用 OpenSSL 建置 MySQL 時,此選項才適用。如需有關
sha256_password
和caching_sha2_password
外掛程式的資訊,請參閱 第 8.4.1.3 節,「SHA-256 可插入驗證」和 第 8.4.1.2 節,「快取 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-fips-mode={OFF|ON|STRICT}
命令列格式 --ssl-fips-mode={OFF|ON|STRICT}
已棄用 是 類型 列舉 預設值 關閉
有效值 關閉
ON
STRICT
控制是否要在用戶端啟用 FIPS 模式。
--ssl-fips-mode
選項與其他--ssl-
選項不同,因為它不用於建立加密連線,而是用於影響允許哪些密碼編譯作業。請參閱 第 8.8 節,「FIPS 支援」。xxx
允許下列
--ssl-fips-mode
值OFF
:停用 FIPS 模式。ON
:啟用 FIPS 模式。STRICT
:啟用「「嚴格」」FIPS 模式。
注意如果 OpenSSL FIPS 物件模組不可用,則
--ssl-fips-mode
的唯一允許值為OFF
。在這種情況下,將--ssl-fips-mode
設定為ON
或STRICT
會導致用戶端在啟動時產生警告,並以非 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
狀態變數。伺服器名稱指示 (SNI) 是 TLS 協定的擴充功能 (必須使用 TLS 擴充功能編譯 OpenSSL,此選項才能運作)。SNI 的 MySQL 實作僅代表用戶端。
-
命令列格式 --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,「連線壓縮控制」。
選項檔案選項
這些選項用於控制要讀取的選項檔案。
--defaults-extra-file=
file_name
命令列格式 --defaults-extra-file=file_name
類型 檔案名稱 在全域選項檔案之後,但在 (Unix 上) 使用者選項檔案之前,讀取此選項檔案。如果該檔案不存在或無法存取,則會發生錯誤。如果
file_name
不是絕對路徑名稱,則會以目前目錄為基準進行解析。如需有關此選項和其他選項檔案選項的詳細資訊,請參閱章節 6.2.2.3,「影響選項檔案處理的命令列選項」。
-
命令列格式 --defaults-file=file_name
類型 檔案名稱 僅使用指定的選項檔案。如果該檔案不存在或無法存取,則會發生錯誤。如果
file_name
不是絕對路徑名稱,則會以目前目錄為基準進行解析。例外:即使使用了
--defaults-file
,用戶端程式仍會讀取.mylogin.cnf
。如需有關此選項和其他選項檔案選項的詳細資訊,請參閱章節 6.2.2.3,「影響選項檔案處理的命令列選項」。
-
命令列格式 --defaults-group-suffix=str
類型 字串 不僅讀取通常的選項群組,還讀取具有通常名稱和
str
後綴的群組。例如,mysqldump 通常會讀取[client]
和[mysqldump]
群組。如果此選項指定為--defaults-group-suffix=_other
,mysqldump 也會讀取[client_other]
和[mysqldump_other]
群組。如需有關此選項和其他選項檔案選項的詳細資訊,請參閱章節 6.2.2.3,「影響選項檔案處理的命令列選項」。
-
命令列格式 --no-defaults
不讀取任何選項檔案。如果程式啟動因從選項檔案讀取未知選項而失敗,可以使用
--no-defaults
來防止讀取這些選項。例外情況是,如果存在
.mylogin.cnf
檔案,則在所有情況下都會讀取它。這樣即使在使用--no-defaults
時,也可以用比命令列更安全的方式指定密碼。要建立.mylogin.cnf
,請使用 mysql_config_editor 公用程式。請參閱第 6.6.7 節,「mysql_config_editor — MySQL 配置公用程式」。如需有關此選項和其他選項檔案選項的詳細資訊,請參閱章節 6.2.2.3,「影響選項檔案處理的命令列選項」。
-
命令列格式 --print-defaults
列印程式名稱以及從選項檔案取得的所有選項。
如需有關此選項和其他選項檔案選項的詳細資訊,請參閱章節 6.2.2.3,「影響選項檔案處理的命令列選項」。
DDL 選項
mysqldump 的使用案例包括設定全新的 MySQL 執行個體(包括資料庫表),以及用現有的資料庫和表替換現有執行個體中的資料。以下選項可讓您指定在還原傾印時要拆除和設定的內容,方法是在傾印檔案中編碼各種 DDL 陳述式。
-
命令列格式 --add-drop-database
在每個
CREATE DATABASE
陳述式之前寫入一個DROP DATABASE
陳述式。此選項通常與--all-databases
或--databases
選項一起使用,因為除非指定這些選項之一,否則不會寫入任何CREATE DATABASE
陳述式。注意在 MySQL 8.4 中,
mysql
綱要被視為最終使用者無法刪除的系統綱要。如果--add-drop-database
與--all-databases
或與--databases
一起使用,且要傾印的綱要清單中包含mysql
,則傾印檔案會包含一個DROP DATABASE `mysql`
陳述式,該陳述式會在重新載入傾印檔案時導致錯誤。相反地,若要使用
--add-drop-database
,請使用--databases
並指定要傾印的綱要清單,但該清單不包含mysql
。 -
命令列格式 --add-drop-table
在每個
CREATE TABLE
陳述式之前寫入一個DROP TABLE
陳述式。 -
命令列格式 --add-drop-trigger
在每個
CREATE TRIGGER
陳述式之前寫入一個DROP TRIGGER
陳述式。 -
命令列格式 --all-tablespaces
將建立
NDB
資料表所使用的任何資料表空間所需的所有 SQL 陳述式新增到資料表傾印中。此資訊在 mysqldump 的輸出中不會包含。此選項目前僅與 NDB Cluster 資料表相關。 --no-create-db
,-n
命令列格式 --no-create-db
如果指定
--databases
或--all-databases
選項,則會抑制輸出中原本包含的CREATE DATABASE
陳述式。--no-create-info
,-t
命令列格式 --no-create-info
不寫入建立每個已傾印資料表的
CREATE TABLE
陳述式。注意此選項不會將建立記錄檔群組或資料表空間的陳述式從 mysqldump 輸出中排除;但是,您可以使用
--no-tablespaces
選項來達到此目的。--no-tablespaces
,-y
命令列格式 --no-tablespaces
此選項會抑制 mysqldump 輸出中的所有
CREATE LOGFILE GROUP
和CREATE TABLESPACE
陳述式。-
命令列格式 --replace
偵錯選項
以下選項會列印偵錯資訊、在傾印檔案中編碼偵錯資訊,或讓傾印作業繼續進行,而不管潛在的問題。
-
命令列格式 --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
。僅當 MySQL 是使用
WITH_DEBUG
建置時,此選項才可用。Oracle 提供的 MySQL 發行二進位檔不是使用此選項建置的。-
命令列格式 --debug-check
類型 布林值 預設值 FALSE
當程式結束時,列印一些偵錯資訊。
僅當 MySQL 是使用
WITH_DEBUG
建置時,此選項才可用。Oracle 提供的 MySQL 發行二進位檔不是使用此選項建置的。 -
命令列格式 --debug-info
類型 布林值 預設值 FALSE
在程式結束時,印出除錯資訊以及記憶體和 CPU 使用率統計資料。
僅當 MySQL 是使用
WITH_DEBUG
建置時,此選項才可用。Oracle 提供的 MySQL 發行二進位檔不是使用此選項建置的。 -
命令列格式 --dump-date
類型 布林值 預設值 TRUE
如果給定
--comments
選項,mysqldump 會在傾印的結尾產生如下形式的註解:-- Dump completed on DATE
但是,日期會導致在不同時間建立的傾印檔案看起來不同,即使資料在其他方面是相同的。
--dump-date
和--skip-dump-date
控制是否將日期新增到註解中。預設值為--dump-date
(在註解中包含日期)。--skip-dump-date
會抑制日期的列印。 --force
,-f
命令列格式 --force
忽略所有錯誤;即使在資料表傾印期間發生 SQL 錯誤,仍繼續執行。
此選項的一個用途是讓 mysqldump 即使在遇到因為定義參照已刪除的資料表而失效的檢視表時,仍繼續執行。若沒有
--force
,mysqldump 會以錯誤訊息結束。若有--force
,mysqldump 會列印錯誤訊息,但也會將包含檢視表定義的 SQL 註解寫入傾印輸出中,並繼續執行。如果也給定
--ignore-error
選項以忽略特定錯誤,則--force
優先。-
命令列格式 --log-error=檔案名稱
類型 檔案名稱 將警告和錯誤附加到指定的檔案中以記錄它們。預設為不記錄。
-
命令列格式 --skip-comments
請參閱
--comments
選項的說明。 --verbose
,-v
命令列格式 --verbose
詳細模式。印出有關程式執行操作的更多資訊。
說明選項
以下選項會顯示有關 mysqldump 命令本身的資訊。
國際化選項
以下選項會變更 mysqldump 命令使用國家語言設定表示字元資料的方式。
-
命令列格式 --character-sets-dir=目錄名稱
類型 目錄名稱 安裝字元集的目錄。請參閱 第 12.15 節「字元集設定」。
--default-character-set=
charset_name
命令列格式 --default-character-set=字元集名稱
類型 字串 預設值 utf8
使用
charset_name
作為預設字元集。請參閱 第 12.15 節「字元集設定」。如果未指定任何字元集,mysqldump 會使用utf8mb4
。--no-set-names
,-N
命令列格式 --no-set-names
已棄用 是 關閉
--set-charset
設定,與指定--skip-set-charset
相同。-
命令列格式 --set-charset
由停用 skip-set-charset
將
SET NAMES
寫入輸出。預設會啟用此選項。若要抑制default_character_set
SET NAMES
陳述式,請使用--skip-set-charset
。
複寫選項
mysqldump 命令經常在複寫組態中用於在複本伺服器上建立空的執行個體,或包含資料的執行個體。以下選項適用於在複寫來源伺服器和複本上傾印和還原資料。
-
命令列格式 --apply-replica-statements
類型 布林值 預設值 FALSE
對於使用
--dump-replica
選項產生的複本傾印,此選項會在包含二進位記錄座標的陳述式之前新增STOP REPLICA
陳述式,並在輸出結尾新增START REPLICA
陳述式。 -
命令列格式 --apply-slave-statements
已棄用 是 類型 布林值 預設值 FALSE
這是
--apply-replica-statements
的已淘汰別名。 -
命令列格式 --delete-source-logs
在複寫來源伺服器上,在執行傾印操作後,透過傳送
PURGE BINARY LOGS
陳述式到伺服器以刪除二進位記錄。這些選項需要RELOAD
權限,以及足以執行該陳述式的權限。此選項會自動啟用--source-data
。 -
命令列格式 --delete-master-logs
已棄用 是 這是
--delete-source-logs
的已淘汰別名。 -
命令列格式 --dump-replica[=值]
類型 數值 預設值 1
有效值 1
2
此選項類似於
--source-data
,但它用於傾印複本伺服器,以產生可讓另一個伺服器設定為與已傾印伺服器具有相同來源的複本的傾印檔案。此選項會讓傾印輸出包含一個CHANGE REPLICATION SOURCE TO
陳述式,其中指出已傾印複本來源的二進位記錄座標(檔案名稱和位置)。CHANGE REPLICATION SOURCE TO
陳述式從SHOW REPLICA STATUS
輸出中讀取Relay_Master_Log_File
和Exec_Master_Log_Pos
的值,並分別將它們用於SOURCE_LOG_FILE
和SOURCE_LOG_POS
。這些是複本開始複寫的複寫來源伺服器座標。注意從已執行的中繼記錄檔中交易的序列不一致可能會導致使用錯誤的位置。請參閱 第 19.5.1.34 節「複寫和交易不一致」,以取得更多資訊。
--dump-replica
會導致使用來源的座標,而不是已傾印伺服器的座標,如--source-data
選項所執行的。此外,指定此選項會覆寫--source-data
選項。警告如果將要套用傾印的伺服器使用
gtid_mode=ON
和SOURCE_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[=值]
已棄用 是 類型 數值 預設值 1
有效值 1
2
這是
--dump-replica
的已淘汰別名。 -
命令列格式 --include-source-host-port
類型 布林值 預設值 FALSE
將複本來源的主機名稱和 TCP/IP 連接埠號碼的
SOURCE_HOST
和SOURCE_PORT
選項新增到使用--dump-replica
選項產生的複本傾印中的CHANGE REPLICATION SOURCE TO
陳述式。 -
命令列格式 --include-master-host-port
已棄用 是 類型 布林值 預設值 FALSE
這是
--include-source-host-port
的已淘汰別名。 -
命令列格式 --master-data[=值]
已棄用 是 類型 數值 預設值 1
有效值 1
2
這是
--source-data
的已淘汰別名。 -
命令列格式 --output-as-version=值
類型 列舉 預設值 SERVER
有效值 BEFORE_8_0_23
BEFORE_8_2_0
決定用於陳述副本和事件的術語層級,使其能夠建立與不接受較新術語的舊版 MySQL 相容的傾印檔。此選項可以採用下列任何一個值,其效果如下所述:
SERVER
:讀取伺服器版本,並使用與該版本相容的最新版本陳述。這是預設值。BEFORE_8_0_23
:使用已棄用術語(例如 「slave」和 「master」)的複寫 SQL 陳述會寫入輸出,以取代使用 「replica」和 「source」的陳述,如同 MySQL 8.0.23 之前的版本。此選項也會複製
SHOW CREATE EVENT
輸出中BEFORE_8_2_0
的效果。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]
類型 數值 預設值 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
類型 列舉 預設值 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
值。請務必注意,mysqldump 為
SET @@GLOBAL.gtid_purged
陳述包含的值包含伺服器上gtid_executed
集中所有交易的 GTID,即使是那些變更資料庫的已抑制部分或伺服器上未包含在部分傾印中的其他資料庫的 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
產生更精簡的輸出。此選項會啟用
--skip-add-drop-table
、--skip-add-locks
、--skip-comments
、--skip-disable-keys
和--skip-set-charset
選項。 -
命令列格式 --compatible=名稱[,名稱,...]
類型 字串 預設值 ''
有效值 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
使用包含欄位名稱的完整
INSERT
陳述式。 -
命令列格式 --create-options
在
CREATE TABLE
陳述式中包含所有 MySQL 特定的表格選項。 --fields-terminated-by=...
,--fields-enclosed-by=...
,--fields-optionally-enclosed-by=...
,--fields-escaped-by=...
命令列格式 --fields-terminated-by=字串
類型 字串 命令列格式 --fields-enclosed-by=字串
類型 字串 命令列格式 --fields-optionally-enclosed-by=字串
類型 字串 命令列格式 --fields-escaped-by
類型 字串 這些選項與
--tab
選項一起使用,並具有與LOAD DATA
的對應FIELDS
子句相同的含義。請參閱 第 15.2.9 節,「LOAD DATA 陳述式」。-
命令列格式 --hex-blob
使用十六進位符號傾印二進位欄位(例如,
'abc'
變成0x616263
)。受影響的資料類型為BINARY
、VARBINARY
、BLOB
類型、BIT
、所有空間資料類型,以及與binary
字元集一起使用的其他非二進位資料類型。當使用
--tab
時,--hex-blob
選項會被忽略。 -
命令列格式 --lines-terminated-by=字串
類型 字串 此選項與
--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=
,檔案名稱
-r
檔案名稱
命令列格式 --result-file=檔案名稱
類型 檔案名稱 將輸出導向至指定的檔案。即使在產生傾印時發生錯誤,也會建立結果檔案並覆寫其先前的內容。
應在 Windows 上使用此選項,以防止將換行
\n
字元轉換為\r\n
歸位/換行序列。--show-create-skip-secondary-engine=
值
命令列格式 --show-create-skip-secondary-engine
從
CREATE TABLE
陳述式中排除SECONDARY ENGINE
子句。它透過在傾印操作期間啟用show_create_table_skip_secondary_engine
系統變數來實現。或者,您可以在使用 mysqldump 之前啟用show_create_table_skip_secondary_engine
系統變數。--tab=
,目錄名稱
-T
目錄名稱
命令列格式 --tab=目錄名稱
類型 目錄名稱 產生以 Tab 分隔的文字格式資料檔案。對於每個傾印的表格,mysqldump 會建立一個
檔案,其中包含建立表格的tbl_name
.sqlCREATE TABLE
陳述式,並且伺服器會寫入一個
檔案,其中包含其資料。選項值是寫入檔案的目錄。tbl_name
.txt注意只有當 mysqldump 與 mysqld 伺服器在同一部機器上執行時,才應使用此選項。由於伺服器會在您指定的目錄中建立
*.txt
檔案,因此目錄必須可由伺服器寫入,而且您使用的 MySQL 帳戶必須具有FILE
權限。由於 mysqldump 會在同一個目錄中建立*.sql
,因此必須可由您的系統登入帳戶寫入。預設情況下,
.txt
資料檔案的格式設定是欄位值之間使用 Tab 字元,且每行結尾都有一個換行符號。可以使用--fields-
和xxx
--lines-terminated-by
選項明確指定格式。欄位值會轉換為
--default-character-set
選項指定的字元集。-
命令列格式 --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'
和空值:對於名為欄位名稱
的欄位,此選項產生的輸出中會區分NULL
值、空字串和字串值'NULL'
,如下所示。值 XML 表示法 NULL
(未知值)<field name="
欄位名稱
" xsi:nil="true" />''
(空字串)<field name="
欄位名稱
"></field>'NULL'
(字串值)<field 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
選項並在命令列上命名所有資料庫相同。注意請參閱
--add-drop-database
的說明,以瞭解該選項與--all-databases
的不相容性。在 MySQL 8.4 之前的版本,使用
--all-databases
選項時,--routines
和--events
選項對於 mysqldump 而言並非必要:傾印會包含mysql
系統資料庫,因此也包含儲存程序和事件定義所在的mysql.proc
和mysql.event
資料表。從 MySQL 8.4 開始,不再使用mysql.event
和mysql.proc
資料表。對應物件的定義會儲存在資料字典資料表中,但這些資料表不會被傾印。若要在使用--all-databases
進行傾印時包含儲存程序和事件,請明確使用--routines
和--events
選項。--databases
、-B
命令列格式 --databases
傾印數個資料庫。一般而言,mysqldump 會將命令列上的第一個名稱引數視為資料庫名稱,並將後續的名稱視為資料表名稱。使用此選項時,它會將所有名稱引數視為資料庫名稱。
CREATE DATABASE
和USE
陳述式會包含在每個新資料庫之前的輸出中。此選項可用於傾印
performance_schema
資料庫,即使使用--all-databases
選項,通常也不會傾印該資料庫。(也請使用--skip-lock-tables
選項。)注意請參閱
--add-drop-database
的說明,以取得關於該選項與--databases
不相容的資訊。--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
類型 布林值 預設值 FALSE
跳過傾印檔案中的資料表檢視。
-
命令列格式 --init-command=str
類型 字串 連線至 MySQL 伺服器後執行的單一 SQL 陳述式。此定義會重設它或
init-command-add
所定義的現有陳述式。 -
命令列格式 --init-command-add=str
類型 字串 新增一個額外的 SQL 陳述式,在連線或重新連線至 MySQL 伺服器後執行。它可以在沒有
--init-command
的情況下使用,但如果在它之前使用則沒有任何效果,因為init-command
會重設要呼叫的命令清單。 --no-data
、-d
命令列格式 --no-data
不寫入任何資料表列資訊(也就是說,不傾印資料表內容)。如果您只想傾印資料表的
CREATE TABLE
陳述式(例如,藉由載入傾印檔案來建立資料表的空白副本),這會很有用。--routines
、-R
命令列格式 --routines
在輸出中包含傾印資料庫的儲存程序(程序和函式)。此選項需要全域
SELECT
權限。使用
--routines
產生的輸出包含CREATE PROCEDURE
和CREATE FUNCTION
陳述式,用於建立程序。--skip-generated-invisible-primary-key
命令列格式 --skip-generated-invisible-primary-key
類型 布林值 預設值 FALSE
此選項會導致從輸出中排除產生的隱形主鍵。如需詳細資訊,請參閱第 15.1.20.11 節,「產生的隱形主鍵」。
-
命令列格式 --tables
覆寫
--databases
或-B
選項。mysqldump 會將選項後面的所有名稱引數視為資料表名稱。 -
命令列格式 --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
類型 布林值 預設值 關閉
將
ANALYZE TABLE
陳述式新增至輸出,以便在重新載入傾印檔案時為傾印的資料表產生長條圖統計資料。預設會停用此選項,因為產生大型資料表的長條圖可能需要很長的時間。 -
命令列格式 --disable-keys
對於每個資料表,使用
/*!40000 ALTER TABLE
和tbl_name
DISABLE KEYS */;/*!40000 ALTER TABLE
陳述式包圍tbl_name
ENABLE KEYS */;INSERT
陳述式。這會讓載入傾印檔案的速度更快,因為索引是在插入所有列之後建立的。此選項僅適用於MyISAM
資料表的非唯一索引。 -
命令列格式 --extended-insert
由停用 skip-extended-insert
使用包含多個
VALUES
清單的多列語法撰寫INSERT
陳述式。這會產生較小的傾印檔案,並在重新載入檔案時加速插入。 -
命令列格式 --insert-ignore
撰寫
INSERT IGNORE
陳述式,而不是INSERT
陳述式。 -
命令列格式 --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
類型 數值 預設值 16384
客戶端/伺服器通訊緩衝區的初始大小。當建立多列
INSERT
陳述式(如使用--extended-insert
或--opt
選項)時,mysqldump 會建立長度最多為--net-buffer-length
位元組的列。如果您增加此變數,請確保 MySQL 伺服器net_buffer_length
系統變數的值至少與此值一樣大。 -
命令列格式 --network-timeout[={0|1}]
類型 布林值 預設值 TRUE
透過將
--max-allowed-packet
設定為其最大值,並將網路讀取和寫入逾時設定為較大的值,來啟用大型資料表傾印。此選項預設為啟用。若要停用它,請使用--skip-network-timeout
。 -
命令列格式 --opt
由停用 skip-opt
此選項預設為啟用,是
--add-drop-table
、--add-locks
、--create-options
、--disable-keys
、--extended-insert
、--lock-tables
、--quick
、--set-charset
的組合的簡寫。它可提供快速的傾印作業,並產生可快速重新載入到 MySQL 伺服器中的傾印檔案。由於
--opt
選項預設為啟用,因此您只需指定其反向選項,即--skip-opt
即可關閉數個預設設定。如需有關選擇性啟用或停用受--opt
影響之選項子集的資訊,請參閱mysqldump
選項群組的討論。 --quick
、-q
命令列格式 --quick
由停用 skip-quick
此選項適用於傾印大型資料表。它會強制 mysqldump 一次從伺服器擷取資料表的一列,而不是擷取整個列集並在記憶體中緩衝,然後再寫出。
-
命令列格式 --skip-opt
請參閱
--opt
選項的說明。
交易式選項
下列選項會在傾印作業的效能與匯出資料的可靠性和一致性之間進行權衡。
-
命令列格式 --add-locks
以
LOCK TABLES
和UNLOCK 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
在傾印
mysql
資料庫之後,將FLUSH PRIVILEGES
陳述式新增至傾印輸出。每當傾印包含mysql
資料庫以及任何其他依賴mysql
資料庫中資料來正確還原的資料庫時,都應該使用此選項。由於傾印檔案包含
FLUSH PRIVILEGES
陳述式,重新載入檔案需要足以執行該陳述式的權限。 -
命令列格式 --lock-all-tables
鎖定所有資料庫的所有資料表。這是透過在整個傾印期間取得全域讀取鎖定來實現的。此選項會自動關閉
--single-transaction
和--lock-tables
。 -
命令列格式 --lock-tables
針對每個傾印的資料庫,在傾印之前鎖定要傾印的所有資料表。資料表會使用
READ LOCAL
鎖定,以允許在MyISAM
資料表的情況下同時插入。對於交易式資料表(例如InnoDB
),--single-transaction
是比--lock-tables
好得多的選項,因為它根本不需要鎖定資料表。由於
--lock-tables
會分別鎖定每個資料庫的資料表,因此此選項不保證傾印檔案中的資料表在資料庫之間邏輯上一致。不同資料庫中的資料表可能會在完全不同的狀態下傾印。某些選項(例如
--opt
)會自動啟用--lock-tables
。如果您想要覆寫此行為,請在選項清單結尾使用--skip-lock-tables
。 -
命令列格式 --no-autocommit
-
命令列格式 --order-by-primary
依每個資料表的主索引鍵或其第一個唯一索引(如果存在此類索引)排序來傾印資料表的列。當傾印要載入到
InnoDB
資料表的MyISAM
資料表時,這會很有用,但會使傾印作業耗費相當長的時間。 --shared-memory-base-name=
name
命令列格式 --shared-memory-base-name=name
平台特定 Windows 在 Windows 上,使用共享記憶體連線到本機伺服器時所使用的共享記憶體名稱。預設值為
MYSQL
。共享記憶體名稱區分大小寫。只有在伺服器啟動時啟用
shared_memory
系統變數以支援共享記憶體連線時,此選項才適用。-
命令列格式 --single-transaction
此選項將交易隔離模式設定為
REPEATABLE READ
,並在傾印資料之前向伺服器傳送START TRANSACTION
SQL 陳述式。它僅對如InnoDB
等交易式表格有用,因為這樣它會在發出START TRANSACTION
時,傾印資料庫的一致性狀態,而不會封鎖任何應用程式。如果
gtid_mode=ON
和gtid_purged=ON|AUTO
皆成立,使用--single-transaction
時,需要RELOAD
或FLUSH_TABLES
權限。使用此選項時,您應記住只有
InnoDB
表格是以一致狀態傾印的。例如,在使用此選項時傾印的任何MyISAM
或MEMORY
表格仍可能改變狀態。在
--single-transaction
傾印正在進行時,為確保傾印檔案有效(表格內容和二進制日誌座標正確),沒有其他連線應使用以下陳述式:ALTER TABLE
、CREATE TABLE
、DROP TABLE
、RENAME TABLE
、TRUNCATE TABLE
。一致性讀取並未與這些陳述式隔離,因此在要傾印的表格上使用它們可能會導致SELECT
(由 mysqldump 執行以檢索表格內容)取得不正確的內容或失敗。--single-transaction
選項和--lock-tables
選項是互斥的,因為LOCK TABLES
會導致任何待處理的交易被隱式地提交。要傾印大型表格,請將
--single-transaction
選項與--quick
選項結合使用。
選項群組
當您選擇性地啟用或停用群組選項的效果時,順序很重要,因為選項是從頭到尾依序處理的。例如,--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 伺服器複製到另一個 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 節「範例備份與復原策略」。
要選擇
--opt
的效果,但排除某些功能,請為每個功能使用--skip
選項。要停用擴充插入和記憶體緩衝,請使用--opt
--skip-extended-insert
--skip-quick
。(實際上,--skip-extended-insert
--skip-quick
就足夠了,因為--opt
預設為開啟。)要反轉
--opt
的所有功能,但禁用索引和表格鎖定除外,請使用--skip-opt
--disable-keys
--lock-tables
。
限制
mysqldump 預設不會傾印 performance_schema
或 sys
架構。要傾印任何這些架構,請在命令列上明確命名它們。您也可以使用 --databases
選項來命名它們。對於 performance_schema
,也請使用 --skip-lock-tables
選項。
mysqldump 不會傾印 INFORMATION_SCHEMA
架構。
mysqldump 不會傾印 InnoDB
CREATE TABLESPACE
陳述式。
mysqldump 不會傾印 NDB Cluster ndbinfo
資訊資料庫。
mysqldump 包含重新建立 mysql
資料庫傾印的 general_log
和 slow_query_log
表格的陳述式。不會傾印日誌表格內容。
如果您因為權限不足而遇到備份檢視表的問題,請參閱第 27.9 節「檢視表限制」以尋求解決方案。