本文介紹如何為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檔案佔用儲存空間的大小。
計費樣本
訂用帳戶
假設您購買的叢集已存在訂用帳戶的儲存空間類型,若儲存空間足夠則無需額外進行收費。
隨用隨付
假設您購買的叢集已存在隨用隨付的儲存空間類型,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
開啟 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
登入PolarDB控制台,在左側導覽列單擊叢集列表,選擇叢集所在地區,並單擊目的地組群ID進入叢集詳情頁。
您可以通過以下兩種方式中的任意一種來關閉Binlog:
方式一:
進入叢集的Binlog管理頁面。
單擊關閉Binlog按鈕。
在關閉Binlog對話方塊中,選擇生效方式為立即生效或定時生效。
若選擇定時生效,請指定具體的生效時間。
您可根據需求選擇是否勾選立即清理本地binlog。
單擊確定。
方式二:通過設定參數loose_polar_log_bin的值來關閉Binlog。
在左側導覽列中選擇
。找到目標參數loose_polar_log_bin,修改參數值。具體操作請參見修改參數值。
說明若您的PolarDB MySQL版叢集版本為MySQL 5.6,當前值修改為OFF_WITH_GTID;
若您的PolarDB MySQL版叢集版本為MySQL 5.7或MySQL 8.0,當前值修改為OFF。
Binlog關閉後,已有的Binlog檔案會一直保留。建議您先縮短Binlog檔案的儲存時間長度,等待不需要的檔案自動刪除後,再關閉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,您可以通過如下兩種方式修改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出現
Could not find first log file name in binary log index file
報錯資訊是什麼意思?A:
Could not find first log file name in binary log index file
從這個報錯來看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)那樣直接影響資料庫的讀寫效能。因此,您可以放心使用此命令進行查詢。Q:PolarDB MySQL版如何查詢Binlog最後寫入時間?
A:使用
show full binary logs
語句可以查看所有Binlog記錄檔的名稱、大小和最後寫入時間。說明該功能支援PolarDB MySQL版叢集要求如下:
MySQL 8.0.2版本,且小版本需為8.0.2.2.0及以上版本。
MySQL 8.0.1版本,且小版本需為8.0.1.1.14及以上版本。
MySQL 5.7版本,且小版本需為5.7.1.0.27及以上版本。
MySQL 5.6版本,且小版本需為5.6.1.0.38及以上版本。
Q:PolarDB MySQL版如何查看指定時間Binlog內容?
A:無法直接指定時間備份資料,可先按時間點恢複,再解析Binlog查看內容。