xtrabackup備份還原實戰

一、 xtrabackup安裝

根據實際情況選擇相應版本的xtrabackup,mysql是5.7.xx對應的xtrabackup版本爲2.4.*,mysql8.0以上的對應的xtrabackup版本爲8.x.x

#安裝依賴包:
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL libev
#下載軟件並安裝
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm
yum -y install percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm

二 、介紹

Percona XtraBackup工具提供了一種在系統運行時執行MySQL數據熱備份的方法。2.4版本開始支持非innodb表的備份

工作原理

InnoDB表:

對於innodb不鎖表,拷貝數據頁,最終以數據文件的方式保存下來,把一部分redo和undo一併備走,屬於熱備方式。

大概的工作流程如下

  1. xbk備份執行的瞬間,立即觸發checkpiont,已提交的數據髒頁,從內存刷寫到磁盤,並記錄此時的LSN號
  2. 拷貝innoDB表相關的文件(ibdata,frm,ibd…)
  3. 記錄備份過程中產生的redo和undo一起拷貝走,也就是checkpoint LSN之後的日誌
  4. 再次統計LSN
  5. 記錄二進制日誌位置

非InnoDB表:

進行溫備份,即鎖表備份

三、xtrabackup 備份使用方法

Usage: [xtrabackup [--defaults-file=#] --backup | xtrabackup [--defaults-file=#] --prepare] [OPTIONS]

1、全備

使用xtrabackup命令進行全量熱備份示例:

[root@db01 ~]# xtrabackup --defaults-file=/etc/my.cnf --host=127.0.0.1 --user=root --password=123 --port=3306 --backup --target-dir=/data/backup
  • --defaults-file:指定MySQL的配置文件所在路徑,因爲XtraBackup需要通過讀取配置文件才能知道數據目錄在哪
  • --host:指定MySQL服務的ip地址,因爲全量備份時需要備份表結構,所以得連接到MySQL加讀鎖
  • --user:指定使用哪個MySQL用戶進行備份
  • --password:MySQL用戶的密碼
  • --port:指定MySQL服務的端口號
  • --target-dir=name :備份文件存儲的目錄
  • --backup:進行備份並將其放入備份文件存儲的目錄

在這裏插入圖片描述

2、增量備份

[root@db01 ~]# xtrabackup --backup --target-dir=/data/backupv1 --incremental-basedir=/data/backup --user=root --password=123 --socket=/tmp/mysql.sock

--incremental-basedir :該選項告訴xtrabackup創建增量備份的參照點。
在這裏插入圖片描述

該版本下,to_lsn和last_lsn差9可以理解爲在備份過程中數據沒有發生變化,由上圖可以看到lsn號是連續的

四、備份還原實戰

1、數據環境準備

#第一天對數據進行全備
[root@db01 ~]# xtrabackup --user=root --password=123 --socket=/tmp/mysql.sock --backup --target-dir=/data/full

#模擬第一天的數據變化
mysql> use test;
mysql> create table t1(id int);
mysql> insert into t1 values (1),(2),(3);

#第二天對數據進行增量備份
[root@db01 ~]# xtrabackup --user=root --password=123 --socket=/tmp/mysql.sock --backup --target-dir=/data/inc1 --incremental-basedir=/data/full

#模擬第二天數據變化
mysql> create table t2(id int);
mysql> insert into t2 values (1),(3),(5);

#第三天對數據進行增量備份
[root@db01 ~]# xtrabackup --user=root --password=123 --socket=/tmp/mysql.sock --backup --target-dir=/data/inc2 --incremental-basedir=/data/inc1

#對數據庫搞破壞
[root@db01 ~]# rm -rf /data/mysql/*

2、準備備份

全備的整理

[root@db01 ~]# xtrabackup --prepare --apply-log-only --target-dir=/data/full
  • --prepare prepare a backup for starting mysql server on the backup 爲啓動備份上的mysql服務器準備一個備份。
  • --apply-log-only 此項較爲重要。主要應用與增備,在常規備份中,執行兩種操作以使數據庫保持一致:從redo log對數據文件redo已提交的事務,回滾undo的事務。在準備備份時,必須跳過未提交事務的回滾,因爲在備份時未提交的事務可能正在進行中,它們很可能在下一次增量備份中提交。您應該使用--apply-log-only選項來防止回滾階段。

將第一次增量備份應用到完全備份

[root@db01 ~]# xtrabackup --prepare --apply-log-only --target-dir=/data/full --incremental-dir=/data/inc1

準備第二次增量備份是一個類似的過程

最後一次準備備份過程需要將回滾的內容也準備進去,所以不需要加--apply-log-only參數

[root@db01 ~]# xtrabackup --prepare --target-dir=/data/full --incremental-dir=/data/inc2

3、進行恢復

[root@db01 ~]# cp -a /data/full/* /data/mysql/
[root@db01 ~]# chown -R mysql.mysql /data/mysql/

在這裏插入圖片描述

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