遠程獲取并解析PolarDB MySQL版Binlog日志
本文介紹如何遠程獲取PolarDB MySQL版Binlog日志,并通過mysqlbinlog工具查看并解析Binlog日志。
Binlog獲取策略
連接方式 | Binlog獲取策略 |
| 均從主節(jié)點獲取。 說明 如何設(shè)置集群連接地址,請參見配置數(shù)據(jù)庫代理。 |
僅包含只讀節(jié)點的自定義集群地址 | 從任意只讀節(jié)點獲取。 說明 集群版本需為以下版本之一:
否則,將返回 關(guān)于如何查看集群版本和升級集群版本,請參見版本管理。 |
遠程獲取Binlog日志
為PolarDB MySQL版集群開啟Binlog,詳細操作步驟,請參見開啟Binlog。
說明您需要先為集群開啟Binlog才能查看并獲取Binlog日志,否則將出現(xiàn)
You are not using binary logging
錯誤提示。在本地服務器上安裝MySQL。
通過MySQL客戶端連接PolarDB集群,詳細操作步驟,請參見連接數(shù)據(jù)庫集群。本文以Linux系統(tǒng)為例。
在已連接PolarDB集群的客戶端中執(zhí)行如下命令查看目標集群的Binlog文件列表:
show binary logs;
返回結(jié)果如下:
+------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000005 | 2639 | +------------------+-----------+ 1 row in set (0.00 sec)
在客戶端執(zhí)行如下命令,遠程獲取Binlog日志并保存至本地。
本文中以Linux系統(tǒng)為例,在執(zhí)行如下語句前,需先執(zhí)行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
參數(shù)
說明
示例值
-u
PolarDB MySQL版集群中的賬號名稱。如何創(chuàng)建賬號,請參見創(chuàng)建和管理數(shù)據(jù)庫賬號。
test_api
-p
以上賬號的密碼。如果此處留空,則在執(zhí)行此命令后會被要求輸入。
TestPwd123
-h
PolarDB MySQL版的私網(wǎng)地址或公網(wǎng)地址。
說明若您的PolarDB MySQL版集群連接地址使用的是默認的端口號,端口號可省略不寫,否則需要在連接地址后加上端口號。
若您訪問的PolarDB MySQL版集群位于相同的地域且使用相同的網(wǎng)絡(luò)類型,請選擇私有網(wǎng)絡(luò)地址進行連接。例如,所有位于華東1(杭州)的專有網(wǎng)絡(luò)集群均建議使用私有網(wǎng)絡(luò)地址,這樣可以確保安全高效的訪問體驗。
其他情況只能使用公網(wǎng)地址。如何申請公網(wǎng)連接地址,請參見管理連接地址。
test-polardb.rwlb.rds.aliyuncs.com
--raw
表示將獲取到的Binlog文件按數(shù)據(jù)原有格式打印,而不會展示解析后的數(shù)據(jù)。
--raw
mysql-bin.******
通過
show binary logs;
命令獲取的目標Binlog文件的名字,即Log_name
。mysql-bin.000005
使用mysqlbinlog工具查看、解析Binlog日志
執(zhí)行如下命令,通過mysqlbinlog工具查看Binlog日志文件內(nèi)容:
mysqlbinlog -vv --base64-output=decode-rows mysql-bin.****** | more
說明-vv
:查看具體SQL語句及備注。--base64-output=decode-rows
:解析Binlog日志文件。
具體的Binlog日志內(nèi)容如下圖中紅框所示部分:
解析Binlog日志
關(guān)于如何解析Binlog日志,請參見解析Binlong日志。
常見問題
Q:執(zhí)行
show binary logs;
后,為什么會提示You are not using binary logging
錯誤信息?A:PolarDB集群默認關(guān)閉Binlog參數(shù),請確保您已開啟Binlog。
說明開啟或關(guān)閉Binlog后,集群會自動重啟使參數(shù)新配置生效。建議您在業(yè)務低谷期進行操作并確保應用程序具備重連機制。
Q:為什么遠程獲取Binlog日志失敗,并出現(xiàn)如下錯誤提示?
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工具版本過低時,可能會出現(xiàn)以上錯誤提示中的任意一種。請檢查您使用的mysqlbinlog工具版本,建議您升級到較高版本的mysqlbinlog工具再嘗試遠程獲取Binlog日志。例如使用Ver 3.3版本出現(xiàn)如上錯誤提示,您可以將mysqlbinlog工具升級至Ver 3.4版本進行查看。
Q:為什么我看到的Binlog日志內(nèi)容未經(jīng)過解析?
A:若在查看Binlog日志時,未使用
--base64-output=decode-rows
參數(shù),導出的Binlog日志將會顯示未經(jīng)解析的日志(如下圖所示)。請確保在使用mysqlbinlog工具查看Binlog日志時,已使用--base64-output=decode-rows
參數(shù)。Q:從只讀節(jié)點獲取Binlog時,為什么出現(xiàn)
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或以上
支持從只讀節(jié)點獲取Binlog。如何查看集群版本和升級集群版本,請參見版本管理。
Q:從只讀節(jié)點獲取的Binlog時,為什么有時候結(jié)果會與從主節(jié)點上獲取的不一致?
A:PolarDB支持在主節(jié)點和只讀節(jié)點間共享Binlog,當主節(jié)點上的Binlog源信息同步到只讀節(jié)點后,才能從只讀節(jié)點獲取Binlog。當出現(xiàn)同步延遲(源信息數(shù)據(jù)量很小,延遲一般不會很大)時,只讀節(jié)點可能會讀不到主節(jié)點上新寫入的Binlog。
Q:為什么在超出保存時長參數(shù)(binlog_expire_logs_seconds)設(shè)置的時間后,Binlog并沒有被刪除?
A:若只讀節(jié)點上有線程正在獲取Binlog,該Binlog不會被立即刪除。當主節(jié)點寫入新的Binlog后,會再次檢查是否有超時的Binlog,若此時該Binlog未參與任何只讀節(jié)點上的線程,即被刪除。