一 前言 Percona公司发布 innobackup 2.4 版本已经很久了,增加了新的特性比如支持非Innodb表备份,指定 --safe-slave-backup,增强备份的一致性,最重要的一点是支持5.7的备份,2.2是不能备份5.7 版本的。 考虑到以后我们要上线5.7 版本,因此我们决定将我们的percona的pt工具和备份软件更新到最新版本。本文主要记录我们使用 2.4 版本过程中遇到的问题和之前的一些改变。 二 问题和差异 2.1 backup-my.cnf 文件 innobackup 2.4版本比 之前的版本多了几个参数 2.2版本的内容
2.4 版本的内容
这里强调一下 innodb_fast_checksum ,在applay log 之后依赖backup-my.cnf 启动MySQL的时候 5.6 是不能识别该参数的,导致启动失败。[ERROR] mysqld: unknown variable 'innodb_fast_checksum=0' 来看看2014年 相关的bug 说法 “Or maybe a separate feature request should be opened to copy the whole my.cnf to the backup directory as well. I will leave that up to others to decide.” 都3年了,都没有得出什么有效的结果。。其他地方的讨论,其实可以直接关闭。 https://dba.stackexchange.com/questions/6386/is-there-any-reason-not-to-use-percona-innodb-fast-checksum 2.2 场景 由于历史原因,我们还有部分数据库是是基于 mysqld_multi 做单机多实例的。这种单机多实例的配置文件有两种 /etc/my.cnf 和 /path/my.multi.cnf 两个配置文件。my.multi.cnf 文件里面配置了实例级别的个性参数。比如
innobackup 2.4 在备份时会去读 /etc/my.cnf ,如果该文件中没有配置server_id 则系统报错失败。如果没有/etc/my.cnf 则会去获取数据库实例配置的my.cnf 而不是 my.multi.cnf .. innobackupex: [ERROR] /usr/bin/innobackupex: Empty value for 'server-id' specified 解决方法回退到老的版本。 2.3 备份集文件内容的变化 我们的备份命令如下:
使用了 compress 功能, 2.2版本的备份集压缩了数据库相关的数据文件
2.4版本的备份集文件
对自动化备份系统的影响是需要调整读取backup-my.cnf的步骤,必须在解压缩之后读取。 2.4 DDL 导致备份失败
MySQL 5.7 版本在使用Percona xtrabackup 2.4版本备份时执行ddl语句会导致备份失败。
[FATAL] InnoDB: An optimized(without redo logging) DDLoperation has been performed. All modified pages may not have been flushed to the disk yet. Percona XtraBackup will not be able to take a consistent backup. Retry the backup operation
Bug fixed #1555626.
根本原因是
MySQL 5.7 can sometimes skip redo logging when creating an index. If such ALTER TABLE is being issued during the backup, the backup would be inconsistent. xtrabackup will now abort with error message if such ALTER TABLEhas been done during the backup. Bug fixed #1582345.
Percona Xtrabackup 提供了三个可选参数来规避这个问题,在备份命令加上以下参数之一
--lock-ddl, --lock-ddl-timeout, --lock-ddl-per-table 具体信息可以点击 阅读原文。
三 小结 这里例举了我们在使用新版本的备份软件遇到的问题,给其他准备使用的同行一些借鉴,也欢迎大家补充其他我们还没遇到的问题。
原文链接是Percona的blog 介绍备份期间执行DDL导致备份失败问题分析,有兴趣的可以认真阅读。