[英]What is the best way to do incremental backups in MySQL?
我們使用的是 MySQL 5.0 版,大多數表都是 InnoDB。 我們運行復制到從服務器。 我們正在考慮每天備份 MySQL 日志文件。
AFAIK 進行增量備份的唯一方法是使用二進制日志。 如果要進行完整備份(InnoDB 熱復制),您還有其他選擇,但增量備份意味着您需要記錄所有事務。
您需要問自己為什么要備份數據。 由於您有一個用於復制的從屬設備,我認為備份主要用於在意外刪除的情況下恢復數據?
我可能會每 1 小時輪換一次日志並備份它。 意思是,恢復將使數據最多保留 1 小時,並且您可以恢復到自上次完整快照以來的任何時間點。
您可以使用 mysqldump 定期轉儲您的架構,為每個架構始終使用相同的文件名和路徑(即替換最新的)
然后將其與任何支持增量/增量備份的備份工具結合使用,例如 rdiff-backup、duplicity、Dupplicati 或 Areca Backup。 Duplicity 文檔中的一個示例:
由於 duplicity 使用 librsync,增量存檔節省空間,並且只記錄自上次備份以來更改的文件部分
這樣,您的第一個備份將是第一個完整轉儲的壓縮副本,第二個將包含與第一個和第二個轉儲的壓縮差異,依此類推。 您可以恢復任何時間點的 mysqldump 文件,然后將該文件恢復到 MySQL 中。
自上次回答以來已經過去了很多時間,在此期間出現了幾種用於實施增量備份的解決方案和工具。
兩個主要的:
Percona XtraBackup - 是基於 MySQL 的服務器的開源熱備份實用程序,在備份期間不會鎖定您的數據庫。 它還允許您創建增量備份。 更多細節在這里。
它非常簡單,看起來像這樣:
xtrabackup --backup --target-dir=/data/backups/inc1 --incremental-basedir=/data/backups/base
mysqlbackup
是一個實用程序,包含在 mysql 企業版中。 它很像 percona xtrabackup。 詳細對比
可以在這里找到
它有參數--incremental
允許您進行增量備份。 更多細節在這里
mysqlbackup --defaults-file=/home/dbadmin/my.cnf --incremental --incremental-base=history:last_backup --backup-dir=/home/dbadmin/temp_dir --backup-image=incremental_image1.bi backup-to-image
這兩個實用程序進行物理備份(復制數據庫文件),但您仍然可以對 binlog 文件進行邏輯備份。
你可以自己寫一個腳本,也可以使用github上現成的腳本:
Abhishek-S-Patil/mysql-backup-incremental
還有一些付費解決方案實際上是這些工具的漂亮包裝:
進行增量備份時的最佳做法是什么?
這完全取決於您的架構、數據量、您可接受的最大允許停機時間間隔。 允許的最大數據丟失間隔。 在設置備份之前考慮這些事情。
我只想提到一個很好的做法,但非常重要,而且經常被遺忘。 在另一個不相關的服務器上定期測試和運行恢復腳本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.