文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  mysqlbinlog — 處理二進制日誌檔案的工具

6.6.9 mysqlbinlog — 處理二進制日誌檔案的工具

伺服器的二進制日誌包含描述資料庫內容修改的 事件 的檔案。伺服器以二進制格式寫入這些檔案。若要以文字格式顯示其內容,請使用 mysqlbinlog 工具。您也可以使用 mysqlbinlog 來顯示複本伺服器在複製設定中寫入的中繼日誌檔案的內容,因為中繼日誌與二進制日誌具有相同的格式。二進制日誌和中繼日誌在第 7.4.4 節「二進制日誌」第 19.2.4 節「中繼日誌和複製元資料儲存庫」中有更深入的討論。

像這樣呼叫 mysqlbinlog

mysqlbinlog [options] log_file ...

例如,若要顯示名為 binlog.000003 的二進制日誌檔案的內容,請使用此命令

mysqlbinlog binlog.000003

輸出包含 binlog.000003 中包含的事件。對於基於語句的日誌,事件資訊包括 SQL 語句、執行該語句的伺服器 ID、執行語句的時間戳記、所花費的時間等等。對於基於列的日誌,事件會指示列的變更,而不是 SQL 語句。如需關於日誌模式的資訊,請參閱第 19.2.1 節「複製格式」

事件之前會有提供額外資訊的標頭註解。例如

# at 141
#100309  9:28:36 server id 123  end_log_pos 245
  Query thread_id=3350  exec_time=11  error_code=0

在第一行中,at 後面的數字表示二進制日誌檔案中事件的檔案偏移量或起始位置。

第二行以日期和時間開始,表示語句在事件來源的伺服器上啟動的時間。對於複製,此時間戳記會傳播到複本伺服器。server id 是事件來源伺服器的 server_id 值。end_log_pos 表示下一個事件的開始位置(也就是目前事件的結束位置 + 1)。thread_id 表示執行事件的執行緒。exec_time 是執行事件所花費的時間,在複製來源伺服器上。在複本上,它是複本上的結束執行時間減去來源上的開始執行時間的差值。差值可作為複本落後於來源多少的指標。error_code 表示執行事件的結果。零表示沒有發生錯誤。

注意

當使用事件群組時,事件的檔案偏移量可能會分組在一起,事件的註解可能會分組在一起。不要將這些分組的事件誤認為空白的檔案偏移量。

mysqlbinlog 的輸出可以重新執行(例如,透過將其作為 mysql 的輸入)來重做日誌中的語句。這對於伺服器意外退出後的復原作業非常有用。如需其他使用範例,請參閱本節稍後的討論和第 9.5 節「時間點(增量)復原」。若要執行 mysqlbinlog 使用的內部使用 BINLOG 語句,使用者需要 BINLOG_ADMIN 權限(或已棄用的 SUPER 權限),或是 REPLICATION_APPLIER 權限加上執行每個日誌事件的適當權限。

您可以使用 mysqlbinlog 直接讀取二進制日誌檔案,並將其應用於本地 MySQL 伺服器。您也可以使用 --read-from-remote-server 選項從遠端伺服器讀取二進制日誌。若要讀取遠端二進制日誌,可以提供連線參數選項來指示如何連線到伺服器。這些選項包括 --host--password--port--protocol--socket--user

當二進制日誌檔案被加密時,mysqlbinlog 無法直接讀取它們,但可以使用 --read-from-remote-server 選項從伺服器讀取。當伺服器的 binlog_encryption 系統變數設定為 ON 時,二進制日誌檔案會被加密。SHOW BINARY LOGS 陳述式會顯示特定的二進制日誌檔案是否已加密或未加密。加密和未加密的二進制日誌檔案也可以使用加密日誌檔案的檔案標頭開頭的魔術數字 (0xFD62696E) 來區分,該魔術數字與未加密日誌檔案的魔術數字 (0xFE62696E) 不同。請注意,如果您嘗試直接讀取加密的二進制日誌檔案,mysqlbinlog 會傳回適當的錯誤,但較舊版本的 mysqlbinlog 根本不會將該檔案識別為二進制日誌檔案。有關二進制日誌加密的更多資訊,請參閱 第 19.3.2 節, 「加密二進制日誌檔案和中繼日誌檔案」

當二進制日誌交易負載已壓縮時,mysqlbinlog 會自動解壓縮並解碼交易負載,並將其列印為未壓縮事件。當 binlog_transaction_compression 設定為 ON 時,交易負載會被壓縮,然後以單一事件 (Transaction_payload_event) 寫入伺服器的二進制日誌檔案。 使用 --verbose 選項,mysqlbinlog 會加入註解,說明使用的壓縮演算法、最初接收的壓縮負載大小以及解壓縮後產生的負載大小。

注意

mysqlbinlog 為壓縮交易負載中的單個事件所指定的結束位置 (end_log_pos) 與原始壓縮負載的結束位置相同。因此,多個解壓縮事件可以具有相同的結束位置。

如果交易負載已經壓縮,mysqlbinlog 自己的連線壓縮執行較少的操作,但仍會對未壓縮的交易和標頭進行操作。

有關二進制日誌交易壓縮的更多資訊,請參閱 第 7.4.4.5 節, 「二進制日誌交易壓縮」

當對大型二進制日誌執行 mysqlbinlog 時,請注意檔案系統是否有足夠的空間來容納產生的檔案。若要設定 mysqlbinlog 用於臨時檔案的目錄,請使用 TMPDIR 環境變數。

mysqlbinlog 在執行任何 SQL 陳述式之前,會將 pseudo_replica_mode 的值設定為 true。此系統變數會影響 XA 交易的處理、original_commit_timestamp 複寫延遲時間戳記、original_server_version 系統變數以及不受支援的 SQL 模式。

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

表 6.20 mysqlbinlog 選項

選項名稱 描述
--base64-output 使用 base-64 編碼列印二進制日誌條目
--bind-address 使用指定的網路介面連線到 MySQL 伺服器
--binlog-row-event-max-size 二進制日誌最大事件大小
--character-sets-dir 安裝字元集的目錄
--compress 壓縮用戶端和伺服器之間傳送的所有資訊
--compression-algorithms 允許連線到伺服器的壓縮演算法
--connection-server-id 用於測試和偵錯。請參閱文字,以了解適用的預設值和其他詳細資訊
--database 僅列出此資料庫的條目
--debug 寫入偵錯日誌
--debug-check 程式結束時列印偵錯資訊
--debug-info 程式結束時列印偵錯資訊、記憶體和 CPU 統計資訊
--default-auth 要使用的驗證外掛程式
--defaults-extra-file 除了通常的選項檔案外,還讀取已命名的選項檔案
--defaults-file 僅讀取已命名的選項檔案
--defaults-group-suffix 選項群組尾碼值
--disable-log-bin 停用二進制記錄
--exclude-gtids 不顯示所提供 GTID 集中包含的任何群組
--force-if-open 即使二進制日誌檔案已開啟或未正確關閉,仍讀取它們
--force-read 如果 mysqlbinlog 讀取到無法辨識的二進制日誌事件,則會列印警告
--get-server-public-key 從伺服器請求 RSA 公開金鑰
--help 顯示說明訊息並結束
--hexdump 在註解中顯示日誌的十六進制轉儲
--host MySQL 伺服器所在的伺服器主機
--idempotent 使伺服器僅在此工作階段處理二進制日誌更新時使用等冪模式
--include-gtids 僅顯示所提供的 GTID 集中包含的群組
--local-load 在指定的目錄中準備 LOAD DATA 的本地臨時檔案
--login-path 從 .mylogin.cnf 讀取登入路徑選項
--no-defaults 不讀取任何選項檔案
--no-login-paths 不從登入路徑檔案讀取登入路徑
--offset 跳過日誌中的前 N 個條目
--password 連線到伺服器時要使用的密碼
--plugin-dir 安裝外掛程式的目錄
--port 連線的 TCP/IP 連接埠號碼
--print-defaults 列印預設選項
--print-table-metadata 列印資料表的中繼資料
--protocol 要使用的傳輸協定
--raw 將原始 (二進制) 格式的事件寫入輸出檔案
--read-from-remote-master 從 MySQL 複寫來源伺服器讀取二進制日誌,而不是讀取本地日誌檔案
--read-from-remote-server 從 MySQL 伺服器讀取二進制日誌,而不是本地日誌檔案
--read-from-remote-source 從 MySQL 複寫來源伺服器讀取二進制日誌,而不是讀取本地日誌檔案
--require-row-format 要求以列為基礎的二進制記錄格式
--result-file 將輸出導向已命名的檔案
--rewrite-db 從以列為基礎的格式寫入的日誌中回放時,為資料庫建立重寫規則。可多次使用
--server-id 僅擷取由具有給定伺服器 ID 的伺服器建立的事件
--server-id-bits 當日誌是由 server-id-bits 設定為小於最大值的 mysqld 寫入時,告知 mysqlbinlog 如何解譯二進制日誌中的伺服器 ID;僅限 MySQL Cluster 版本的 mysqlbinlog 支援
--server-public-key-path 包含 RSA 公開金鑰的檔案路徑名稱
--set-charset 將 SET NAMES charset_name 陳述式新增至輸出
--shared-memory-base-name 用於共用記憶體連線的共用記憶體名稱 (僅限 Windows)
--short-form 僅顯示日誌中包含的陳述式
--skip-gtids 不要在輸出轉儲檔案中包含二進制日誌檔案中的 GTID
--socket 要使用的 Unix socket 檔案或 Windows 具名管道
--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 如果工作階段重新使用失敗,是否要建立連線
--start-datetime 從時間戳記等於或晚於 datetime 引數的第一個事件開始讀取二進制日誌
--start-position 從位置等於或大於引數的第一個事件開始解碼二進制日誌
--stop-datetime 在時間戳記等於或大於 datetime 引數的第一個事件停止讀取二進制日誌
--stop-never 在讀取最後一個二進制日誌檔案後,保持連線到伺服器
--stop-never-slave-server-id 連線至伺服器時要回報的從屬伺服器 ID
--stop-position 在第一個位置等於或大於參數的事件停止解碼二進制日誌
--tls-ciphersuites 加密連線允許的 TLSv1.3 加密套件
--tls-sni-servername 客戶端提供的伺服器名稱
--tls-version 加密連線允許的 TLS 協定
--to-last-log 不要在從 MySQL 伺服器請求的二進制日誌末尾停止,而是繼續列印到最後一個二進制日誌的末尾
--user 連線至伺服器時要使用的 MySQL 使用者名稱
--verbose 將資料列事件重建為 SQL 語句
--verify-binlog-checksum 驗證二進制日誌中的校驗和
--version 顯示版本資訊並結束
--zstd-compression-level 使用 zstd 壓縮的伺服器連線的壓縮等級

  • --help, -?

    命令列格式 --help

    顯示說明訊息並結束。

  • --base64-output=value

    命令列格式 --base64-output=value
    類型 字串
    預設值 AUTO
    有效值

    AUTO

    NEVER

    DECODE-ROWS

    此選項決定何時應使用 BINLOG 語句將事件顯示為 base-64 編碼字串。該選項具有以下允許值(不區分大小寫)

    • AUTO(「自動」)或 UNSPEC(「未指定」)會在必要時自動顯示 BINLOG 語句(也就是,對於格式描述事件和資料列事件)。如果未給定 --base64-output 選項,則效果與 --base64-output=AUTO 相同。

      注意

      如果您打算使用 mysqlbinlog 的輸出重新執行二進制日誌檔案內容,則自動顯示 BINLOG 是唯一安全的行為。其他選項值僅用於除錯或測試目的,因為它們可能會產生不包含所有可執行事件的輸出。

    • NEVER 會導致不顯示 BINLOG 語句。如果發現必須使用 BINLOG 顯示的資料列事件,mysqlbinlog 將會終止並顯示錯誤。

    • DECODE-ROWS 指定要讓 mysqlbinlog 解碼資料列事件,並透過同時指定 --verbose 選項將其顯示為註解的 SQL 語句。與 NEVER 一樣,DECODE-ROWS 會抑制顯示 BINLOG 語句,但與 NEVER 不同的是,如果找到資料列事件,它不會終止並顯示錯誤。

    如需顯示 --base64-output--verbose 對資料列事件輸出的影響的範例,請參閱 章節 6.6.9.2,「mysqlbinlog 資料列事件顯示」

  • --bind-address=ip_address

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

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

  • --binlog-row-event-max-size=N

    命令列格式 --binlog-row-event-max-size=#
    類型 數值
    預設值 4294967040
    最小值 256
    最大值 18446744073709547520

    以位元組為單位指定基於資料列的二進制日誌事件的最大大小。如果可能,資料列會分組為小於此大小的事件。該值應為 256 的倍數。預設值為 4GB。

  • --character-sets-dir=dir_name

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

    安裝字元集的目錄。請參閱 章節 12.15,「字元集組態」

  • --compress

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

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

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

  • --compression-algorithms=value

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

    zlib

    zstd

    uncompressed

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

    如需更多資訊,請參閱 章節 6.2.8,「連線壓縮控制」

  • --connection-server-id=server_id

    命令列格式 --connection-server-id=#]
    類型 整數
    預設值 0 (1)
    最小值 0 (1)
    最大值 4294967295

    --connection-server-id 指定 mysqlbinlog 連線至伺服器時回報的伺服器 ID。它可用於避免與複本伺服器或另一個 mysqlbinlog 程序的 ID 發生衝突。

    如果指定了 --read-from-remote-server 選項,mysqlbinlog 會回報伺服器 ID 為 0,這會告知伺服器在傳送最後一個日誌檔案後斷開連線(非封鎖行為)。如果也指定了 --stop-never 選項以維持與伺服器的連線,mysqlbinlog 預設會回報伺服器 ID 為 1 而非 0,且 --connection-server-id 可用於在需要時替換該伺服器 ID。請參閱 章節 6.6.9.4,「指定 mysqlbinlog 伺服器 ID」

  • --database=db_name, -d db_name

    命令列格式 --database=db_name
    類型 字串

    此選項會導致 mysqlbinlog 輸出二進制日誌(僅限本機日誌)中發生的項目,當 db_nameUSE 選為預設資料庫時。

    --database 選項在 mysqlbinlog 中的作用類似於 --binlog-do-db 選項在 mysqld 中的作用,但只能用來指定一個資料庫。如果多次給定 --database,則僅使用最後一個執行個體。

    此選項的效果取決於是否使用基於語句或基於資料列的日誌記錄格式,就像 --binlog-do-db 的效果取決於是否使用基於語句或基於資料列的日誌記錄一樣。

    基於語句的日誌記錄。 --database 選項的作用如下

    • db_name 是預設資料庫時,無論語句是否修改 db_name 或不同資料庫中的表格,都會輸出語句。

    • 除非選擇 db_name 作為預設資料庫,否則不會輸出語句,即使語句修改了 db_name 中的表格。

    • CREATE DATABASEALTER DATABASEDROP DATABASE 例外。當確定是否輸出語句時,建立、變更或捨棄的資料庫會被視為預設資料庫。

    假設二進制日誌是透過執行這些使用基於語句的日誌記錄的語句所建立的

    INSERT INTO test.t1 (i) VALUES(100);
    INSERT INTO db2.t2 (j)  VALUES(200);
    USE test;
    INSERT INTO test.t1 (i) VALUES(101);
    INSERT INTO t1 (i)      VALUES(102);
    INSERT INTO db2.t2 (j)  VALUES(201);
    USE db2;
    INSERT INTO test.t1 (i) VALUES(103);
    INSERT INTO db2.t2 (j)  VALUES(202);
    INSERT INTO t2 (j)      VALUES(203);

    mysqlbinlog --database=test 不會輸出前兩個 INSERT 語句,因為沒有預設資料庫。它會輸出 USE test 後面的三個 INSERT 語句,但不會輸出 USE db2 後面的三個 INSERT 語句。

    mysqlbinlog --database=db2 不會輸出前兩個 INSERT 語句,因為沒有預設資料庫。它不會輸出 USE test 後面的三個 INSERT 語句,但會輸出 USE db2 後面的三個 INSERT 語句。

    以列為基礎的記錄。mysqlbinlog 只輸出屬於 db_name 資料庫的表格變更項目。預設資料庫對此沒有影響。假設剛才描述的二進制日誌是使用以列為基礎的記錄,而不是以語句為基礎的記錄建立的。mysqlbinlog --database=test 只輸出修改 test 資料庫中 t1 表格的項目,無論是否發出 USE 命令或預設資料庫為何。

    如果伺服器執行的 binlog_format 設定為 MIXED,且您希望能夠使用帶有 --database 選項的 mysqlbinlog,您必須確保修改的表格在 USE 選定的資料庫中。(特別是,不應該使用跨資料庫的更新。)

    當與 --rewrite-db 選項一起使用時,--rewrite-db 選項會先被套用;然後套用 --database 選項,並使用重寫的資料庫名稱。選項提供的順序在這方面沒有區別。

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

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

    寫入偵錯日誌。典型的 debug_options 字串為 d:t:o,file_name。預設值為 d:t:o,/tmp/mysqlbinlog.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 發行版本二進制檔案並非使用此選項建置。

  • --default-auth=plugin

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

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

  • --defaults-extra-file=file_name

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

    在全域選項檔案之後,但在 (在 Unix 上) 使用者選項檔案之前讀取此選項檔案。如果檔案不存在或無法存取,則會發生錯誤。如果 file_name 不是絕對路徑名稱,則會相對於目前目錄進行解譯。

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

  • --defaults-file=file_name

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

    僅使用給定的選項檔案。如果檔案不存在或無法存取,則會發生錯誤。如果 file_name 不是絕對路徑名稱,則會相對於目前目錄進行解譯。

    例外:即使使用 --defaults-file,用戶端程式也會讀取 .mylogin.cnf

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

  • --defaults-group-suffix=str

    命令列格式 --defaults-group-suffix=str
    類型 字串

    不僅讀取一般的選項群組,也讀取具有一般名稱和 str 字尾的群組。例如,mysqlbinlog 通常會讀取 [client][mysqlbinlog] 群組。如果此選項給定為 --defaults-group-suffix=_othermysqlbinlog 也會讀取 [client_other][mysqlbinlog_other] 群組。

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

  • --disable-log-bin-D

    命令列格式 --disable-log-bin

    停用二進制記錄。如果您使用 --to-last-log 選項,並將輸出傳送到相同的 MySQL 伺服器,這對於避免無窮迴圈很有用。當您在意外結束後還原時,此選項也有助於避免您已記錄的陳述式重複。

    此選項會導致 mysqlbinlog 在其輸出中包含 SET sql_log_bin = 0 陳述式,以停用剩餘輸出的二進制記錄。操作 sql_log_bin 系統變數的工作階段值是一項受限制的操作,因此此選項要求您擁有足夠的權限來設定受限制的工作階段變數。請參閱第 7.1.9.1 節,「系統變數權限」

  • --exclude-gtids=gtid_set

    命令列格式 --exclude-gtids=gtid_set
    類型 字串
    預設值

    不顯示 gtid_set 中列出的任何群組。

  • --force-if-open-F

    命令列格式 --force-if-open

    即使二進制日誌檔案已開啟或未正確關閉(已設定 IN_USE 旗標),也會讀取二進制日誌檔案;如果檔案以截斷的事件結束,則不會失敗。

    只有由伺服器目前寫入的二進制日誌才會設定 IN_USE 旗標;如果伺服器當機,則該旗標會保持設定狀態,直到伺服器再次啟動並復原二進制日誌為止。若沒有此選項,mysqlbinlog 會拒絕處理設定此旗標的檔案。由於伺服器可能正在寫入檔案,因此最後一個事件的截斷被視為正常。

  • --force-read-f

    命令列格式 --force-read

    使用此選項,如果 mysqlbinlog 讀取其無法辨識的二進制日誌事件,則會印出警告、忽略該事件並繼續。若沒有此選項,如果 mysqlbinlog 讀取此類事件,則會停止。

  • --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.2 節,「快取 SHA-2 可插拔驗證」

  • --hexdump-H

    命令列格式 --hexdump

    在註解中顯示日誌的十六進位傾印,如第 6.6.9.1 節,「mysqlbinlog 十六進位傾印格式」所述。十六進位輸出對於複寫偵錯很有幫助。

  • --host=host_name-h host_name

    命令列格式 --host=host_name
    類型 字串
    預設值 localhost

    從給定主機上的 MySQL 伺服器取得二進制日誌。

  • --idempotent

    命令列格式 --idempotent
    類型 布林值
    預設值 true

    告訴 MySQL 伺服器在處理更新時使用等冪模式;這會導致抑制伺服器在目前工作階段中處理更新時遇到的任何重複鍵或找不到鍵的錯誤。每當需要或有必要將一個或多個二進制日誌重新播放到可能不包含日誌所參考之所有資料的 MySQL 伺服器時,此選項可能會很有用。

    此選項的作用範圍僅限於目前的 mysqlbinlog 用戶端和工作階段。

  • --include-gtids=gtid_set

    命令列格式 --include-gtids=gtid_set
    類型 字串
    預設值

    僅顯示 gtid_set 中列出的群組。

  • --local-load=dir_name-l dir_name

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

    對於對應於 LOAD DATA 陳述式的資料載入操作,mysqlbinlog 會從二進位日誌事件中提取檔案,將它們作為暫存檔寫入本機檔案系統,並寫入 LOAD DATA LOCAL 陳述式,以導致載入這些檔案。預設情況下,mysqlbinlog 會將這些暫存檔寫入作業系統特定的目錄。--local-load 選項可以用來明確指定 mysqlbinlog 應該準備本機暫存檔的目錄。

    因為其他程序可以將檔案寫入預設的系統特定目錄,建議您為 mysqlbinlog 指定 --local-load 選項,以指定不同的資料檔目錄,然後在處理來自 mysqlbinlog 的輸出時,透過為 mysql 指定 --load-data-local-dir 選項來指定相同的目錄。例如:

    mysqlbinlog --local-load=/my/local/data ...
        | mysql --load-data-local-dir=/my/local/data ...
    重要事項

    這些暫存檔不會由 mysqlbinlog 或任何其他 MySQL 程式自動移除。

  • --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 節,「影響選項檔案處理的命令列選項」

  • --no-defaults

    命令列格式 --no-defaults

    不讀取任何選項檔案。如果程式啟動因為從選項檔案讀取未知選項而失敗,可以使用 --no-defaults 來防止它們被讀取。

    例外情況是,如果 .mylogin.cnf 檔案存在,則在所有情況下都會讀取它。即使使用 --no-defaults,這也允許以比在命令列上更安全的方式指定密碼。若要建立 .mylogin.cnf,請使用 mysql_config_editor 工具。請參閱 第 6.6.7 節,「mysql_config_editor — MySQL 組態工具」

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

  • --offset=N, -o N

    命令列格式 --offset=#
    類型 數值

    跳過日誌中的前 N 個項目。

  • --open-files-limit=N

    命令列格式 --open-files-limit=#
    類型 數值
    預設值 8
    最小值 1
    最大值 [平台相關]

    指定要保留的開啟檔案描述符號數量。

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

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

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

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

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

  • --plugin-dir=dir_name

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

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

  • --port=port_num, -P port_num

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

    用於連線至遠端伺服器的 TCP/IP 連接埠號碼。

  • --print-defaults

    命令列格式 --print-defaults

    列印程式名稱以及它從選項檔案中取得的所有選項。

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

  • --print-table-metadata

    命令列格式 --print-table-metadata

    從二進位日誌列印表格相關的中繼資料。使用 binlog-row-metadata 設定二進位記錄的表格相關中繼資料量。

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

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

    TCP

    SOCKET

    PIPE

    MEMORY

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

  • --raw

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

    預設情況下,mysqlbinlog 會讀取二進位日誌檔案,並以文字格式寫入事件。--raw 選項會告知 mysqlbinlog 以其原始二進位格式寫入它們。它的使用要求同時使用 --read-from-remote-server,因為檔案是從伺服器請求的。mysqlbinlog 會為從伺服器讀取的每個檔案寫入一個輸出檔案。--raw 選項可以用於備份伺服器的二進位日誌。使用 --stop-never 選項,備份是「即時」的,因為 mysqlbinlog 會保持與伺服器的連線。預設情況下,輸出檔案會寫入目前目錄,並使用與原始日誌檔案相同的名稱。可以使用 --result-file 選項修改輸出檔案名稱。有關更多資訊,請參閱 第 6.6.9.3 節,「使用 mysqlbinlog 備份二進位日誌檔案」

  • --read-from-remote-source=type

    命令列格式 --read-from-remote-source=type

    此選項透過將選項值設定為 BINLOG-DUMP-NON-GTIDSBINLOG-DUMP-GTIDS,分別使用 COM_BINLOG_DUMPCOM_BINLOG_DUMP_GTID 命令從 MySQL 伺服器讀取二進位日誌。如果 --read-from-remote-source=BINLOG-DUMP-GTIDS--exclude-gtids 組合使用,則可以在來源上篩選出交易,避免不必要的網路流量。

    連線參數選項與這些選項或 --read-from-remote-server 選項一起使用。這些選項是 --host--password--port--protocol--socket--user。如果未指定任何遠端選項,則會忽略連線參數選項。

    需要使用 REPLICATION SLAVE 權限才能使用這些選項。

  • --read-from-remote-master=type

    命令列格式 --read-from-remote-master=type
    已棄用

    --read-from-remote-source 的已棄用同義詞。

  • --read-from-remote-server=file_name, -R

    命令列格式 --read-from-remote-server=file_name

    從 MySQL 伺服器讀取二進制日誌,而不是讀取本機日誌檔。此選項需要遠端伺服器正在執行。它僅適用於遠端伺服器上的二進制日誌檔,而不適用於中繼日誌檔。這會接受二進制日誌檔名稱(包括數字後綴),而不包含檔案路徑。

    連線參數選項會與此選項或 --read-from-remote-source 選項一起使用。這些選項為 --host--password--port--protocol--socket--user。如果未指定任何遠端選項,則會忽略連線參數選項。

    使用此選項需要 REPLICATION SLAVE 權限。

    此選項類似於 --read-from-remote-source=BINLOG-DUMP-NON-GTIDS

  • --result-file=name, -r name

    命令列格式 --result-file=name

    如果沒有 --raw 選項,此選項會指示 mysqlbinlog 將文字輸出寫入的檔案。使用 --raw 時,mysqlbinlog 會為從伺服器傳輸的每個日誌檔寫入一個二進制輸出檔,預設情況下會使用與原始日誌檔相同的名稱寫入目前的目錄中。在這種情況下,--result-file 選項值會被視為修改輸出檔名稱的前綴。

  • --require-row-format

    命令列格式 --require-row-format
    類型 布林值
    預設值 false

    要求事件使用以列為基礎的二進制日誌格式。此選項會對 mysqlbinlog 輸出強制執行以列為基礎的複寫事件。使用此選項產生的事件串流將會被使用 CHANGE REPLICATION SOURCE TO 陳述式的 REQUIRE_ROW_FORMAT 選項保護的複寫通道接受。必須在寫入二進制日誌的伺服器上設定 binlog_format=ROW。當您指定此選項時,如果 mysqlbinlog 遇到在 REQUIRE_ROW_FORMAT 限制下不允許的任何事件,包括 LOAD DATA INFILE 指示、建立或捨棄暫存資料表、INTVARRANDUSER_VAR 事件,以及 DML 交易中非以列為基礎的事件時,mysqlbinlog 會停止並顯示錯誤訊息。mysqlbinlog 也會在輸出開頭列印 SET @@session.require_row_format 陳述式,以在執行輸出時套用限制,並且不會列印 SET @@session.pseudo_thread_id 陳述式。

  • --rewrite-db='from_name->to_name'

    命令列格式 --rewrite-db='oldname->newname'
    類型 字串
    預設值 [無]

    從以列為基礎或以陳述式為基礎的日誌讀取時,將所有出現的 from_name 重寫為 to_name。對於以列為基礎的日誌,會在列上執行重寫;對於以陳述式為基礎的日誌,會在 USE 子句上執行重寫。

    警告

    當使用此選項時,其中資料表名稱使用資料庫名稱限定的陳述式不會重寫以使用新名稱。

    用作此選項值的重寫規則是一個具有 'from_name->to_name' 形式的字串,如先前所示,因此必須用引號括起來。

    若要使用多個重寫規則,請多次指定該選項,如下所示

    mysqlbinlog --rewrite-db='dbcurrent->dbold' --rewrite-db='dbtest->dbcurrent' \
        binlog.00001 > /tmp/statements.sql

    當與 --database 選項一起使用時,會先套用 --rewrite-db 選項;然後會使用重寫的資料庫名稱套用 --database 選項。選項的提供順序在此方面沒有差異。

    這表示,例如,如果 mysqlbinlog--rewrite-db='mydb->yourdb' --database=yourdb 啟動,則輸出中會包含對資料庫 mydbyourdb 中任何資料表的所有更新。另一方面,如果以 --rewrite-db='mydb->yourdb' --database=mydb 啟動,則 mysqlbinlog 完全不會輸出任何陳述式:因為在套用 --database 選項之前,對 mydb 的所有更新會先重寫為對 yourdb 的更新,因此不會有任何更新符合 --database=mydb

  • --server-id=id

    命令列格式 --server-id=id
    類型 數值

    僅顯示由具有指定伺服器 ID 的伺服器所建立的那些事件。

  • --server-id-bits=N

    命令列格式 --server-id-bits=#
    類型 數值
    預設值 32
    最小值 7
    最大值 32

    僅使用 server_id 的前 N 個位元來識別伺服器。如果二進制日誌是由將 server-id-bits 設定為小於 32 且使用者資料儲存在最高有效位的 mysqld 所寫入,則使用設定為 32 的 --server-id-bits 執行 mysqlbinlog 可讓看到此資料。

    此選項僅受 NDB Cluster 發行版本提供的 mysqlbinlog 版本或使用 NDB Cluster 支援建置的版本支援。

  • --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(已棄用),只有在 MySQL 是使用 OpenSSL 建置時,此選項才適用。

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

  • --set-charset=charset_name

    命令列格式 --set-charset=charset_name
    類型 字串

    SET NAMES charset_name 陳述式新增至輸出,以指定用於處理日誌檔的字元集。

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

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

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

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

  • --short-form, -s

    命令列格式 --short-form

    僅顯示日誌中包含的陳述式,而不顯示任何額外資訊或以列為基礎的事件。這僅用於測試,不應在生產系統中使用。它已被棄用,您應該預期它會在未來版本中移除。

  • --skip-gtids[=(true|false)]

    命令列格式 --skip-gtids[=true|false]
    類型 布林值
    預設值 false

    請勿將二進制日誌檔中的 GTID 包含在輸出傾印檔中。例如

    mysqlbinlog --skip-gtids binlog.000001 >  /tmp/dump.sql
    mysql -u root -p -e "source /tmp/dump.sql"

    您通常不應在生產環境或復原中使用此選項,除非在明確且罕見的情況下,才會主動不需要 GTID。例如,管理員可能想要將部署中的選定交易(例如資料表定義)複製到另一個不相關的部署,而該部署不會複寫到原始部署或從原始部署複寫。在這種情況下,可以使用 --skip-gtids,讓管理員可以套用交易,就像它們是新的交易一樣,並確保部署保持不相關。不過,只有在包含 GTID 會導致您的使用案例出現已知問題時,您才應該使用此選項。

  • --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}
    已棄用
    類型 列舉
    預設值 OFF
    有效值

    OFF

    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 的未來版本中移除。

  • --start-datetime=datetime

    命令列格式 --start-datetime=datetime
    類型 日期時間

    從時間戳記等於或晚於 datetime 引數的第一個事件開始讀取二進位日誌。datetime 值是相對於您執行 mysqlbinlog 的機器上的本地時區。該值應採用 DATETIMETIMESTAMP 資料類型接受的格式。例如

    mysqlbinlog --start-datetime="2005-12-25 11:25:56" binlog.000003

    此選項對於時間點復原很有用。請參閱第 9.5 節,「時間點 (增量) 復原」

  • --start-position=N, -j N

    命令列格式 --start-position=#
    類型 數值

    從日誌位置 N 開始解碼二進位日誌,包括輸出中從位置 N 或之後開始的任何事件。位置是日誌檔案中的位元組點,而不是事件計數器;它需要指向事件的起始位置,才能產生有用的輸出。此選項適用於命令列上命名的第一個日誌檔案。

    此選項支援的最大值為 18446744073709551616 (264-1),除非也使用 --read-from-remote-server--read-from-remote-source,在這種情況下,最大值為 4294967295。

    此選項對於時間點復原很有用。請參閱第 9.5 節,「時間點 (增量) 復原」

  • --stop-datetime=datetime

    命令列格式 --stop-datetime=datetime

    在時間戳記等於或晚於 datetime 引數的第一個事件停止讀取二進位日誌。有關 datetime 值的資訊,請參閱 --start-datetime 選項的說明。

    此選項對於時間點復原很有用。請參閱第 9.5 節,「時間點 (增量) 復原」

  • --stop-never

    命令列格式 --stop-never
    類型 布林值
    預設值 FALSE

    此選項與 --read-from-remote-server 一起使用。它會告知 mysqlbinlog 保持連線到伺服器。否則,當最後一個日誌檔案從伺服器傳輸後,mysqlbinlog 會退出。--stop-never 隱含 --to-last-log,因此只需在命令列上命名要傳輸的第一個日誌檔案即可。

    --stop-never 通常與 --raw 一起使用來進行即時二進位日誌備份,但也可以在不使用 --raw 的情況下使用,以維持伺服器產生日誌事件的連續文字顯示。

    使用 --stop-never 時,預設情況下,mysqlbinlog 在連線到伺服器時會報告伺服器 ID 為 1。使用 --connection-server-id 來明確指定要報告的替代 ID。它可以用於避免與複本伺服器或其他 mysqlbinlog 程序的 ID 衝突。請參閱第 6.6.9.4 節,「指定 mysqlbinlog 伺服器 ID」

  • --stop-never-slave-server-id=id

    命令列格式 --stop-never-slave-server-id=#
    類型 數值
    預設值 65535
    最小值 1

    此選項已過時;預計會在未來版本中移除。請改用 --connection-server-id 選項,為 mysqlbinlog 指定要報告的伺服器 ID。

  • --stop-position=N

    命令列格式 --stop-position=#
    類型 數值

    在日誌位置 N 停止解碼二進位日誌,並從輸出中排除從位置 N 或之後開始的任何事件。位置是日誌檔案中的位元組點,而不是事件計數器;它需要指向您要包含在輸出中的最後一個事件的起始位置之後的位置。在位置 N 之前開始並在該位置或之後結束的事件是要處理的最後一個事件。此選項適用於命令列上命名的最後一個日誌檔案。

    此選項對於時間點復原很有用。請參閱第 9.5 節,「時間點 (增量) 復原」

  • --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

    命令列格式 --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 通訊協定和密碼」

  • --to-last-log, -t

    命令列格式 --to-last-log

    不要在從 MySQL 伺服器請求的二進制日誌末尾停止,而是繼續列印到最後一個二進制日誌的末尾。如果您將輸出傳送到同一個 MySQL 伺服器,這可能會導致無止盡的迴圈。此選項需要 --read-from-remote-server

  • --user=user_name, -u user_name

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

    連接到遠端伺服器時要使用的 MySQL 帳戶的使用者名稱。

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

  • --verbose, -v

    命令列格式 --verbose

    重建資料列事件並將它們顯示為註解的 SQL 陳述式,並在適用的情況下顯示表格分割區資訊。如果此選項給定兩次(透過傳入 "-vv" 或 "--verbose --verbose"),輸出會包含註解以指示欄位資料類型和一些中繼資料,以及資訊日誌事件,例如資料列查詢日誌事件(如果 binlog_rows_query_log_events 系統變數設定為 TRUE)。

    如需顯示 --base64-output--verbose 對資料列事件輸出的影響的範例,請參閱 章節 6.6.9.2,「mysqlbinlog 資料列事件顯示」

  • --verify-binlog-checksum, -c

    命令列格式 --verify-binlog-checksum

    驗證二進制日誌檔案中的檢查碼。

  • --version, -V

    命令列格式 --version

    顯示版本資訊並結束。

  • --zstd-compression-level=level

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

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

    如需更多資訊,請參閱 章節 6.2.8,「連線壓縮控制」

您可以將 mysqlbinlog 的輸出導向到 mysql 用戶端,以執行二進制日誌中包含的事件。這種技術用於在您有舊備份時從意外結束中恢復(請參閱 第 9.5 節,「時間點(增量)復原」)。例如

mysqlbinlog binlog.000001 | mysql -u root -p

或者

mysqlbinlog binlog.[0-9]* | mysql -u root -p

如果 mysqlbinlog 產生的陳述式可能包含 BLOB 值,當 mysql 處理這些值時,可能會導致問題。在這種情況下,請使用 --binary-mode 選項來調用 mysql

如果您需要先修改陳述式日誌(例如,移除您因某些原因不想執行的陳述式),您也可以將 mysqlbinlog 的輸出重新導向到文字檔。編輯檔案後,透過將其作為輸入傳遞給 mysql 程式來執行其中包含的陳述式

mysqlbinlog binlog.000001 > tmpfile
... edit tmpfile ...
mysql -u root -p < tmpfile

當使用 --start-position 選項調用 mysqlbinlog 時,它只會顯示二進制日誌中偏移量大於或等於給定位置的事件(給定位置必須與一個事件的開始相符)。它還有一些選項可以在看到具有給定日期和時間的事件時停止和啟動。這使您能夠使用 --stop-datetime 選項執行時間點復原(例如,能夠說「將我的資料庫向前回滾到今天上午 10:30 的狀態」)。

處理多個檔案。 如果您有多個二進制日誌要在 MySQL 伺服器上執行,安全的方法是使用與伺服器的單一連線處理所有這些日誌。以下範例示範了可能 不安全 的情況

mysqlbinlog binlog.000001 | mysql -u root -p # DANGER!!
mysqlbinlog binlog.000002 | mysql -u root -p # DANGER!!

如果第一個日誌檔案包含 CREATE TEMPORARY TABLE 陳述式,而第二個日誌包含使用暫存表格的陳述式,則使用與伺服器的多個連線以這種方式處理二進制日誌會導致問題。當第一個 mysql 處理序終止時,伺服器會捨棄暫存表格。當第二個 mysql 處理序嘗試使用該表格時,伺服器會回報「未知表格」。

為避免發生此類問題,請使用 單一 mysql 處理序來執行您要處理的所有二進制日誌的內容。以下是一種執行方式

mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p

另一種方法是將所有日誌寫入單一檔案,然後處理該檔案

mysqlbinlog binlog.000001 >  /tmp/statements.sql
mysqlbinlog binlog.000002 >> /tmp/statements.sql
mysql -u root -p -e "source /tmp/statements.sql"

您也可以使用 shell 管道將多個二進制日誌檔案以串流輸入的方式提供給 mysqlbinlog。壓縮的二進制日誌檔案的封存檔可以解壓縮並直接提供給 mysqlbinlog。在此範例中,binlog-files_1.gz 包含多個要處理的二進制日誌檔案。管道會解壓縮 binlog-files_1.gz 的內容,將二進制日誌檔案以標準輸入的方式傳輸到 mysqlbinlog,並將 mysqlbinlog 的輸出傳輸到 mysql 用戶端以進行執行

gzip -cd binlog-files_1.gz | ./mysqlbinlog - | ./mysql -uroot  -p

您可以指定多個封存檔,例如

gzip -cd binlog-files_1.gz binlog-files_2.gz | ./mysqlbinlog - | ./mysql -uroot  -p

對於串流輸入,請勿使用 --stop-position,因為 mysqlbinlog 無法識別要套用此選項的最後一個日誌檔案。

LOAD DATA 作業。 mysqlbinlog 可以產生重現 LOAD DATA 作業而無需原始資料檔案的輸出。mysqlbinlog 會將資料複製到暫存檔案,並寫入一個參考該檔案的 LOAD DATA LOCAL 陳述式。寫入這些檔案的目錄的預設位置是系統特定的。若要明確指定目錄,請使用 --local-load 選項。

由於 mysqlbinlog 會將 LOAD DATA 陳述式轉換為 LOAD DATA LOCAL 陳述式(也就是說,它會新增 LOCAL),因此您用來處理陳述式的用戶端和伺服器都必須設定為啟用 LOCAL 功能。請參閱 第 8.1.6 節,「LOAD DATA LOCAL 的安全性考量」

警告

LOAD DATA LOCAL 陳述式建立的暫存檔案 不會 自動刪除,因為在您實際執行這些陳述式之前都需要這些檔案。您應該在不再需要陳述式日誌後自行刪除暫存檔案。這些檔案可在暫存檔案目錄中找到,且名稱類似於 original_file_name-#-#