mysql 備份恢復(fù)-Percona Xtrabackup(全備and增備)

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>





?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容