问题概述

xtrabackup备份失败,日志中有这样的信息

InnoDB: An optimized (without redo logging) DDLoperation has been performed. All modified pages may not have been flushed to the disk yet.

问题原因

redo logs会跳过一些DDL,Percona XtraBackup 监测到redo log 有跳过时,它会中止备份以防止创建一个损坏的备份,所以上面的问题也就出现了。

解决方案

为了避免该问题官方提供的解决方案就是加上–lock-ddl

根据官方说明–lock-ddl只适用于Percona Server的MySQL服务器,如果像MariaDB是不适用的。产生的报错如下:
LOCK TABLES FOR BACKUP is not supported.

所以官方更推荐使用–lock-ddl-per-table,这个参数使用任何server。

总结

Sorted Index Builds不会写redo记录,而是用一个检查点来将脏页刷到磁盘。而页清理线程会及时地将索引脏页刷到磁盘,以减少执行检查点所花时间和开销。
同时也是由于创建索引不记录redo,所以在xtrabackup备份期间,如果执行了创建索引操作,备份将会终止,因为xtrabackup无法从redo中获取创建索引的操作,在利用备份apply-log时也就无法重现创建索引的操作。
所以备份的时候加上–lock-ddl-per-table就能够解决相关问题了。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: mysql