MySQL Enterprise Backup (MEB) 是 Oracle 官方提供的熱備份工具,支援 InnoDB 線上熱備、壓縮、增量備份及單表恢復。本文透過實際指令示範完整備份與恢復流程。
wind/backup/backupinc/usr/local/mysql/my.cnfmysqlbackup \
--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 為起點。
增量備份僅複製自上次備份以來變更的資料頁,大幅減少備份窗口與儲存空間。
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
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 資料庫,需從全備+增量備份恢復單一資料庫。
# 列出增量備份目錄
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
DROP DATABASE wind;
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
SHOW DATABASES;
USE wind;
SELECT COUNT(*) FROM t1; -- 應回傳 3000000
mysqlbackup 返回碼與 backup_variables.txt 中的 apply_log_done=1。expire_logs_days 管理 binlog。