这几天第一次接触innobackupex,很是让我头疼,光了解表面这个工具肯定是不行的,在深入了解的时候配合在生产中如果要发生的事务来测试总结,大家肯定和我一样对单库恢复这一操作比较难受,网上资料并能没有很是详细的去讲解这一方面,这几天通过我自己不断测试我把我的结果分享给大家,有需要安装工具的小伙伴去别的地方进行安装,我这边就不写在这了

1.参数介绍

常用选项:  
--host 指定主机
--user 指定用户名
--password 指定密码
--port 指定端口
--databases 指定数据库
--incremental 创建增量备份
--incremental-basedir 指定包含完全备份的目录
--incremental-dir 指定包含增量备份的目录
--apply-log 对备份进行预处理操作
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。
因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。
--redo-only 不回滚未提交事务
--copy-back 恢复备份目录
--no-timestamp 禁止使用时间创建目录

数据库版本MySQL5.7.35
对应 innobackupex2.4版本

2.备份

#全量备份
innobackupex --host=192.168.0.199 --user=root --password=123456 --prot=3306 --no-timestamp #全量备份存放目录

#增量备份 基于全量备份实现增量备份
innobackupex --host=192.168.0.199 --user=root --password=123456 --prot=3306 --no-timestamp --incremental-basedir= --incremental 增量备份目录

3.恢复

3.1手动单库增量备份恢复

这边的建议就是整库的增量备份实现单库恢复

恢复的话我就没有使用它原本的copy参数 其实我给拆分一下流程 大家可以能看的懂

#关闭数据库
service mysql stop

#增量备份整合到全量备份当中 恢复哪个时间段的 就整合哪个时间段 按照顺序 比如 恢复9 就整合9之前全部的增量 1..9都需要整合
innobackupex --apply-log --redo-only /server/mysql_bak/backup/quanliang/001/ --incremental-dir=/server/mysql_bak/backup/zengliang/001

#备份MySQL下data数据目录要恢复的数据库
mv /usr/local/mysql/data/ceshi/ /usr/local/mysql/data_backup/`date +%F_%H:%M`/

#把整合后的全量备份目录下要恢复的数据库复制到MySQL下data目录
cp -a /server/mysql_bak/backup/quanliang/001/ceshi /usr/local/mysql/data/

#重新赋予属组mysql权限
chown -R mysql.mysql /usr/local/mysql/data/

#启动数据库
service mysql start

补充:如果备份的库被删除恢复会报错 需要找开发把创建库和库里面所有创建表语句要来(如果开发说没有,就无法了,只能全库恢复)

3.2使用--copy参数实现备份恢复

copy参数使用是必须得需要MySQL的data数据目录必须为空 这样相当于要移动整库 很不安全

#数据库进行关闭
service mysql stop

#把data数据目录下数据进行备份
cp -a /usr/local/mysql/data/* /usr/local/mysql/data_backup/2021-11-01/

#把要恢复的数据备份生成
innobackupex --apply-log --redo-only /server/mysql_bak/backup/quanliang/ceshi_danku/ #这个是单库备份目录
#data目录必须为空
innobackupex --copy-back /server/mysql_bak/backup/quanliang/ceshi_danku/ #恢复备份数据 生成到 /usr/local/mysql/data/

#生成后把备份的数据恢复到data数据目录下 ib_buffer_pool文件和数据库目录进行覆盖 其他不覆盖
mv /usr/local/mysql/data_backup/2021-11-01/* /usr/local/mysql/data/

#重新赋予属组权限
chown -R mysql.mysql /usr/local/mysql/data/

#数据库启动
service mysql start



自动备份与自动恢复shell脚本已经写好

如有想法 评论区留言