首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL Enterprise Backup 入門實戰:全備、增量備份與單表恢復

     編輯:MySQL 綜合教學

MySQL Enterprise Backup (MEB) 入門實戰:全備、增量備份與單表恢復

MySQL Enterprise Backup (MEB) 是 Oracle 官方提供的熱備份工具,支援 InnoDB 線上熱備、壓縮、增量備份及單表恢復。本文透過實際指令示範完整備份與恢復流程。

環境資訊

  • MySQL 版本:5.6.x / 5.7.x
  • 備份目標資料庫:wind
  • 全備目錄:/backup
  • 增量備份目錄:/backupinc
  • 配置檔:/usr/local/mysql/my.cnf

一、完整備份

mysqlbackup \
--defaults-file=/usr/local/mysql/my.cnf \
--host=127.0.0.1 --port=3306 --protocol=tcp \
--user=root --password=passwd123! \
--databases="wind" \
--with-timestamp \
--backup-dir=/backup \
--log-bin-index=/usr/local/mysql/mysql_logs/binary_log/mysqldb01-bin.index \
backup-and-apply-log

關鍵參數說明:

  • backup-and-apply-log:備份完成後直接應用 redo log,產生一致性備份,可直接用於恢復。
  • --with-timestamp:在備份目錄下建立帶時間戳的子目錄(如 2015-04-01_09-39-09)。
  • --log-bin-index:指定 binlog 索引檔路徑,支援 PITR(時間點恢復)。

檢查備份元資料

cat /backup/2015-04-01_09-39-09/meta/backup_variables.txt | grep 'lsn'
# 輸出範例:
# start_lsn=70249472
# end_lsn=70249846

start_lsn 與 end_lsn 標記備份覆蓋的 redo log 範圍,增量備份需以 end_lsn 為起點。

二、增量備份

增量備份僅複製自上次備份以來變更的資料頁,大幅減少備份窗口與儲存空間。

第一次增量備份(基於全備 end_lsn)

mysqlbackup \
--defaults-file=/usr/local/mysql/my.cnf \
--host=127.0.0.1 --port=3306 --protocol=tcp \
--user=root --password=passwd123! \
--databases="wind" \
--with-timestamp \
--log-bin-index=/usr/local/mysql/mysql_logs/binary_log/mysqldb01-bin.index \
--incremental --start-lsn=70249846 \
--incremental-backup-dir=/backupinc \
backup

第二次增量備份(基於前一次增量 end_lsn)

mysqlbackup \
--defaults-file=/usr/local/mysql/my.cnf \
--host=127.0.0.1 --port=3306 --protocol=tcp \
--user=root --password=passwd123! \
--databases="wind" \
--with-timestamp \
--log-bin-index=/usr/local/mysql/mysql_logs/binary_log/mysqldb01-bin.index \
--incremental --start-lsn=138861169 \
--incremental-backup-dir=/backupinc \
backup

三、單表空間恢復實戰

場景:誤刪除 wind 資料庫,需從全備+增量備份恢復單一資料庫。

3.1 合併增量備份到全備

# 列出增量備份目錄
ls /backupinc/
# 2015-04-01_10-03-16  2015-04-01_10-11-51

# 依序應用增量備份
mysqlbackup --backup-dir=/backup/2015-04-01_09-39-09 \
--incremental-backup-dir=/backupinc/2015-04-01_10-03-16 \
apply-incremental-backup

mysqlbackup --backup-dir=/backup/2015-04-01_09-39-09 \
--incremental-backup-dir=/backupinc/2015-04-01_10-11-51 \
apply-incremental-backup

3.2 模擬誤刪資料庫

DROP DATABASE wind;

3.3 執行單表恢復

mysqlbackup \
--defaults-file=/usr/local/mysql/my.cnf \
--datadir=/usr/local/mysql/data/ \
--log-bin-index=/usr/local/mysql/mysql_logs/binary_log/mysqldb01-bin.index \
--backup-dir=/backup/2015-04-01_09-39-09 \
--databases="wind" \
copy-back

# 修正檔案擁有者
chown -R mysql:mysql /usr/local/mysql/data
chown -R mysql:mysql /usr/local/mysql/mysql_logs

3.4 驗證恢復結果

SHOW DATABASES;
USE wind;
SELECT COUNT(*) FROM t1;  -- 應回傳 3000000

四、生產環境建議

  1. 定期驗證備份可用性:每月至少演練一次恢復流程。
  2. 監控備份狀態:腳本檢查 mysqlbackup 返回碼與 backup_variables.txt 中的 apply_log_done=1。
  3. 異地備份:將備份檔同步至異地儲存(如 NFS、S3)。
  4. 保留策略:全備保留 30 天,增量保留 7 天,配合 expire_logs_days 管理 binlog。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved