xtrabackup備份恢復
阿新 • • 發佈:2020-07-29
xtrabackup全備恢復
xtrabackup全備
innobackupex --user=root --password=123456 --no-timestamp /data/full/ #備份
xtrabackup全備恢復
1.執行 --apply-log
2.清空損壞目錄,cp複製回去。或者指向datadir備份目錄。(或者使用innobackupex --copy-back)
3.datadir授權mysql使用者
innobackupex --apply-log /data/full/ #模擬了CSR的全過程,在恢復之前,將資料的LSN號和redo LSN號追平 innobackupex --copy-back /data/full/ chown mysql.mysql -R /data/3306/ systemctl start mysqld
xtrabackup增量備份恢復
模擬資料:
create database full charset utf8mb4;
use full;
create table t1 (id int);
insert into t1 values(1),(2),(3);
commit;
全備:
innobackupex --user=root --password=123456 --no-timestamp /data/full
模擬週一的資料變化:
create database inc1 charset utf8mb4; use inc1; create table t1 (id int); insert into t1 values(1),(2),(3); commit;
進行週一的增量備份:
innobackupex --user=root --password=123456 --no-timestamp --incremental --incremental-basedir=/data/full /data/inc1
模擬週二資料變化
create database inc2 charset utf8mb4;
use inc2;
create table t1 (id int);
insert into t1 values(1),(2),(3);
commit;
進行週二的增量備份:
innobackupex --user=root --password=123456 --no-timestamp --incremental --incremental-basedir=/data/inc1 /data/inc2
週三的資料變化
create database inc3 charset utf8mb4;
use inc3;
create table t1 (id int);
insert into t1 values(1),(2),(3);
commit;
模擬上午10點資料庫崩潰
rm -rf /data/3306/
恢復思路
- 停業務,掛維護頁
- 查詢可用備份並處理備份:full+inc1+inc2
- binlog: inc2 到 故障時間點的binlog
- 恢復全備+增量+binlog
- 驗證資料
- 起業務,撤維護頁
恢復前的準備
(1) 整理full
innobackupex --user=root --password=123456 --apply-log --redo-only /data/full/
(2) 合併inc1到full,並整理備份
innobackupex --user=root --password=123456 --apply-log --redo-only --incremental-dir=/data/inc1/ /data/full/
(3) 合併inc2到full,並整理備份
innobackupex --user=root --password=123456 --apply-log --incremental-dir=/data/inc2/ /data/full/
(4) 最後一次整理full
innobackupex --user=root --password=123456 --apply-log /data/full
mv /data/full/ /data/3306
chown -R mysql.mysql 3306/
擷取二進位制日誌
#起點:
[root@WANGXIANG data]# cat /data/inc2/xtrabackup_binlog_info
mysql-bin.000009 1779 275d1a27-cfe9-11ea-9c4f-000c294f7b08:1-4,
5f40d9c9-d184-11ea-becd-000c294f7b08:1-9,
bb6b0c36-d16c-11ea-a900-000c294f7b08:1-9,
cb151102-cfe7-11ea-b567-000c294f7b08:1 #這裡有很多行說明記錄的是binlog沒有記錄資料的起始點,不是備份起始點
#起點:
[root@WANGXIANG ~]# mysqlbinlog /binlog/3306/mysql-bin.000009|grep 'SET @@'
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
SET @@SESSION.GTID_NEXT= '5f40d9c9-d184-11ea-becd-000c294f7b08:3'/*!*/; #起始點
......
SET @@SESSION.GTID_NEXT= '5f40d9c9-d184-11ea-becd-000c294f7b08:13'/*!*/; #終點
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
mysqlbinlog --skip-gtids --include-gtids='5f40d9c9-d184-11ea-becd-000c294f7b08:3-13' /binlog/3306/mysql-bin.000009 > /data/bin.sql
mysql> set sql_log_bin=0;
mysql> source /data/bin.sql;
#驗證資料
mysql> select * from full.t1;
mysql> select * from inc1.t1;
mysql> select * from inc2.t1;
mysql> select * from inc3.t1;