簡體   English   中英

在 MySQL 中進行增量備份的最佳方法是什么?

[英]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上現成的腳本:

macournoyer/mysql_s3_backup

Abhishek-S-Patil/mysql-backup-incremental

還有一些付費解決方案實際上是這些工具的漂亮包裝:

數據庫

數據庫思維

進行增量備份時的最佳做法是什么?

這完全取決於您的架構、數據量、您可接受的最大允許停機時間間隔。 允許的最大數據丟失間隔。 在設置備份之前考慮這些事情。

我只想提到一個很好的做法,但非常重要,而且經常被遺忘。 在另一個不相關的服務器上定期測試和運行恢復腳本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM