全部產品
Search
文件中心

PolarDB:遠程擷取並解析PolarDB MySQL版Binlog日誌

更新時間:Jul 06, 2024

本文介紹如何遠程擷取PolarDB MySQL版Binlog日誌,並通過mysqlbinlog工具查看並解析Binlog日誌。

Binlog擷取策略

串連方式

Binlog擷取策略

  • 主地址

  • 預設叢集地址

  • 包含主節點的自訂叢集地址

均從主節點擷取。

說明

如何設定叢集串連地址,請參見設定資料庫代理

僅包含唯讀節點的自訂叢集地址

從任意唯讀節點擷取。

說明

叢集版本需為以下版本之一:

  • PolarDB MySQL版8.0版本且Revision version為8.0.1.1.12或以上

  • PolarDB MySQL版5.7版本且Revision version為5.7.1.0.12或以上

否則,將返回Only allow to dump binary log on primary instance報錯。

關於如何查看叢集版本和升級叢集版本,請參見小版本升級

遠程擷取Binlog日誌

  1. PolarDB MySQL版叢集開啟Binlog,詳細操作步驟,請參見開啟Binlog

    說明

    您需要先為叢集開啟Binlog才能查看並擷取Binlog日誌,否則將出現You are not using binary logging錯誤提示。

  2. 在本機伺服器上安裝MySQL。

  3. 通過MySQL用戶端串連PolarDB叢集,詳細操作步驟,請參見串連資料庫叢集。本文以Linux系統為例。1

  4. 在已串連PolarDB叢集的用戶端中執行如下命令查看目的地組群的Binlog檔案清單:

    show binary logs;

    返回結果如下:

    +------------------+-----------+
    | Log_name         | File_size |
    +------------------+-----------+
    | mysql-bin.000005 |      2639 |
    +------------------+-----------+
    1 row in set (0.00 sec)
  5. 在用戶端執行如下命令,遠程擷取Binlog日誌並儲存至本地。

    本文中以Linux系統為例,在執行如下語句前,需先執行exit退出MySQL後,才能遠程擷取Binlog日誌並儲存至本地。2

    mysqlbinlog -u<使用者名稱> -p<密碼> -h<串連地址> --read-from-remote-server --raw mysql-bin.******

    樣本:

    mysqlbinlog -utest_api -p -htest-polardb.rwlb.rds.aliyuncs.com --read-from-remote-server --raw mysql-bin.000005

    參數

    說明

    樣本值

    -u

    PolarDB MySQL版叢集中的帳號名稱。如何建立帳號,請參見建立和管理資料庫帳號

    test_api

    -p

    以上帳號的密碼。如果此處留空,則在執行此命令後會被要求輸入。

    TestPwd123

    -h

    PolarDB MySQL版叢集的公網串連地址。

    說明
    • 若您的PolarDB MySQL版叢集串連地址使用的是預設的連接埠號碼3306,連接埠號碼可省略不寫,否則需要在串連地址後加上連接埠號碼。

    • 當前僅支援通過主地址或叢集地址(包括預設叢集地址和自訂叢集地址)的公網串連地址遠程擷取Binlog。如何申請公網串連地址,請參見管理串連地址

    test-polardb.rwlb.rds.aliyuncs.com

    --raw

    表示將擷取到的Binlog檔案按資料原有格式列印,而不會展示解析後的資料。

    --raw

    mysql-bin.******

    通過show binary logs;命令擷取的目標Binlog檔案的名字,即Log_name

    mysql-bin.000005

使用mysqlbinlog工具查看、解析Binlog日誌

  • 執行如下命令,通過mysqlbinlog工具查看Binlog記錄檔內容:

    mysqlbinlog -vv --base64-output=decode-rows mysql-bin.****** | more
    說明
    • -vv:查看具體SQL語句及備忘。

    • --base64-output=decode-rows:解析Binlog記錄檔。

    具體的Binlog日誌內容如下圖中紅框所示部分:

    3

  • 解析Binlog日誌

    關於如何解析Binlog日誌,請參見解析Binlong日誌

常見問題

  • Q:執行show binary logs;後,為什麼會提示You are not using binary logging錯誤資訊?

    A:PolarDB叢集預設關閉Binlog參數,請確保您已開啟Binlog

    說明

    開啟或關閉Binlog後,叢集會自動重啟使參數新配置生效。建議您在業務低穀期進行操作並確保應用程式具備重連機制。

  • Q:為什麼遠程擷取Binlog日誌失敗,並出現如下錯誤提示?

    ERROR: Error in Log_event::read_log_event(): 'Sanity check failed', data_len: 151, event_type: 35
    ERROR: Could not read entry at offset 120: Error in log format or read error.
    ERROR: Goterrorreadingpacketfromserver: 'Slave can not handle replication events with the checksum that master is configured to log; 

    A:當您使用的mysqlbinlog工具版本過低時,可能會出現以上錯誤提示中的任意一種。請檢查您使用的mysqlbinlog工具版本,建議您升級到較高版本的mysqlbinlog工具再嘗試遠程擷取Binlog日誌。例如使用Ver 3.3版本出現如上錯誤提示,您可以將mysqlbinlog工具升級至Ver 3.4版本進行查看。

  • Q:為什麼我看到的Binlog日誌內容未經過解析?

    A:若在查看Binlog日誌時,未使用--base64-output=decode-rows參數,匯出的Binlog日誌將會顯示未經解析的日誌(如下圖所示)。請確保在使用mysqlbinlog工具查看Binlog日誌時,已使用--base64-output=decode-rows參數。

    3

  • Q:從唯讀節點擷取Binlog時,為什麼出現Only allow to dump binary log on primary instance錯誤提示?

    A:當叢集版本為以下版本之一時:

    • PolarDB MySQL版8.0版本且Revision version為8.0.1.1.12或以上

    • PolarDB MySQL版5.7版本且Revision version為5.7.1.0.12或以上

    支援從唯讀節點擷取Binlog。如何查看叢集版本和升級叢集版本,請參見小版本升級

  • Q:從唯讀節點擷取的Binlog時,為什麼有時候結果會與從主節點上擷取的不一致?

    A:PolarDB支援在主節點和唯讀節點間共用Binlog,當主節點上的Binlog源資訊同步到唯讀節點後,才能從唯讀節點擷取Binlog。當出現同步延遲(源資訊資料量很小,延遲一般不會很大)時,唯讀節點可能會讀不到主節點上新寫入的Binlog。

  • Q:為什麼在超出儲存時間長度參數(binlog_expire_logs_seconds)設定的時間後,Binlog並沒有被刪除?

    A:若唯讀節點上有線程正在擷取Binlog,該Binlog不會被立即刪除。當主節點寫入新的Binlog後,會再次檢查是否有逾時的Binlog,若此時該Binlog未參與任何唯讀節點上的線程,即被刪除。