本文介紹如何為PolarDB集群開啟Binlog功能。
背景信息
PolarDB是一款完全兼容MySQL的云原生數據庫,默認使用了更高級別的物理日志代替Binlog,但為了更好地與MySQL生態融合,PolarDB支持手動開啟Binlog,開啟Binlog后您就可以連接ElasticSearch、AnalyticDB等數據產品,也可以搭建PolarDB到RDS、RDS到PolarDB或PolarDB之間的數據實時同步。
使用限制
若PolarDB集群創建于2019年04月05日之后,您可以直接開啟Binlog;若PolarDB集群創建于2019年04月05日之前,請您先將集群小版本升級至最新版本再開啟Binlog,關于如何升級小版本,請參見小版本升級。
收費說明
Binlog的空間屬于集群存儲空間的一部分,需要收取存儲費用,詳情請參見存儲空間計費規則。
注意事項
Binlog功能默認關閉,開啟Binlog后集群會自動重啟,通常情況下,重啟任務會在5分鐘之內完成。重啟時服務閃斷時間在40秒左右,具體時間與數據量和表數量相關,建議您在業務低谷期進行操作并確保應用程序具備重連機制。
開啟Binlog后會導致寫性能下降,讀性能不受影響。一般情況下,開啟Binlog后對性能影響不超過10%;極端壓力場景,性能影響可能達到40%。詳情請參見常見問題。
拉取、訂閱或同步Binlog(例如使用DTS等工具)時,建議使用PolarDB的主地址,因為直接指向生成Binlog的主節點,具有更好的兼容性和穩定性。關于如何查看主地址,請參見查看連接地址和端口。
開啟Binlog后,數據庫提交超大事務時,會阻塞其他事務的提交,并可能會影響集群的重啟和變配時長。
本文介紹的loose_polar_log_bin參數為全局(Global)級別參數。若需要使用會話(Session)級別的Binlog功能,需要開啟sql_log_bin參數。
說明sql_log_bin參數用于控制是否開啟會話級別的Binlog。默認情況下,該參數處于關閉狀態。如需開啟,請前往配額中心,在配額名稱polardb sql_log_bin參數權限的操作列,單擊申請進行開啟。
如果使用DTS從RDS遷移到PolarDB,Binlog會自動開啟。
開啟Binlog
為存量集群開啟Binlog
開啟 Binlog 后集群會自動重啟,重啟任務會在 5 分鐘之內完成。重啟時服務閃斷時間在 40 秒左右,具體時間與數據量和表數量相關,建議您在業務低谷期進行操作并確保應用程序具備重連機制。
登錄PolarDB控制臺。
在控制臺左上角,選擇集群所在地域。
找到目標集群,單擊集群ID。
您可以通過以下兩種方式中的任意一種來開啟Binlog:
方式一:
進入集群的Binlog管理頁面。
單擊立即開啟按鈕。
在開啟Binlog對話框中,選擇生效方式為立即生效或定時生效。
若選擇定時生效,請指定具體的生效時間。
單擊確定。
方式二:通過設置參數loose_polar_log_bin的值來開啟Binlog。
在左側導航欄中選擇
。找到目標參數loose_polar_log_bin,修改參數值。具體操作請參見修改參數值。
說明若您的PolarDB MySQL版集群版本為MySQL 5.6,當前值修改為ON_WITH_GTID;
若您的PolarDB MySQL版集群版本為MySQL 5.7或MySQL 8.0,當前值修改為ON。
新購集群時開啟Binlog
Binlog文件保存時長
保存策略
Binlog文件有如下兩種保存策略:
開啟Binlog后,文件默認保存3天,超過3天的Binlog文件會被自動刪除。
說明在2023年11月23日前購買的PolarDB MySQL版集群,其Binlog文件默認保存兩周(14天)。
在2024年1月17日前購買的PolarDB MySQL版集群,其Binlog文件默認保存一周(7天)。
關閉Binlog后,已有的Binlog文件會一直保留,不會自動刪除。
修改保存時長
修改Binlog保存時長不會造成連接閃斷,也不需要重啟集群。
但如果修改保存時長導致大量Binlog文件需要被清除(如10 TB),則在清除時可能會造成短時間的數據庫寫入異常。因此,在Binlog文件較大的情況下,建議在業務低峰期進行操作,并分多次縮短Binlog的保存時長,每次清除一部分Binlog數據。
若您的集群已開啟Binlog,您可以通過如下兩種方式修改Binlog文件保存時長:
若集群版本為PolarDB MySQL版5.6,您可以通過修改loose_expire_logs_hours(取值范圍為0~2376,單位為小時,默認值為72)的參數值來設置Binlog的保存時長。0表示不自動刪除Binlog文件。
若集群版本為PolarDB MySQL版5.7或8.0,您可以通過修改binlog_expire_logs_seconds(取值范圍為0~4294967295,單位為秒,默認值為259200)的參數值來設置Binlog的保存時長。0表示不自動刪除Binlog文件。
說明通過修改這兩個參數的參數值來設置Binlog的保存時長后,集群中歷史Binlog文件不會被立即自動清除。此時若您需要清除歷史Binlog文件,可以通過如下三種方法之一:
當集群中最后一個Binlog文件達到
max_binlog_size
,切換到新的Binlog文件后,這些歷史Binlog文件將會被自動清除。使用高權限賬號執行flush binary logs命令可以立即觸發Binlog文件切換并清除過期的Binlog文件。
您也可重啟集群。集群重啟后將自動清除歷史Binlog文件。
若您的集群未開啟Binlog,此時如需刪除Binlog文件,您可以重新打開Binlog,將上述Binlog的保存時長參數(loose_expire_logs_hours或binlog_expire_logs_seconds)設置為一個較小的值,等文件超過保存時長自動刪除后再關閉Binlog。
獲取并查看Binlog日志
您可以通過mysqlbinlog工具查看并解析Binlog日志,詳情請參見遠程獲取并解析PolarDB MySQL版Binlog日志。
常見問題
Q:Binlog文件能保存多久?
A:
若您的集群開啟了Binlog,Binlog文件默認保存3天,超過3天的Binlog文件會被自動刪除。
說明在2023年11月23日前購買的PolarDB MySQL版集群,其Binlog文件默認保存兩周(14天)。
在2024年1月17日前購買的PolarDB MySQL版集群,其Binlog文件默認保存一周(7天)。
若您的集群關閉了Binlog,已有的Binlog文件會一直保留,不會自動刪除。
說明您可以通過修改參數的方式修改開啟Binlog集群的Binlog文件保存時長。具體請參見Binlog文件保存時長。
Q:開啟Binlog后可以關閉嗎?
A:將參數loose_polar_log_bin修改為OFF并提交即可關閉。
說明Binlog關閉后,已有的Binlog文件會一直保留。您可以先縮短Binlog文件的保存時長,等待不需要的文件自動刪除后,再關閉Binlog。
Q:如何減少Binlog占用的存儲空間?
A:您可以將Binlog的保存時長參數(loose_expire_logs_hours或binlog_expire_logs_seconds)設置為一個較小的值,來減少Binlog文件對存儲空間的占用。
Q:開啟Binlog對性能影響有多大?
A:開啟Binlog不會影響查詢(SELECT)性能,只會影響寫入更新(如INSERT、UPDATE、DELETE等)性能。一般情況下,開啟Binlog后對性能影響不超過10%。極端壓力場景,性能影響可能達到40%。
Q:開啟Binlog后集群會自動重啟,重啟任務多久才能完成?
A:一般來說,重啟任務會在5分鐘之內完成,重啟時服務閃斷時間在40秒左右。具體時間與數據量和表數量相關,建議您在業務低谷期進行操作并確保應用程序具備重連機制。
Q:如何遠程獲取并查看Binlog日志內容?
A:詳情請參見遠程獲取并解析PolarDB MySQL版Binlog日志。
Q:為什么無法使用DMS的通過無鎖變更工單實現無鎖結構變更功能對PolarDB MySQL版集群進行添加索引等表結構變更操作?
A:PolarDB MySQL版集群Binlog默認關閉,因此若需要使用DMS的無鎖結構變更功能,請先開啟PolarDB MySQL版集群的Binlog功能。若不想開啟Binlog,您也可以使用online DDL命令來變更表結構。
Q:開啟Binlog后支持使用canal實現對MySQL的變動進行采集嗎?
A:可以實現使用canal對MySQL的變動進行采集。
Q:執行
SHOW BINARY LOGS
語句用于查詢Binlog文件大小是否會影響集群性能?A:不會,
SHOW BINARY LOGS
語句屬于管理類操作,對集群性能幾乎無影響。它不會像數據寫入操作(如INSERT、UPDATE、DELETE)那樣直接影響數據庫的讀寫性能。因此,您可以放心使用此命令進行查詢。