利用Percona Xtrbackup做增量備份以及實現完全恢復

該部分介紹了怎樣做增量備份及如何利用全量備份,增量備份,binlog進行完全恢復。

增量備份隻影響xtradb和innodb表,其他引擎將會複製所有數據。

這裏計劃做一次全量備份,三次增量備份。後兩次的增量備份都基於上次的增量備份。

一 增量備份與恢復

1.1 備份

1.1.1 全量備份

增量備份基於全量備份,所以需要先創建一個全量備份。

全量備份命令示例:

innobackupex  --port=3307 --user=XtrabackupUser --password=123456 /download/bak/xtrbak/

在備份路徑下生成了一個子目錄2020-03-18_19-46-30。

1.1.2 增量備份

增量備份需要指定--incremental選項和BASEDIR信息。

BASEDIR可以指向之前的全備,也可以指向上一個增量備份。

                              

#增量備份1

innobackupex  --port=3307 --user=XtrabackupUser --password=123456 --incremental --incremental-basedir=/download/bak/xtrbak/2020-03-18_19-46-30 /download/bak/xtrbak/

在備份路徑下生成了一個子目錄2020-03-18_19-53-42。

 

#增量備份2

innobackupex  --port=3307 --user=XtrabackupUser --password=123456 --incremental --incremental-basedir=/download/bak/xtrbak/2020-03-18_19-53-42 /download/bak/xtrbak/

在備份路徑下生成了一個子目錄2020-03-18_19-55-45。

 

#增量備份3

innobackupex  --port=3307 --user=XtrabackupUser --password=123456 --incremental --incremental-basedir=/download/bak/xtrbak/2020-03-18_19-55-45 /download/bak/xtrbak/

在備份路徑下生成了一個子目錄2020-03-18_19-56-55。

1.2 故障模擬

刪除數據文件:

cd /data/server/mysql_3307/

mv data data_bak

重啓數據庫失敗:

Starting MySQL. ERROR! The server quit without updating PID file (/data/server/mysql_3307/data/pc1.pid)

1.3 恢復

1.3.1 prepare

規則:

需要在全量備份及除最後一個增量備份外的所有增量備份上--apply log --redo only,在最後一個增量備份上加--apply log,即只有最後一個備份中不用加--redo only.

 

#對全量備份做prepare

innobackupex --apply-log --redo-only 2020-03-18_19-46-30

 

#將增量備份1合併到全量備份中(incremental-dir後跟增量備份目錄)

innobackupex --apply-log --redo-only 2020-03-18_19-46-30 --incremental-dir=/download/bak/xtrbak/2020-03-18_19-53-42

 

#將增量備份2合併到全量備份中

innobackupex --apply-log --redo-only 2020-03-18_19-46-30 --incremental-dir=/download/bak/xtrbak/2020-03-18_19-55-45

 

#將增量備份3合併到全量備份中(不加redo-only)

innobackupex --apply-log 2020-03-18_19-46-30 --incremental-dir=/download/bak/xtrbak/2020-03-18_19-56-55

 

1.3.2 使用innobackupex做恢復

在prepare階段後,如果需要用備份數據來恢復數據庫,則需要指定--copy-back和備份數據所在的目錄即可。

 

#如果數據庫沒被關閉,需要關閉數據庫:

service mysqld stop

 

#如果數據目錄不爲空,則將數據目錄設置爲空

cd /data/server/mysql_3307/

mv data data_bak

 

#在恢復機器上恢復數據:

innobackupex --copy-back /download/bak/xtrbak/2020-03-18_19-46-30

chown -R mysql:mysql data

此時,數據恢復到了備份時刻的狀態。

1.3.3 利用binlog做完全恢復

若想恢復到故障時刻,需要結合binlog進行完全恢復:

關閉相應的應用接口,阻止往數據庫裏寫入數據,防止數據錯亂。

service mysqld start

 

#查看應該從哪個binlog及position進行恢復

查看最近的一個增量備份的xtrabackup_binlog_info文件。

cd 2020-03-18_19-56-55

[root@pc1 2020-03-18_19-56-55]# cat xtrabackup_binlog_info

mysql-bin.000037    1042    2daff865-67ce-11ea-874e-080027040516:1-11,

a4ac8cd2-e17c-11e9-a602-080027040516:1-89,

d4d2f1d2-66f2-11ea-972a-080027040516:1-17

 

#查看有哪些binlog需要恢復(上面陰影部分的binlog及其之後的binlog都需要恢復)

mysql> show binary logs;

……

| mysql-bin.000037 |      1345 |

|mysql-bin.000038 |       577 |

| mysql-bin.000039 |       530 |

| mysql-bin.000040 |       274

 

#執行flush logs,以防止恢復最後一個binlog時,會重複複製,因爲恢復binlog本身的操作也會記錄到binlog裏。

 

#恢復

/usr/local/mysql/bin/mysqlbinlog --skip-gtids=true  --start-position=1042 mysql-bin.000037 | mysql -u root -p

/usr/local/mysql/bin/mysqlbinlog --skip-gtids=true mysql-bin.000038 mysql-bin.000039 mysql-bin.000040 | mysql -u root -p

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章