mysql 备份恢复-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

介绍:支持全量备份和增量备份

物理备份工具,拷贝数据文件。200M/s 

InnoDB表:

热备份:业务正常发生的时候,可以进行备份,影响较小的备份。

1.checkpoint,将已提交的数据页刷新到磁盘。记录一个LSN页。

3.infomation_schema.xxx

4.拷贝InnoDB表相关的文件(ibdata1,frm,ibd...)

5.BInlog只读,FTWRL(gobal read lock)

6.备份期间产生新的数据变化的redo也会被备份走



非InnoDB表:

温备份:锁表备份

1.FTWRL,触发全局锁

2.拷贝非InnoDB的数据

3.解锁


再次统计LSN

记录二进制日志位置记录下来。

将所有的备份文件统一存放在一个目录下。

XBK应用

innobackupex ------>xtrabackup  软链接  

前提:

1)数据库启动

2)能连上数据库

用户授权:

[client]

socket=/tmp/mysql.sock 

3)默认会读取[mysqld]   --->datadir=xxxx

4)服务器端工具

全备

命令:innobackupex --user=root --password=luobiao123  --no-timestamp  /data/xbk/full_`date +%F`

--user 用户名

--password  密码

--no-timestamp 不自动产生文件名,自己指定

备份目录:

xtrabackup_binlog_info    记录备份后binlog的position号,GTID号,做恢复使用

 xtrabackup_checkpoints  记录过程中的LSN号等,增量备份使用

xtrabackup_info  前面所有的信息

xtrabackup_logfile redo日志


全备的恢复演练 

pkill mysqld  杀服务端进程 

rm -rf /data/3306/*  把数据文件删除完

备份处理:prepare

redo前滚,undo回滚,模仿csr过程.

innobackupex --apply-log /data/xbk/full_2020-03-29/

进行恢复:

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的增量备份恢复

说明:

备份时:

1.前提:增量必须依赖与全备。

每次增量都是参照上次备份的LSN号码

(xtrabackup_checkpoints), 在此基础变化的数据页,

备份走,会讲备份过程中产生的新的变化redo一并备份走。

恢复时:

需要将所有需要的inc备份,按顺序合并到全备中。

进行prepare.

进行恢复操作。

增量备份实践:

1)基础环境模拟

2)模拟周日全备

命令:innobackupex --user=root --password=luobiao123  --no-timestamp  /data/xbk/full_`date +%F`

3)模拟周一数据变化

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  增量备份的开关

--incremental-basedir=/data/xbk/full_2020-03-30  增量备份的基目录 

5)模拟周二数据变化

6)模拟周二晚上的增量备份

 innobackupex    --user=root --password=luobiao123 --no-timestamp --incremental --incremental-basedir=/data/xbk/inc1_2020-03-30/    /data/xbk/inc2_`date +%F`

7)模拟周三的数据变化


8)周三晚上10点发生故障:

pkill mysqld  

rm -rf /data/3306/* 

9)确认备份完整性 

1.查看日志是否comple 

2.检查具体的数据目录文件

to_lsn = 609053615

last_lsn = 609053624 

to 和 last差9个lsn说明备份期间没有数据变化.


5.7中不论备份期间数据是否发生变化,当前备份的from_lsn号

和上一次备份的last_lsn号总是相差9个,如果不是,那么备份就会

出现问题。

实战演练 :

xbk 全备 + inc 增倍 + binlog  备份

1)恢复思路

1.合并,prepare,所有的inc到全备

2.恢复数据启动数据库。

3.截取二进制日志,binlog

4.恢复日志

2)恢复

#1.合并,prepare,所有的inc到全备

#基础全备整理

1.进行第一次增量的合并

这里我出了点问题,把命令写错了。所以发现增量日志的第一个被损坏了,不能操作了,

所以这里提示,操作的时候,应该给所有的日志在此备份,防止在操作的

过程中,发生损坏,那就gg了。

这里我先进行全备恢复,然后在模拟操作,在进行.

这里有犯了一个错误 rm -rf /data/3306/ 直接把3306也删除了,卧槽,所以我们需要

这样写rm -rf /data/3306/ *  或者把稳的时候,进行  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)进行恢复

1)如果数据量较大,不想拷贝,可以直接将备份目录作为数据的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)进行gtid日志恢复

  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 

进行恢复:

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)

查看数据恢复情况:

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)

恢复成功!!!!





你可能感兴趣的:(mysql 备份恢复-Percona Xtrabackup(全备and增备))