作者:王祥

爱可生 DBA 团队成员,主要负责 MySQL 故障处理和性能优化。对技术执着,为客户负责。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


有客户反映有 3 套 MGR 环境全备失败,MySQL 版本为 8.0.18 ,xtrabackup 版本为 8.0.9 。报错信息如下:

xtrabackup: Generating a list of tablespaces
Directories to scan '.;./;.'
Scanning './'
Completed space ID check of 2 files.
Allocated tablespace ID 12 for zxc/a, old maximum was 0
Undo tablespace number 1 was being truncated when mysqld quit.
Cannot recover a truncated undo tablespace in read-only mode
xtrabackup: error: xb_load_tablespaces() failed with error code 57

根据报错到 percona 官方搜索。找下如下 xtrabackup issue(https://jira.percona.com/browse/PXB-1787):

报错原因: undo log 清理会导致 undo log 的 space_id 变化,进而导致 xtrabackup 备份失败。处理方法也很简单重启一下备份的从节点 undo log 恢复正常,重新备份成功。

虽然已经暂时已经解决了备份的问题,但不能总是重启来解决。接下来重点看看 undo log 清理的问题。

查看 error log 信息,发现在 00:48 已经开始清理 undo log ,备份是在凌晨1点开始,参数 innodb_max_undo_log_size 设置为 1G ,正常的话应该也能清理完。

2021-10-26T00:48:41.543308+08:00 0 [Note] [MY-012994] [InnoDB] Truncating UNDO tablespace 'innodb_undo_001'.
2021-10-26T00:57:25.369852+08:00 0 [Note] [MY-012994] [InnoDB] Truncating UNDO tablespace 'innodb_undo_002'.
2021-10-26T01:02:01.994594+08:00 11751 [Warning] [MY-012111] [InnoDB] Trying to access missing tablespace 4294967152
2021-10-26T01:02:01.994645+08:00 11751 [Warning] [MY-012111] [InnoDB] Trying to access missing tablespace 4294967151

查看 undo log 空间,发现 undo_1_trunc.log、undo_2_trunc.log 还在说明 undo log 过了10个小时依然没有清理完。

在测试环境复现以上问题:

#将mgr主节点与从节点参数innodb_max_undo_log_size同时修改成10M
mysql>set global innodb_max_undo_log_size=10485760;
#使用sysbench发压
sysbench oltp_read_write --mysql-host=10.186.63.54 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=sysbench --tables=6 --table-size=1000000 --report-interval=1 --threads=1 --time=300 run

过几秒就可以看到从节点会生成 undo_1_trunc.log与undo_2_trunc.log ,停止 sysbench 发压。等了半小时 undo_1_trunc.log 与 undo_2_trunc.log 依然存在。但主节点 undo log 清理的很快。

执行全备:

xtrabackup --defaults-file=/etc/my.cnf \
--target-dir=/opt/xtrabackup/full \
--user=root \
--password=123456 \
--socket=/mysqldata/mysql_3306/tmp/mysql.sock \
--backup

得到报错:

xtrabackup: Generating a list of tablespaces
Directories to scan '.;./;.'
Scanning './'
Completed space ID check of 2 files.
Allocated tablespace ID 12 for ccc/a, old maximum was 0
Undo tablespace number 1 was being truncated when mysqld quit.
Cannot recover a truncated undo tablespace in read-only mode
xtrabackup: error: xb_load_tablespaces() failed with error code 57

首先查看是不是由于有大事务占用导致 undo log 无法被清理使用命令:show engine innodb status\G ,未发现有事务占用 undo log 。难道是 bug 导致的?带着问题去 bug 库搜了一下,果真是一个 bug :https://bugs.mysql.com/bug.php?id=104573。

undo log 长时间处于清理状态,该问题是由参数 super_read_only 触发的 bug。可以将super_read_only设置成0临时解决。这也解释了为什么在主节点上undo log清理的很快。

那有什么办法减少触发这个 bug 呢?我们可以将 innodb_max_undo_log_size 调大。在InnoDB 存储引擎中,undo 在完成事务回滚和 MVCC 之后,就可以 purge 掉了,purge 掉文件虽然大小不会变,但是可以被重新分配使用。在 innodb_max_undo_log_size 设置较大的情况下,undo log 大小达到阈值前,被 purge 掉了,这样空间可以重用,很难达到阈值,所以不会触发 undo log truncate,所以也就不会触发这个 bug 。

故障分析 | undo log 长时间处于清理状态导致备份失败相关推荐

  1. MySQL进阶垫脚石:线程长时间处于killed状态怎么破?

    一.背景 MySQL中使用kill命令去杀死连接时,如果使用show processlist会发现线程会处于killed状态一段时间,而不是立即杀掉.一些情况下,killed状态可能会存在很久,甚至可 ...

  2. java接口pending_为什么在页面上操作几次之后就变得奇慢无比,接口长时间处于pending状态?...

    开发环境 前端:Vue 2.0 后台:Node Express 浏览器:Chrome 部署系统:Linux 问题现象 在现有项目的基础之上增加了两个页面,但是在使用的过程中发现,当连续操作几次之后页面 ...

  3. Mongodb 故障分享 初始化时errmsg : exception: new file allocation failure 并且长时间处于STARTUP2...

    Hello,大家下午好. 近几天的项目有点赶,所以耽误了更新.现在给大家分享下,在安装mongodb的过程中,遇到的故障一则.其实很小白的问题,当时遇到这个问题的时候比较心慌,浪费了很多时间,跟大家分 ...

  4. git长时间未清理无法拉取代码( git Auto packing the repository in background for optimum performance)

    git本地仓库,如果长时间不进行清理,几个月以后的某一天,可能拉取代码的时候突然提示你  git Auto packing the repository in background for optim ...

  5. oracle日期减5s,Oracle SNIPED状态的session 多长时间自动清理释放连接?

    本帖最后由 yixiuquan 于 2015-9-24 17:44 编辑 bfc99 发表于 2015-9-23 16:00 要用两台机器测,一个做数据库服务器,一个模拟客户端. 测试方法: 1.在服 ...

  6. colab长时间处于正在连接

    这个地方如果一直是"正在连接",那么说明你的网络出问题了. 一般从你运行开始到这个连接上,绝对不会超过10s 也可能出现下面这种问题 错误 未能执行单元格.无法向运行时发送执行消息 ...

  7. postman打开启动慢,原因:长时间没清理缓存,解决:删除postma缓存重启即可

    找到postman缓存位置 删除掉 重启postman 即可 (注意:如果没有登录postman请求的记录本地缓存删除是无法找回的,如果是登录postman请求的记录删除本地缓存下次登录不会丢失记录. ...

  8. K8S故障排查指南:部分节点无法启动Pod资源-Pod处于ContainerCreating状态

    K8S部分节点无法启动Pod资源-Pod处于ContainerCreating状态 文章目录 K8S部分节点无法启动Pod资源-Pod处于ContainerCreating状态 1.Pod长时间处于C ...

  9. 热水器多长时间清理一次比较好?该怎么清理?

    电热水器是我们家用热水器的主流,很多家庭都有. 不过,很多人都知道,电热水器需要定期维护清理的,究竟多长时间维护清理一次才是合理的呢?又该如何清理呢?今天,装修第一站就给大家详细说说这些问题. 电热水 ...

最新文章

  1. 25个别出心裁的简历设计作品欣赏
  2. node - 非阻塞的异步 IO
  3. Android -- ImageLoader本地缓存
  4. PURE DORM IS GREAT
  5. Java Date的after和before方法解释
  6. 牛牛牛!干翻Sci-hub!
  7. 《技术的潜能:商业颠覆、创新与执行》一一2.12决心、愿望和耐力
  8. python中奖号_Python分析彩票记录并预测中奖号码过程详解
  9. 设计包含min函数的栈,O(1)空间实现方法
  10. jquery js 兄弟父元素的获取
  11. Visio 图案填充-设置形状格式
  12. 2018 Wannafly summer camp Day8--区间权值
  13. wsimport的使用
  14. dp主机_miniDP转DP和type-C转DP连接线上机简单测评
  15. 山东计算机考研909,山东大学2018年计算机考研909数据结构考试大纲
  16. 数据结构课设:基于字符串模式匹配算法的病毒感染检测问题
  17. swss-bd-interview
  18. ConfigurationChanged流程梳理(屏幕旋转、语言及字体切换)
  19. Arduino Uno 实验14——声音传感器
  20. 学编程要什么基础,零基础呢?

热门文章

  1. nginx以及openresty
  2. JUNIT4 断言assertThat greaterThan
  3. 来 COSCon'21 北京线下聚会,将开心开源进行到底!
  4. android skin 的参数选择,Android模拟器skin制定方式详解
  5. 【IDEA】基于Springboot+Netty实现Web聊天室
  6. php歌唱比赛评分表格,歌唱比赛评分表格.pdf
  7. java集成高德地图(干货)
  8. 日语美文欣赏【珍爱自己】
  9. 皮克斯开源_皮克斯的故事讲述规则适合网页设计师
  10. Mathorcup数学建模竞赛第三届-【妈妈杯】A题:火车票购票网站优化(附带赛题解析获奖论文和MATLAB、C++代码)(三)