天天看點

mysql+gtid+增量備份_MySQL資料庫XBK增量備份恢複

大家好,我是anyux。本文介紹MySQL資料庫XBK增量備份恢複。

文末總結XBK增量備份恢複,并有導圖

mysql+gtid+增量備份_MySQL資料庫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

mysql+gtid+增量備份_MySQL資料庫XBK增量備份恢複

第二次模拟資料變化

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

mysql+gtid+增量備份_MySQL資料庫XBK增量備份恢複

第三次模拟資料變化

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

驗證資料

重新開機業務,删除維護頁面

mysql+gtid+增量備份_MySQL資料庫XBK增量備份恢複

恢複前的準備

整理全備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

mysql+gtid+增量備份_MySQL資料庫XBK增量備份恢複

合并xbk02到xbk,并整理備份

此處使用cat指令整理後兩個的xbk02和xbk的xtrabackup_checkpoints檔案,last_lsn号是否相同.相同表示整理成功

innobackupex --apply-log --incremental-dir=/tmp/xbk02 /tmp/db

mysql+gtid+增量備份_MySQL資料庫XBK增量備份恢複

最後一次整理xbk

innobackupex --apply-log /tmp/db

截取二進制日志

找起點,在xbk02的備份檔案中

cat /tmp/xbk02/xtrabackup_binlog_info

mysql+gtid+增量備份_MySQL資料庫XBK增量備份恢複

找終點

從上一個gtid号的157開始,直到最後一個值,就是終點

mysqlbinlog /data/mysql/log-bin.000004 | grep -i 'set'

從下圖中截取gtid資料點,說明gtid的終點是159。如果有其他誤操作gtid号,需要排除

mysql+gtid+增量備份_MySQL資料庫XBK增量備份恢複

多次驗證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;

mysql+gtid+增量備份_MySQL資料庫XBK增量備份恢複
mysql+gtid+增量備份_MySQL資料庫XBK增量備份恢複

歡迎在評論區一起讨論,質疑。文章都是手打原創,每天最淺顯的介紹運維、資料庫相關的技術,喜歡我的文章就關注一波吧,可以看到最新更新和之前的文章。

mysql+gtid+增量備份_MySQL資料庫XBK增量備份恢複