Backup

mariadb binlog 中的損壞

  • December 17, 2021

我安裝了 mariadb 版本 10.0.21。

我需要每 5 分鐘將 binlog 文件備份到 TSM,但由於 binlog 每秒都在寫入,我擔心文件在複製時會損壞。有可能發生這種情況嗎?如果 binlog 被損壞(它的結尾),它會損壞整個文件還是我可以丟棄最後幾行?還有其他解決方案嗎?我們已經有了主/從的複制,但是出於安全和審計的原因,我們需要保留一份 binlog 的副本。

問候

如果您在 linux 下工作,您可以使用 Persona Backup - https://www.percona.com/software/mysql-database/percona-xtrabackup進行 HOT bin-log 備份。

不久前我回答了一個類似的問題:https ://dba.stackexchange.com/a/246571/30545 ,為方便起見,我將其粘貼在這裡:

保留二進制日誌的壓縮存檔是實現數據庫時間點恢復的一種非常常見的方法,假設您有一個可以前滾的完整備份。

只需使用遠端傳輸過程(例如scp)複製二進制日誌就可以了-它們可以按原樣應用;但是,如果二進制日誌正在使用中、被輪換/清除,並且最重要的是因為它們是最後的日誌而被寫入,則可能會造成不便。雖然您可以解決這個問題 - 有一個更簡單的方法:

mysqlbinlog是 mysql 客戶端程式碼中包含的一個實用程序,它不僅允許將 binlog 轉換為 sql,還允許使用 mysql 協議遠端流式傳輸它們(因此您不需要設置額外的基礎設施和程式碼)。特別是-R 選項將允許您連接到遠端伺服器並在本地流式傳輸其二進制日誌。結合–raw–stop-never選項,您將擁有一個內置選項,可以幾乎實時地以原始格式流式傳輸二進制日誌,而不必處理不同的文件和失去事件等。儘管您可能仍希望包裝它,以便您可以處理遠端複製上可能出現的連接錯誤和其他問題。

我如何僅獲取自上次 mysqldump 的確切時間以來的二進制日誌?

為此,您需要使用--master-dataor--dump-slave選項(以及單事務或其他實現一致性的方式)執行 mysqldump 並收集 binlog 或 gtid 座標。這樣你就可以配置從哪裡開始收集二進制日誌(或者更簡單,從哪裡開始應用這些)。讓事情變得更容易的一個技巧是FLUSH LOGS在轉儲之前執行,這樣在進行時間點恢復時可以移動的數據更少。

如果另一個事務在該時間之前開始並在其之後完成,它是否仍會正確包含在日誌中?

它可能在日誌中,也可能不在日誌中,但不會包含根據 mysqldump 的座標。事務僅在送出時包含在 binlog 中。同時它們被記憶體在記憶體或磁碟上。雖然可以按照您的想法拆分日誌,但我建議讓它們盡可能與 msater 的原始格式相似,並使用座標來處理您所採取的不同備份的一致性 - 為簡單起見因此您可以重複使用相同的文件來恢復類似的備份。

我可以使用 mysqlbinlog 僅獲取自上次 mysqldump 以來的更改嗎?

如果您仍然希望將它們分開,請使用我上面建議的輪換,但您可能需要增加(不必要的)數據庫鎖定以使日誌和備份的輪換保持一致。或者您可以只使用--start-position--stop-positionmysqlbinlog 選項進行一次性複制。

引用自:https://dba.stackexchange.com/questions/121041