XtraBackup工具确实比较强大,因为目前的项目实际上并没有需要用到,当然也因为没有对XtraBackup有很熟悉的操作不能贸然使用到生产环境中。于是老蒋模仿网上关于XtraBackup的文档在测试服务器环境中进行简单的且稍微实战可能的操作且记录下来。
在前一篇文章中,老蒋有测试和记录到"简单测试利用XtraBackup实现全备份和增量备份过程",模拟在本台服务器进行恢复和还原,以及全备份和增量备份。过程中,看似从备份的文档可以看到有点类似直接拷贝(MySQL数据库备份方法整理 - 拷贝MySQL原始文件)原始文件的方法,我估摸着应该不是这么简单吧。于是乎将准备尝试各种的可能缓解。
今天将测试的环境是在两台服务器中测试,且这两台服务器的环境,以及数据库版本是一致的,姑且先这样操作看看,在A服务器进行全量备份和增量备份,然后到B服务器中恢复还原数据,看看模拟测试的网站是否可正常恢复。后面我再测试不同MYSQL数据库版本恢复数据是否兼容。
第一、准备环境测试准备
1、测试服务器两台
这里老蒋准备两台服务器,且环境都是用的常规的LNMP一键包。
2、关于数据备份问题
这里我都是用的测试机环境,所以对于数据的备份不是这么重要,即便完全不能恢复也无所谓。但是鉴于时间和效率,我还是先正常进行一份快照备份(有些服务器是有快照备份功能)。
第二、全量备份和跨服务器恢复
从某种意义上讲,老蒋在前面的文章中利用本机XtraBackup备份且在原有基础上破坏数据库然后进行全量恢复是没有问题的,而且这次的B跨服务器也是同样的环境,应该也没有多大问题。但是理论永远是理论,还是实际测试看看。
1、A主服务器全备份
innobackupex --defaults-file=/etc/my.cnf --host=127.0.0.1 --port=3306 --user=root --password=laobuluo.com /home/
这里全备份之后,在home目录中多了一个目录,2018-01-30_17-03-17,我们需要将这个目录下载到本地,或者直接放到对应的B还原服务器对应目录(这里为了方便和统一,我们还是放到一致的目录)。
2、B还原服务器恢复全备份
在恢复数据之前,我们需要service mysqld stop关闭数据库。然后将数据库目录文件全部删除。
innobackupex --apply-log --use-memory=64M --redo-only /home/2018-01-30_17-03-17
innobackupex --copy-back /home/2018-01-30_17-03-17
分别执行准备还原,以及拷贝还原。
3、授权数据库目录以及重启数据库
看来没有问题,然后我们将网站解析到B备份服务器,看到数据是可以恢复的。
第三、增量备份和跨站恢复数据
1、模拟增加数据和修改数据
这里我们还将域名解析到A服务器,然后正常没有问题之后将测试网站更新几篇文章和修改几篇文章。
2、增量备份数据库
innobackupex --incremental-basedir=/home/2018-01-30_17-03-17 --incremental /home/ --host=127.0.0.1 --port=3306 --user=root --password=laobuluo.com
然后我们看到A服务器中又多了一个2018-01-30_17-05-41目录。同样的,我们需要将这个目录拷贝到B服务器。
3、处理B服务器
这里考虑到彻底还原和不受干扰。所以老蒋同样的需要将B服务器数据库暂停运行,以及将数据库目录删除文件,以及在B服务器HOME目录中看到两个目录。分别是2018-01-30_17-03-17、2018-01-30_17-05-41。
4、恢复数据还原增量备份
innobackupex --apply-log --use-memory=64M --redo-only /home/2018-01-30_17-03-17
innobackupex --apply-log --use-memory=64M --redo-only /home/2018-01-30_17-03-17 --incremental-dir=/home/2018-01-30_17-05-41
innobackupex --copy-back /home/2018-01-30_17-03-17
5、同样授权数据库目录和重启数据库。
最后,域名解析到B服务器等待生效之后,看到是与原来A服务器增量备份之前添加和修改的内容一致的。通过基础的测试,老蒋开始有点喜欢XtraBackup这款工具,对于其他功能和测试环境继续挖掘和记录下来,争取模拟较多的可能。