大家好,我是anyux。本文介紹MySQL資料庫XBK增量備份恢複。
文末總結XBK增量備份恢複,并有導圖

XBK增量備份
XBK的增量備份,每次都是基于上一天,第一次的備份是一個全備,以後所有的增量備份都隻備份變化的資料
清空備份路徑
rm -rf /tmp/db/*
模拟資料
create database xbk charset utf8mb4;use xbk;create table tmp (id int);insert into tmp values (1),(2),(3);commit;
全備
此處使用cat指令讀取xtrabackup_checkpoints檔案,檢視備份類型,lsn号,判斷全備是否完整
innobackupex --user=root --password='root' -S /data/mysql/mysql.sock --no-timestamp /tmp/db
第一次模拟資料變化
create database xbk01 charset utf8mb4;use xbk01;create table tmp01 (idx int);insert into tmp01 values (4),(5),(6);commit;
第一次增量備份
--incremental 增量備份的開關
--incremental-basedir=/tmp/db 基于哪個備份進行增量備份
/tmp/xbk01 增量備份到哪個位置
innobackupex --user=root --password='root' -S /data/mysql/mysql.sock --no-timestamp --incremental-basedir /tmp/db --incremental /tmp/xbk01
檢查第一次備份狀态
此處使用cat指令讀取增量備份的xtrabackup_checkpoints檔案,檢視備份類型,lsn号,判斷全備是否完整
cat /tmp/xbk01/xtrabackup_checkpoints
第二次模拟資料變化
create database xbk02 charset utf8mb4;use xbk02;create table tmp02 (idx int);insert into tmp02 values (7),(8),(9);commit;
第二次增量備份
innobackupex --user=root --password='root' -S /data/mysql/mysql.sock --no-timestamp --incremental-basedir /tmp/xbk01 --incremental /tmp/xbk02
檢查第二次備份狀态
此處使用cat指令讀取增量備份的xtrabackup_checkpoints檔案,檢視備份類型,lsn号,判斷全備是否完整
cat /tmp/xbk02/xtrabackup_checkpoints
第三次模拟資料變化
create database xbk03 charset utf8mb4;use xbk03;create table tmp03 (idx int);insert into tmp03 values (10),(11),(12);commit;
模拟資料庫崩潰
rm -rf /data/mysql/data/*
恢複思路
停止業務,挂維護頁面
查找可用備份,檢查備份政策,備份文檔,執行計劃,定時任務等,full+xbk01+xbk02
補齊binlog:從第二次增量備份到故障時間節點中的binlog
恢複全備+增量+binlog
驗證資料
重新開機業務,删除維護頁面
恢複前的準備
整理全備xbk
--redo-only 在整理全備和增量合并時使用,最後一次增量不需要
innobackupex --apply-log --redo-only /tmp/db
合并xbk01到xbk,并整理備份
此處使用cat指令整理後兩個的xbk01和xbk的xtrabackup_checkpoints檔案,last_lsn号是否相同。相同表示整理成功
innobackupex --apply-log --redo-only --incremental-dir=/tmp/xbk01 /tmp/db
合并xbk02到xbk,并整理備份
此處使用cat指令整理後兩個的xbk02和xbk的xtrabackup_checkpoints檔案,last_lsn号是否相同.相同表示整理成功
innobackupex --apply-log --incremental-dir=/tmp/xbk02 /tmp/db
最後一次整理xbk
innobackupex --apply-log /tmp/db
截取二進制日志
找起點,在xbk02的備份檔案中
cat /tmp/xbk02/xtrabackup_binlog_info
找終點
從上一個gtid号的157開始,直到最後一個值,就是終點
mysqlbinlog /data/mysql/log-bin.000004 | grep -i 'set'
從下圖中截取gtid資料點,說明gtid的終點是159。如果有其他誤操作gtid号,需要排除
多次驗證gtid節點
mysqlbinlog --base64-output=decode-rows /data/mysql/log-bin.000004
截取日志
mysqlbinlog --skip-gtids --include-gtids='87031e16-4413-11ea-bb11-000c2922081d:157-159' /data/mysql/log-bin.000004 > /tmp/log-bin.sql
恢複資料備份
cp -a /tmp/db/* /data/mysql/datachown -R mysql.mysql /data/mysql/data/systemctl restart mysqld
資料庫操作
set sql_log_bin=0;source /tmp/log-bin.sql;
驗證資料
select * from xbk03.tmp03union allselect * from xbk02.tmp02union allselect * from xbk01.tmp01union allselect * from xbk.tmp;
歡迎在評論區一起讨論,質疑。文章都是手打原創,每天最淺顯的介紹運維、資料庫相關的技術,喜歡我的文章就關注一波吧,可以看到最新更新和之前的文章。