xtrabackup工具 进行备份和恢复介绍
一、环境准备:
系统CentOS Linux release 7.2.1511 (Core) X_86 64位最小化安装
mysql版本是官方二进制版本5.7.22-22,mysql采用的是二进制安装,单机上开启2个mysql实例,mysql实例要开启定时器event_scheduler=ON. 而且2个mysql实例都要开启Gtid
xtrabackup 采用的是rpm包安装,版本是version 2.4.13
1.创建测试数据:
创建一个定时器和存储过程来生成数据模拟演示xtrabackup 的备份过程
创建一个测试库testdb
创建一个测试表如下:
创建一个存储过程和一个定时器,让其定时在表test1_event 中写数据:
2.xtrabackup rpm包安装:
xtrabackup安装使用介绍如下:
官网下载地址:
https://www.percona.com/downloads/XtraBackup/LATEST/
https://www.percona.com/downloads/
https://www.percona.com/doc/percona-xtrabackup/2.4/using_xtrabackup/privileges.html
下载rpm包来安装
nnobackupex命令其实是软连接到xtrabackup的。但是备份数据时要采用innobackupex命令
[root@mgr01 ~]# ll /usr/bin/innobackupex
lrwxrwxrwx 1 root root 10 Apr 13 20:04 /usr/bin/innobackupex -> xtrabackup
到此处安装完成
二、xtrabackup 工具使用介绍:
2.1 采用xtrabackup 备份数据库数据时必须得有登录本地数据库的权限:
或者
2.2 备份命令说明:
全量备份命令:
当然在给的权限是localhost时,也可以去掉–host选项。如下命令:
** 是支持并行备份的,有个命令参数 parallel。如果生产环境的话,库的压力是非常的小的话,可以使用这个参数进行并行备份的,但是库的压力大的话,就不要用这个参数了。**
** innobackupex --help|grep parallel**
A:备份未使用并行备份的时的时间:
使用的时间是11秒
B:备份使用了并行备份参数的备份时间: 使用4个线程并行备份
使用的时间6秒
xtrabackup 备份数据提示:
xtrabackup在备份时,一定要避开业务的高峰期操作,如果在业务的高峰期操作,会产生大量的redo 文件,在恢复数据库的过程中会非常的慢。而且在备份过程中是存在锁表的。影响到数据的正常写入。
而且备份最好是在slave库上进行备份。因为slave库上是允许延迟的
锁表验证:
从备份的日志看到是从11:42:08 开始锁表的
从此处说明,xtrabackup 在备份innodb表时,还是会锁表的,锁表会造成数据延迟写入,和丢失数据的情况
2.3 恢复的命令介绍:
此次演示的恢复在本机上再新开启一个mysql 3308的实例来恢复。 把上面3306实例上备份的文件恢复到3308的实例上
xtrabackup 恢复演示:
对数据库进行备份xtrabackup。 备份完了。然后采用下面的命令来恢复
提示:如果mysql实例中表存在多个引擎的话,下面的文件中的记录的binlog 的位置点会不同的,但是要以位置点大的为准.
正常的情况下show master status\G的显示的Gtid值和binglog文件,position和xtrabackup_binlog_info内容是一致的,所以要以xtrabackup_binlog_info的信息为准。
下面的binlog位置点是相同的,原因是mysql实例中所有的表都采用的是Innodb的引擎
启动mysql3308 实例报错:
原因是权限不对
给恢复的数据目录data mysql的权限
再次启动mysql 启动成功:
数据成功恢复到3308实例:
2.4Tips:
如果备份不是用并行,恢复的时候可以用并行么 ??是可以.
恢复时,想让恢复的更快,可以把 --use-memory= 这个内存的值调整的大点,这个参数只是针对在恢复数据库采用–apply-log参数时使用–use-memory= 加大内存可以加快恢复数据库的时间
采用多线程恢复:
恢复使用的时间是16秒
采用单线程恢复:
恢复使用的时间是21秒
** 2.5 xtrabackup 增量备份原理:**
查找上次备份终止的LSN号
Copy redo
对于LSN号:
大于上次终止的LSN的Page页都进行copy(每个表一个单独的文件)
小于上次终止的LSN的Page不copy
生产上不建议使用 xtrabackup 来进行增量备份数据库
2.6 xtrabackup 恢复原理:
利用xtrabackup 实现crash recovery:
没有binlog参与
找到checkpoint 的LSN号
扫描大于checkpoint 的LSN号 的redo,确认commit并合并到datafile,反之rollback
提示:
apply-log过程中出现失败的话是可以多次运行apply-log的
Tps:
xtrabackup 备份时,在cp .ibd文件的过程中,此时是没有锁表的,但是是不允许修改表结构的
当前的版本中,在备份数据库的过程中时不允许进行DDL操作的,所以备份的过程中是不允许 alter 表结构的
undo 文件是存放的历史数据,方便数据库库故障进行恢复使用的,它是要持久化到磁盘的
**
提示:**
不管什么DML(create alter )操作都会形成undo
update insert delete,
select 操作是不会形成undo 的
MySQL8.0 的DDL操作也会形成undo
重要提示
MySQL5.5的选择2.2xtrabackup备份
MySQL5.6的选择2.3xtrabackup备份
MySQL5.7的选择2.4xtrabackup 备份
具体备份命令可以参考下面的文档
https://blog.51cto.com/wujianwei/1934084
以上备份原理出自知书堂mysql课程内容总结。本博文总结于此处,方便自己工作和学习查阅,顺便也贡献给专注于MySQL领域的朋友们。有不妥之处请留言,一起交流学习