生產環境中,有時需要做MySQL的備份和恢復工作。因MySQL是在運行過程中的,做全量備份需要時間,全量備份完成后又有數據變動,此時需要增量備份輔助。如果想恢復數據到一個空庫(例如數據遷移或者上雲等更換MySQL數據庫的場景),基於全量備份+增量備份的數據進行恢復,可以更接近於原本的數據。
工作中曾經使用過的2種方法:
1.基於dump全量備份.sql+binlog生成增量備份sql,進行全量+增量的備份/恢復操作。
- 備份過程:
(1)dump命令,生成全量備份sql文件。
(2)查看全量備份文件.sql,注意這個信息:
(3)全量備份之后,MySQL中又有增刪改操作。例如:再create一個表,並插入數據。
(4)增量備份:執行flush logs,會生成最新的增量binlog。
-
恢復過程:
(1)dump出來的全量備份文件.sql 和 flush出來的增量binlog 都scp拷貝到要恢復的機器上。
(2)恢復dump全量備份:mysql -uroot -p密碼 數據庫名 < 全量備份.sql
(3)基於binlog生成增量備份sql:mysqlbinlog --start-position=337 --database=數據庫名 mysql-bin.000002 > 增量備份.sql
(4)執行恢復該增量備份sql:mysql -uroot -p密碼 數據庫名 < 增量備份.sql
2.基於Percona公司的xtrabackup工具,進行全量+增量的備份/恢復操作。
(1)全量備份
innobackupex --user=用戶名 --password=密碼 全量備份文件存放目錄。
同樣,期間有些增量操作,建表,增刪數據等
(2)增量備份
innobackupex --user=用戶名 --password=密碼 --incremental 增量備份文件存放目錄 --incremental-basedir=依賴的上一次全量備份或增量備份
(3)恢復日志的准備
- 增量恢復日志的准備
innobackupex --apply-log --redo-only 全量備份文件存放目錄
innobackupex --apply-log --redo-only 全量備份文件存放目錄 --incremental-dir=增量備份文件存放目錄
- 全量恢復日志的准備
innobackupex --apply-log 全量備份文件存放目錄
(4)恢復數據
關閉要恢復的數據庫
/etc/init.d/mysqld stop
mv data data_old
mv undo undo_old
mv undo_log undo_log_old
mkdir -p data undo_log
innobackupex --move-back 全量備份文件存放目錄
chown mysql:mysql -R data/
chown mysql:mysql -R undo_log/
/etc/init.d/mysqld start