1、故障现象
某天巡检时发现有TeleDB实例备份失败,报错backup end because run xtrabackup failed.error: run backup failed, can’t find completed OK! In last half ret,如图
2、故障分析
导致xtrabackup备份失败的原因有很多,比如xtrabackup版本不匹配、ssh连不上备份机、锁超时等。这里从监控页面展示的部分信息暂时无法判断,需要通过查询backuprecovery.log来确定具体原因。
3、故障处理
- 查看历史备份发现set只有最近一次备份失败,之前备份都正常。
- 查询配置库确定set对应的backuprecovery进程,SQL如下:select distinct a.user_id,a.tags,b.seq_number,b.prod_db_engine from db_resource a left join data_genius_thread b on a.user_id = b.user_id where b.prod_db_engine='xxx' and a.tags = 'set名';(xxx对应替换为7或8.0)
- 根据备份时间定位日志中的具体位置,详细信息如下:
- 日志报错是获取锁失败,备份时数据库实例应该有慢查询或者其他SQL导致。
- 连上备份节点(一般是从库)检查processlist,发现当前没有慢SQL。
- 等下次触发备份时再观察是否能备份成功。经过观察,下次备份可以成功。
4、故障总结
- 实例在某次备份失败,但以往备份都正常,可能原因是:①备份过程中控制台连接zk超时导致失败 ②从库有慢查询导致备份失败。这两种原因都需要检查控制台log来进一步确认。
- 备份命令中--ftwrl-wait-timeout=20,该选项指定innobackupex阻塞执行flush table with read lock;语句的时长以等待查询执行完成,如果等待时间超过20秒之后仍然有查询在执行,则报错终止备份过程。