前言

偌大的互联网,竟然找不到一篇合格 innobackupex 备份、恢复单个库的文章;
不是各种报错,就是写的太烂,根本执行不通;

简单介绍

innobackupex 就不多说了,这个工具很好用,可以全量备份、增量备份,还能备份单个库,速度也快,备份、迁移之类的工作,用这个工具再快乐不过了,而且备份也不用停库;

安装

安装的方式就简略了,网上一大堆,跟着教程还是能安装成功的

1、下载

https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/

2、复制执行脚本

解压后将 bin 下的命令文件复制到环境变量内

cp ./bin/* /usr/local/sbin/

全量备份和增量备份

略,网上教程也一大堆,按照教程也是可以全备和增备的

备份单个库

这里先说下,之前mysql数据库默认的引擎是 myisam,我们可以直接复制库的文件夹进行备份、迁移等操作,但之后版本的默认引擎成了innodb,直接复制文件夹是行不通的;
innodb引擎默认启用了共享空间,mysql所有库的实际数据都默认放在了 data/ibdata1 里,并且还有 ib_logfile0、ib_logfile1 ... 等共享文件,还有 ib_buffer_pool 缓存文件;而且 ibdata1 并不便于查看,所以innodb引擎的库、表很难单独提取出库文件,如果备份单个库的话,要么binlog日志,要么导出为sql;但是,如果单个库比较大,导出sql之类的就很费事儿了;

1、备份单个库

这个按照网上的一些教程还是可以的

innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --databases="xpt_test" /root/mysql_back/

# xpt_test 是要备份的数据库;
# /root/mysql_back/ 是备份之后文件的存放目录;

执行之后,会在 /root/mysql_back/ 目录下生成一个时间戳的文件夹(也可以通过参数不用时间戳,自己查)

2、模拟单个库的故障

比如:删除几个表,删除几条数据 等...

开始恢复单个库...

3、关闭数据库,删除或移走相关文件;

service mysqld stop

#mv移动到其他目录下(也可以rm删除,最好先转移走,防止出现问题)
mv data/ibdata1 /root/mysql_back/
mv data/ib_logfile* /root/mysql_back/
mv data/ib_buffer_pool /root/mysql_back/
mv data/xpt_test /root/mysql_back/

4、回滚事务

innobackupex --apply-log /root/mysql_back/2021-06-01_15-00-43/

2021-06-01_15-00-43 是备份单个库的时候生成的带时间戳的文件夹,也就是备份的数据;
回滚事务的操作是为了防止当时备份的时候,有未提交的事务,导致数据不一致;所以先回滚事务,让每一个事务都是完整的、正确的;

5、恢复

innobackupex --defaults-file=/etc/my.cnf --force-non-empty-directories --copy-back /root/mysql_back/2021-06-01_15-00-43/

对,你在网上找到的大量的备份、恢复单个库的操作都没有 --force-non-empty-directories 这个参数,至少我是没看到,我也不知道写那些教程的人是怎么恢复单个库的!
如果你用过 innobackupex ,你会知道,全量备份之后,再全量恢复的话,是需要清空 data/ 目录的(或者mv转移走);但是备份、恢复单个库是不用的。

恢复完之后,data/ 目录下的几个文件所属权限还是需要修改的,如果你用的mysql都是root权限,那就不用改了,不是的话就 chown 改一下;然后启动mysql,搞定。

打赏
支付宝 微信
上一篇 下一篇