Percona Xtrabackup
安裝
安裝依賴包:
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
下載軟件并安裝
centos7:
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
centos7:
wget? https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm
yum-y install percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm
介紹:支持全量備份和增量備份
物理備份工具,拷貝數(shù)據(jù)文件。200M/s?
InnoDB表:
熱備份:業(yè)務(wù)正常發(fā)生的時候,可以進行備份,影響較小的備份。
1.checkpoint,將已提交的數(shù)據(jù)頁刷新到磁盤。記錄一個LSN頁。
3.infomation_schema.xxx
4.拷貝InnoDB表相關(guān)的文件(ibdata1,frm,ibd...)
5.BInlog只讀,FTWRL(gobal read lock)
6.備份期間產(chǎn)生新的數(shù)據(jù)變化的redo也會被備份走
非InnoDB表:
溫備份:鎖表備份
1.FTWRL,觸發(fā)全局鎖
2.拷貝非InnoDB的數(shù)據(jù)
3.解鎖
再次統(tǒng)計LSN
記錄二進制日志位置記錄下來。
將所有的備份文件統(tǒng)一存放在一個目錄下。
XBK應(yīng)用
innobackupex ------>xtrabackup? 軟鏈接??
前提:
1)數(shù)據(jù)庫啟動
2)能連上數(shù)據(jù)庫
用戶授權(quán):
[client]
socket=/tmp/mysql.sock?
3)默認會讀取[mysqld]? ?--->datadir=xxxx
4)服務(wù)器端工具
全備
命令:innobackupex --user=root --password=luobiao123? --no-timestamp? /data/xbk/full_`date +%F`
--user 用戶名
--password? 密碼
--no-timestamp 不自動產(chǎn)生文件名,自己指定
備份目錄:
xtrabackup_binlog_info? ? 記錄備份后binlog的position號,GTID號,做恢復(fù)使用
?xtrabackup_checkpoints? 記錄過程中的LSN號等,增量備份使用
xtrabackup_info? 前面所有的信息
xtrabackup_logfile redo日志
全備的恢復(fù)演練?
pkill mysqld? 殺服務(wù)端進程?
rm -rf /data/3306/*? 把數(shù)據(jù)文件刪除完
備份處理:prepare
redo前滾,undo回滾,模仿csr過程.
innobackupex --apply-log /data/xbk/full_2020-03-29/
進行恢復(fù):
1)進行拷貝:[root@later03 ~]# cp -a? /data/xbk/full_2020-03-29/*? ? /data/3306/
2)將用戶以及用戶組改為mysql :[root@later03 3306]# chown -R mysql.mysql? /data/*
3)? 啟動mysql:[root@later03 3306]# /etc/init.d/mysqld? start?
Starting MySQL. SUCCESS!?
xbk的增量備份恢復(fù)
說明:
備份時:
1.前提:增量必須依賴與全備。
每次增量都是參照上次備份的LSN號碼
(xtrabackup_checkpoints), 在此基礎(chǔ)變化的數(shù)據(jù)頁,
備份走,會講備份過程中產(chǎn)生的新的變化redo一并備份走。
恢復(fù)時:
需要將所有需要的inc備份,按順序合并到全備中。
進行prepare.
進行恢復(fù)操作。

增量備份實踐:
1)基礎(chǔ)環(huán)境模擬

2)模擬周日全備
命令:innobackupex --user=root --password=luobiao123? --no-timestamp? /data/xbk/full_`date +%F`
3)模擬周一數(shù)據(jù)變化

4)模擬周一晚上增量備份inc1?
[root@later03 xbk]# innobackupex? ? --user=root --password=luobiao123 --no-timestamp --incremental --incremental-basedir=/data/xbk/full_2020-03-30? ? /data/xbk/inc1_`date +%F`
說明:
--incremental? 增量備份的開關(guān)
--incremental-basedir=/data/xbk/full_2020-03-30? 增量備份的基目錄?
5)模擬周二數(shù)據(jù)變化

6)模擬周二晚上的增量備份
?innobackupex? ? --user=root --password=luobiao123 --no-timestamp --incremental --incremental-basedir=/data/xbk/inc1_2020-03-30/? ? /data/xbk/inc2_`date +%F`
7)模擬周三的數(shù)據(jù)變化

8)周三晚上10點發(fā)生故障:
pkill mysqld??
rm -rf /data/3306/*?
9)確認備份完整性?
1.查看日志是否comple?
2.檢查具體的數(shù)據(jù)目錄文件
to_lsn = 609053615
last_lsn = 609053624?
to 和 last差9個lsn說明備份期間沒有數(shù)據(jù)變化.

5.7中不論備份期間數(shù)據(jù)是否發(fā)生變化,當前備份的from_lsn號
和上一次備份的last_lsn號總是相差9個,如果不是,那么備份就會
出現(xiàn)問題。
實戰(zhàn)演練 :
xbk 全備 + inc 增倍 + binlog? 備份
1)恢復(fù)思路
1.合并,prepare,所有的inc到全備
2.恢復(fù)數(shù)據(jù)啟動數(shù)據(jù)庫。
3.截取二進制日志,binlog
4.恢復(fù)日志
2)恢復(fù)
#1.合并,prepare,所有的inc到全備
#基礎(chǔ)全備整理
1.進行第一次增量的合并
這里我出了點問題,把命令寫錯了。所以發(fā)現(xiàn)增量日志的第一個被損壞了,不能操作了,
所以這里提示,操作的時候,應(yīng)該給所有的日志在此備份,防止在操作的
過程中,發(fā)生損壞,那就gg了。
這里我先進行全備恢復(fù),然后在模擬操作,在進行.
這里有犯了一個錯誤 rm -rf /data/3306/ 直接把3306也刪除了,臥槽,所以我們需要
這樣寫rm -rf /data/3306/ *? 或者把穩(wěn)的時候,進行? cd /data/3306/? rm -rf? * ,最好備份
1)進行周一的備份和全備合并以及prepare
innobackupex --apply-log --redo-only --incremental-dir=/data/xbk/inc1_2020-03-30 /data/xbk/full_2020-03-30
--redo-only? 只進行redo前滾,不進行回滾。
2) 進行周二的備份和合并后的全備進行合并以及prepare
說明:這里周二的是最后一次增倍,所以不需要加redo-only?
innobackupex --apply-log? ?--incremental-dir=/data/xbk/inc2_2020-03-30 /data/xbk/full_2020-03-30
3)? 查看合并后的文件的check_point和最后一個checkpoint?

4)在次進行增倍后的全備份文件的prepare
innobackupex --apply-log? ?/data/xbk/full_2020-03-30
5)進行恢復(fù)
1)如果數(shù)據(jù)量較大,不想拷貝,可以直接將備份目錄作為數(shù)據(jù)的datadir?
vi? /etc/my.cnf? ?
datadir=/data/xbk/full_2020-03-30
chown -R mysql.mysql /data/xbk/full_2020-03-30?
2)進行拷貝? 這里我還是進行拷貝
cp -a?/data/xbk/full_2020-03-30/*? /data/3306?
chown -R mysql.mysql /data/*?
3)啟動
/etc/init.d/mysqld start?
6)進行g(shù)tid日志恢復(fù)
? 1)起點
? ?尋找起點:
[root@later03 inc2_2020-03-30]# cat /data/xbk/inc2_2020-03-30/xtrabackup_binlog_info?
mysql-bin.000020 1078 03901c2b-723d-11ea-b0de-00163e0477d5:1-4,
7acb1b1a-6660-11ea-b89b-00163e0477d5:1-19,
b02ac1f3-7228-11ea-9b66-00163e0477d5:1-11
position 號為1078 ,通過查看,只有mysql-bin.000020 這一個文件需要截取.
? 2)終點 :終點為文件末尾,可以省略。
截取binlog文件:
[root@later03 inc2_2020-03-30]# mysqlbinlog --skip-gtids --start-position=1078 /data/binlog/mysql-bin.000020> /tmp/bin20.sql?
進行恢復(fù):
mysql> set sql_log_bin? = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> source /tmp/bin21.sql?
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql> set sql_log_bin=1;
Query OK, 0 rows affected (0.01 sec)
查看數(shù)據(jù)恢復(fù)情況:
mysql> show tables;
+---------------+
| Tables_in_xbk |
+---------------+
| t1? ? ? ? ? ? |
| t2? ? ? ? ? ? |
| t3? ? ? ? ? ? |
| t4? ? ? ? ? ? |
| t5? ? ? ? ? ? |
+---------------+
5 rows in set (0.00 sec)
mysql> select * from t5;
+------+
| id? |
+------+
|? ? 1 |
|? ? 2 |
|? ? 3 |
+------+
3 rows in set (0.00 sec)
mysql> select * from t4;
+------+
| id? |
+------+
|? ? 1 |
|? ? 2 |
|? ? 3 |
+------+
3 rows in set (0.00 sec)
mysql> select * from t3;
+------+
| id? |
+------+
|? ? 1 |
|? ? 2 |
|? ? 3 |
+------+
3 rows in set (0.00 sec)
mysql> select * from t2;
+------+
| id? |
+------+
|? ? 1 |
|? ? 2 |
|? ? 3 |
+------+
3 rows in set (0.00 sec)
mysql> select * from t1;
+------+
| id? |
+------+
|? ? 1 |
|? ? 2 |
|? ? 3 |
+------+
3 rows in set (0.00 sec)
恢復(fù)成功?。。。?/p>