利用Percona XtraBackup实现对mysql定期备份和数据还原

安装

1. 从官方网站下载Percona XtraBackup,依赖环境rsync perl-DBD-Mysql libev,使用yum源安装以上依赖,高版本的mysql可能还需要mysql-community-libs-compat适配支持.
2. 从github上下载autoxtrabackup脚本

定期备份

利用autoxtrabackup配置一定的参数可以实现定期增量备份.

backupDir=/home/database_bak 备份路径
hoursBeforeFull=240 全量备份间隔时间
mysqlUser=root 本地数据库备份采用用户名
mysqlPwd=root 本地数据库备份采用密码
compression=false 备份是否压缩
compressThreads=8 压缩线程
keepDays=30 备份持有时间
sendEmail=never 备份完成是否发邮件
emailAddress=

配置好参数之后添加到crontab任务调度中(每天晚上23点备份数据库).

00 23 * * * /home/software/autoxtrabackup/autoxtrabackup.sh

备份生成的路径如下:

/home/database_bak/
├── 2018-08-24_11-27-36_full
├── 2018-08-24_13-23-51_incr
├── 2018-08-24_23-40-01_incr
├── 2018-08-25_23-40-01_incr
└── 2018-08-26_23-40-01_incr

还原

注意: 如果要还原数据, 首先要先备份已经备份的数据, 特别是全量数据.

autoxtrabackup的备份原则是一天一个相对于全量的增量的备份, 而不是相对于上一次的增量备份的增量. 所以在看xtrabackup的文档的时候, 需要注意由于采取的备份策略不同, 还原流程也是不一样的,具体对比可以看扩展内容.
根据增量备份数据还原数据库流程, 假设我需要还原2018-08-26的数据库数据
1. 找到最后一次的完整备份

innobackupex –apply-log –redo-only /home/database_bak/2018-08-24_11-27-36_full/

2. 找到2018-08-26的增量备份

innobackupex –apply-log /home/database_bak/2018-08-24_11-27-36_full/ –incremental-dir=/home/database_bak/2018-08-26_23-40-01_incr/

3. 准备数据

innobackupex –apply-log /home/database_bak/2018-08-24_11-27-36_full/

4. 回拷数据

innobackupex –copy-back /home/database_bak/2018-08-24_11-27-36_full/

5. 更改文件权限

chown –R mysql:mysql

6. 启动mysql服务

server mysqld start

扩展

对比标准增量备份和autoxtrabackup增量备份

官方推荐的使用办法是创建一个原始的增量备份, 第一次增量备份是针对全量备份, 第二次备份是针对第一次增量备份的增量备份, 同理第三次是针对第二次的增量备份.
而autoxtrabackup采用的是每次都针对原始的全量备份的增量备份.
二者在还原的时候自然也不一样, 标准的备份需要把增量一次一次的还原进去, 这样比较灵活. autoxtrabackup则增加实用, 需要还原的时候只需要找到全量备份,并且拿对应日期的增量备份, 即可还原到全部数据, 当然中间日期的数据就会有冗余.
使用环境就各自根据自己的环境确定吧, 如果每天新增数据比较多, 就采用官方的标准备份, 如果不是很多, 可以接受冗余数据, 并且为了方便的话可以采用autoxtrabackup脚本进行备份.

八月 27th, 2018 by