1. 程式人生 > 實用技巧 >xtrabackup備份恢復

xtrabackup備份恢復

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/
恢復思路

  1. 停業務,掛維護頁
  2. 查詢可用備份並處理備份:full+inc1+inc2
  3. binlog: inc2 到 故障時間點的binlog
  4. 恢復全備+增量+binlog
  5. 驗證資料
  6. 起業務,撤維護頁

恢復前的準備
(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;