伺服器的二進制日誌包含檔案,其中包含描述資料庫內容修改的「事件」。伺服器以二進制格式寫入這些檔案。若要以文字格式顯示其內容,請使用 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 統計資料 |
| --defaults-extra-file | 除了通常的選項檔案外,還讀取指定的選項檔案 |
| --defaults-file | 僅讀取指定的選項檔案 |
| --defaults-group-suffix | 選項群組後綴值 |
| --disable-log-bin | 停用二進制日誌記錄 |
| --force-if-open | 即使已開啟或未正確關閉,仍讀取二進制日誌檔案 |
| --force-read | 如果 mysqlbinlog 讀取到無法識別的二進制日誌事件,則會列印警告 |
| --get-server-public-key | 從伺服器請求 RSA 公開金鑰 |
| --help | 顯示說明訊息並結束 |
| --hexdump | 在註解中顯示日誌的十六進位傾印 |
| --host | MySQL 伺服器所在的伺服器 |
| --idempotent | 導致伺服器僅從此工作階段處理二進制日誌更新時使用冪等模式 |
| --local-load | 在指定目錄中準備 LOAD DATA 的本機暫存檔案 |
| --login-path | 從 .mylogin.cnf 讀取登入路徑選項 |
| --no-defaults | 不讀取任何選項檔案 |
| --no-login-paths | 不從登入路徑檔案讀取登入路徑 |
| --offset | 跳過日誌中的前 N 個項目 |
| --password | 連線到伺服器時使用的密碼 |
| --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 | 僅顯示日誌中包含的陳述式 |
| --socket | 要使用的 Unix Socket 檔案或 Windows 具名管道 |
| --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 | 如果工作階段重複使用失敗,是否要建立連線 |
| --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類型 字串 預設值 AUTO有效值 AUTONEVERDECODE-ROWS此選項決定何時應使用
BINLOG語句將事件顯示為 base-64 編碼字串。此選項具有以下允許的值 (不區分大小寫)AUTO("自動") 或UNSPEC("未指定") 在必要時自動顯示BINLOG語句 (也就是說,用於格式描述事件和資料列事件)。如果沒有給定--base64-output選項,其效果與--base64-output=AUTO相同。注意如果您打算使用 mysqlbinlog 的輸出來重新執行二進位日誌檔的內容,則自動顯示
BINLOG是唯一安全的行為。其他選項值僅用於偵錯或測試目的,因為它們可能會產生不包含所有可執行格式事件的輸出。NEVER會導致不顯示BINLOG語句。如果發現必須使用BINLOG顯示的資料列事件,mysqlbinlog 會以錯誤結束。DECODE-ROWS指定要讓 mysqlbinlog 將資料列事件解碼並顯示為註解的 SQL 語句,同時也指定--verbose選項。與NEVER一樣,DECODE-ROWS會抑制BINLOG語句的顯示,但與NEVER不同,如果發現資料列事件,它不會以錯誤結束。
如需顯示
--base64-output和--verbose對資料列事件輸出影響的範例,請參閱 第 6.6.9.2 節,「mysqlbinlog 資料列事件顯示」。 -
命令列格式 --bind-address=ip_address在具有多個網路介面的電腦上,使用此選項選取要用於連線到 MySQL 伺服器的介面。
-
命令列格式 --binlog-row-event-max-size=#類型 數值 預設值 4294967040最小值 256最大值 18446744073709547520以位元組為單位指定基於資料列的二進位日誌事件的最大大小。如果可能,資料列會分組到小於此大小的事件中。該值應為 256 的倍數。預設值為 4GB。
-
命令列格式 --character-sets-dir=dir_name類型 目錄名稱 安裝字元集的目錄。請參閱 第 12.15 節,「字元集組態」。
-
命令列格式 --compress[={OFF|ON}]已棄用 是 類型 布林值 預設值 OFF如果可能,壓縮用戶端和伺服器之間傳送的所有資訊。請參閱 第 6.2.8 節,「連線壓縮控制」。
此選項已棄用。預計在未來版本的 MySQL 中將會移除它。請參閱 設定舊版連線壓縮。
--compression-algorithms=value命令列格式 --compression-algorithms=value類型 設定 預設值 uncompressed有效值 zlibzstduncompressed與伺服器連線允許的壓縮演算法。可用的演算法與
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-ddb_name命令列格式 --database=db_name類型 字串 此選項會導致 mysqlbinlog 從二進位日誌 (僅限本機日誌) 輸出當
db_name被USE選為預設資料庫時發生的項目。--database選項的 mysqlbinlog 與--binlog-do-db選項的 mysqld 類似,但只能用於指定一個資料庫。如果多次給定--database,則僅使用最後一個執行個體。此選項的效果取決於使用陳述式式或資料列式日誌格式,其方式與
--binlog-do-db的效果取決於是否使用陳述式式或資料列式日誌相同。陳述式式日誌。
--database選項的運作方式如下當
db_name是預設資料庫時,無論陳述式是否修改db_name或不同資料庫中的資料表,都會輸出。除非選取
db_name作為預設資料庫,否則不會輸出陳述式,即使它們修改db_name中的資料表也是如此。CREATE DATABASE、ALTER DATABASE和DROP 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,且您希望可以使用 mysqlbinlog 搭配--database選項,則您必須確保修改的資料表位於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_named:t:o,/tmp/mysqlbinlog.trace。只有在使用
WITH_DEBUG建置 MySQL 時,才能使用此選項。Oracle 提供的 MySQL 發行版二進制檔案並非使用此選項建置。-
命令列格式 --debug-check類型 布林值 預設值 FALSE在程式結束時列印一些偵錯資訊。
只有在使用
WITH_DEBUG建置 MySQL 時,才能使用此選項。Oracle 提供的 MySQL 發行版二進制檔案並非使用此選項建置。 -
命令列格式 --debug-info類型 布林值 預設值 FALSE在程式結束時列印偵錯資訊以及記憶體和 CPU 使用率統計資料。
只有在使用
WITH_DEBUG建置 MySQL 時,才能使用此選項。Oracle 提供的 MySQL 發行版二進制檔案並非使用此選項建置。 -
命令列格式 --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類型 檔案名稱 僅使用指定的選項檔案。如果檔案不存在或無法存取,則會發生錯誤。如果
file_name不是絕對路徑名稱,則會將其解譯為相對於目前目錄。例外情況:即使使用
--defaults-file,用戶端程式也會讀取.mylogin.cnf。如需此選項和其他選項檔案選項的相關資訊,請參閱 第 6.2.2.3 節,「影響選項檔案處理的命令列選項」。
-
命令列格式 --defaults-group-suffix=str類型 字串 不僅讀取一般的選項群組,還讀取具有一般名稱和
str後綴的群組。例如,mysqlbinlog 通常會讀取[client]和[mysqlbinlog]群組。如果此選項指定為--defaults-group-suffix=_other,mysqlbinlog 也會讀取[client_other]和[mysqlbinlog_other]群組。如需此選項和其他選項檔案選項的相關資訊,請參閱 第 6.2.2.3 節,「影響選項檔案處理的命令列選項」。
-
命令列格式 --disable-log-bin停用二進制日誌記錄。如果您使用
--to-last-log選項,並將輸出傳送到相同的 MySQL 伺服器,這對於避免無止盡的迴圈很有用。在意外結束後還原時,此選項也很有用,可避免您已記錄的陳述式重複。此選項會導致 mysqlbinlog 在其輸出中包含
SET sql_log_bin = 0陳述式,以停用其餘輸出的二進制日誌記錄。操作sql_log_bin系統變數的階段作業值是受限制的操作,因此此選項需要您擁有足夠的權限來設定受限制的階段作業變數。請參閱 第 7.1.9.1 節,「系統變數權限」。 -
命令列格式 --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類型 布林值 從伺服器請求 RSA 金鑰對密碼交換所需的公開金鑰。此選項適用於使用
caching_sha2_password身份驗證外掛程式進行驗證的用戶端。對於該外掛程式,除非請求,否則伺服器不會傳送公開金鑰。此選項會被使用該外掛程式進行驗證的帳戶忽略。如果未使用基於 RSA 的密碼交換,也會忽略此選項,例如當用戶端使用安全連線連線至伺服器時。如果指定了
--server-public-key-path=,且指定了有效的公開金鑰檔案,則會優先於file_name--get-server-public-key。如需
caching_sha2_password外掛程式的相關資訊,請參閱 第 8.4.1.1 節,「快取 SHA-2 可插拔式驗證」。 --hexdump,-H命令列格式 --hexdump在註解中顯示日誌的十六進位傾印,如 第 6.6.9.1 節,「mysqlbinlog 十六進位傾印格式」中所述。十六進位輸出對於複寫偵錯很有幫助。
--host=,host_name-hhost_name命令列格式 --host=host_name類型 字串 預設值 localhost從指定主機上的 MySQL 伺服器取得二進制日誌。
-
命令列格式 --idempotent類型 布林值 預設值 true告知 MySQL 伺服器在處理更新時使用冪等模式;這會抑制伺服器在目前階段作業中處理更新時遇到的任何重複金鑰或找不到金鑰的錯誤。每當需要或必須將一個或多個二進制日誌重新執行到可能不包含日誌所參照之所有資料的 MySQL 伺服器時,此選項可能會很有用。
此選項的影響範圍僅包含目前的 mysqlbinlog 用戶端和階段作業。
-
命令列格式 --include-gtids=gtid_set類型 字串 預設值 僅顯示在
gtid_set中列出的群組。 --local-load=,dir_name-ldir_name命令列格式 --local-load=dir_name類型 目錄名稱 對於對應於
LOAD DATA語句的資料載入操作,mysqlbinlog 會從二進位日誌事件中提取檔案,將它們作為臨時檔案寫入本地檔案系統,並寫入LOAD DATA LOCAL語句以使檔案被載入。預設情況下,mysqlbinlog 將這些臨時檔案寫入特定於作業系統的目錄。--local-load選項可用於明確指定 mysqlbinlog 應準備本地臨時檔案的目錄。由於其他程序可以將檔案寫入預設的系統特定目錄,因此建議指定
--local-load選項給 mysqlbinlog,以指定資料檔案的不同目錄,然後在處理 mysqlbinlog 的輸出時,透過指定--load-data-local-dir選項給 mysql 來指定相同的目錄。例如mysqlbinlog --local-load=/my/local/data ... | mysql --load-data-local-dir=/my/local/data ...重要事項這些臨時檔案不會由 mysqlbinlog 或任何其他 MySQL 程式自動移除。
-
命令列格式 --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 節,「影響選項檔案處理的命令列選項」。
-
命令列格式 --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-oN命令列格式 --offset=#類型 數值 略過日誌中的前
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類型 目錄名稱 尋找外掛程式的目錄。如果使用
--default-auth選項指定驗證外掛程式,但 mysqlbinlog 找不到它,請指定此選項。請參閱 第 8.2.17 節,「可插拔驗證」。 --port=,port_num-Pport_num命令列格式 --port=port_num類型 數值 預設值 3306用於連線至遠端伺服器的 TCP/IP 連接埠號碼。
-
命令列格式 --print-defaults列印程式名稱以及它從選項檔案中取得的所有選項。
如需此選項和其他選項檔案選項的相關資訊,請參閱 第 6.2.2.3 節,「影響選項檔案處理的命令列選項」。
-
命令列格式 --print-table-metadata從二進位日誌列印表格相關的中繼資料。使用
binlog-row-metadata設定二進位日誌記錄的表格相關中繼資料量。 --protocol={TCP|SOCKET|PIPE|MEMORY}命令列格式 --protocol=type類型 字串 預設值 [請參閱文字]有效值 TCPSOCKETPIPEMEMORY用於連線至伺服器的傳輸協定。當其他連線參數通常導致使用您不想要的協定時,此選項很有用。有關允許值的詳細資訊,請參閱 第 6.2.7 節,「連線傳輸協定」。
-
命令列格式 --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-GTIDS或BINLOG-DUMP-GTIDS,分別使用COM_BINLOG_DUMP或COM_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權限。--result-file=,name-rname命令列格式 --result-file=name如果沒有
--raw選項,此選項表示 mysqlbinlog 寫入文字輸出的檔案。使用--raw時,mysqlbinlog 會為從伺服器傳輸的每個日誌檔案寫入一個二進位輸出檔案,預設情況下會使用與原始日誌檔案相同的名稱寫入目前目錄中。在這種情況下,--result-file選項值會被視為修改輸出檔案名稱的前綴。-
命令列格式 --require-row-format類型 布林值 預設值 false要求事件採用基於列的二進位日誌格式。此選項會強制 mysqlbinlog 輸出使用基於列的複寫事件。使用此選項產生的事件串流將被使用
CHANGE REPLICATION SOURCE TO陳述式的REQUIRE_ROW_FORMAT選項保護的複寫通道接受。binlog_format=ROW必須在寫入二進位日誌的伺服器上設定。當您指定此選項時,如果 mysqlbinlog 遇到REQUIRE_ROW_FORMAT限制下不允許的任何事件,包括LOAD DATA INFILE指令、建立或刪除暫存表格、INTVAR、RAND或USER_VAR事件,以及 DML 交易中非基於列的事件,則會停止並顯示錯誤訊息。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啟動,則對資料庫mydb和yourdb中任何表格的所有更新都會包含在輸出中。另一方面,如果它以--rewrite-db='mydb->yourdb' --database=mydb啟動,則 mysqlbinlog 完全不會輸出任何陳述式:由於在套用--database選項之前,對mydb的所有更新都會先重新寫為對yourdb的更新,因此沒有任何更新符合--database=mydb。-
命令列格式 --server-id=id類型 數值 僅顯示具有給定伺服器 ID 的伺服器所建立的事件。
-
命令列格式 --server-id-bits=#類型 數值 預設值 32最小值 7最大值 32僅使用
server_id的前N個位元來識別伺服器。如果二進位日誌是由設定 server-id-bits 小於 32 且使用者資料儲存在最高有效位的 mysqld 所寫入,則以--server-id-bits設定為 32 執行 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_password和caching_sha2_password外掛程式的資訊,請參閱第 8.4.1.2 節,「SHA-256 可插拔驗證」 和 第 8.4.1.1 節,「快取 SHA-2 可插拔驗證」。-
命令列格式 --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]類型 布林值 預設值 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-Spath命令列格式 --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}已棄用 是 類型 列舉 預設值 OFF有效值 OFFONSTRICT控制是否在客戶端啟用 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 中將會移除。
-
命令列格式 --start-datetime=datetime類型 Datetime 從時間戳記等於或晚於
datetime引數的第一個事件開始讀取二進位日誌。datetime值是相對於您執行 mysqlbinlog 的機器上的本機時區。該值應採用DATETIME或TIMESTAMP資料類型可接受的格式。例如:mysqlbinlog --start-datetime="2005-12-25 11:25:56" binlog.000003此選項對於時間點復原很有用。請參閱第 9.5 節,「時間點(增量)復原」。
--start-position=、N-jN命令列格式 --start-position=#類型 數值 從日誌位置
N開始解碼二進位日誌,包括輸出中任何從位置N或之後開始的事件。位置是日誌檔案中的位元組點,而不是事件計數器;它需要指向事件的起始位置,才能產生有用的輸出。此選項適用於命令列上命名的第一個日誌檔案。此選項支援的最大值為 18446744073709551616 (264-1),除非同時使用
--read-from-remote-server或--read-from-remote-source,在這種情況下,最大值為 4294967295。此選項對於時間點復原很有用。請參閱第 9.5 節,「時間點(增量)復原」。
-
命令列格式 --stop-datetime=datetime在時間戳記等於或晚於
datetime引數的第一個事件停止讀取二進位日誌。有關datetime值的資訊,請參閱--start-datetime選項的描述。此選項對於時間點復原很有用。請參閱第 9.5 節,「時間點(增量)復原」。
-
命令列格式 --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停止解碼二進位日誌,從輸出中排除任何從位置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選項將名稱傳遞給libmysqlclientC API 程式庫。伺服器名稱不區分大小寫。若要顯示用戶端為目前工作階段指定的伺服器名稱(如果有的話),請檢查Tls_sni_server_name狀態變數。伺服器名稱指示 (SNI) 是 TLS 協定的延伸(OpenSSL 必須使用 TLS 延伸編譯此選項才能運作)。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 協定和密碼」。
-
命令列格式 --to-last-log不要在 MySQL 伺服器中請求的二進位日誌結尾處停止,而是繼續列印直到最後一個二進位日誌的結尾。如果將輸出傳送到相同的 MySQL 伺服器,這可能會導致無限迴圈。此選項需要
--read-from-remote-server。 --user=、user_name-uuser_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驗證二進位日誌檔案中的檢查總和。
--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-#-#。