本文介紹如何遠程擷取PolarDB MySQL版Binlog日誌,並通過mysqlbinlog工具查看並解析Binlog日誌。
Binlog擷取策略
串連方式 | Binlog擷取策略 |
| 均從主節點擷取。 說明 如何設定叢集串連地址,請參見設定資料庫代理。 |
僅包含唯讀節點的自訂叢集地址 | 從任意唯讀節點擷取。 說明 叢集版本需為以下版本之一:
否則,將返回 關於如何查看叢集版本和升級叢集版本,請參見小版本升級。 |
遠程擷取Binlog日誌
為PolarDB MySQL版叢集開啟Binlog,詳細操作步驟,請參見開啟Binlog。
說明您需要先為叢集開啟Binlog才能查看並擷取Binlog日誌,否則將出現
You are not using binary logging
錯誤提示。在本機伺服器上安裝MySQL。
通過MySQL用戶端串連PolarDB叢集,詳細操作步驟,請參見串連資料庫叢集。本文以Linux系統為例。
在已串連PolarDB叢集的用戶端中執行如下命令查看目的地組群的Binlog檔案清單:
show binary logs;
返回結果如下:
+------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000005 | 2639 | +------------------+-----------+ 1 row in set (0.00 sec)
在用戶端執行如下命令,遠程擷取Binlog日誌並儲存至本地。
本文中以Linux系統為例,在執行如下語句前,需先執行exit退出MySQL後,才能遠程擷取Binlog日誌並儲存至本地。
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日誌內容如下圖中紅框所示部分:
解析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
參數。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未參與任何唯讀節點上的線程,即被刪除。