故障分析 | undo log 长时间处于清理状态导致备份失败
作者:王祥
爱可生 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 长时间处于清理状态导致备份失败相关推荐
- MySQL进阶垫脚石:线程长时间处于killed状态怎么破?
一.背景 MySQL中使用kill命令去杀死连接时,如果使用show processlist会发现线程会处于killed状态一段时间,而不是立即杀掉.一些情况下,killed状态可能会存在很久,甚至可 ...
- java接口pending_为什么在页面上操作几次之后就变得奇慢无比,接口长时间处于pending状态?...
开发环境 前端:Vue 2.0 后台:Node Express 浏览器:Chrome 部署系统:Linux 问题现象 在现有项目的基础之上增加了两个页面,但是在使用的过程中发现,当连续操作几次之后页面 ...
- Mongodb 故障分享 初始化时errmsg : exception: new file allocation failure 并且长时间处于STARTUP2...
Hello,大家下午好. 近几天的项目有点赶,所以耽误了更新.现在给大家分享下,在安装mongodb的过程中,遇到的故障一则.其实很小白的问题,当时遇到这个问题的时候比较心慌,浪费了很多时间,跟大家分 ...
- git长时间未清理无法拉取代码( git Auto packing the repository in background for optimum performance)
git本地仓库,如果长时间不进行清理,几个月以后的某一天,可能拉取代码的时候突然提示你 git Auto packing the repository in background for optim ...
- oracle日期减5s,Oracle SNIPED状态的session 多长时间自动清理释放连接?
本帖最后由 yixiuquan 于 2015-9-24 17:44 编辑 bfc99 发表于 2015-9-23 16:00 要用两台机器测,一个做数据库服务器,一个模拟客户端. 测试方法: 1.在服 ...
- colab长时间处于正在连接
这个地方如果一直是"正在连接",那么说明你的网络出问题了. 一般从你运行开始到这个连接上,绝对不会超过10s 也可能出现下面这种问题 错误 未能执行单元格.无法向运行时发送执行消息 ...
- postman打开启动慢,原因:长时间没清理缓存,解决:删除postma缓存重启即可
找到postman缓存位置 删除掉 重启postman 即可 (注意:如果没有登录postman请求的记录本地缓存删除是无法找回的,如果是登录postman请求的记录删除本地缓存下次登录不会丢失记录. ...
- K8S故障排查指南:部分节点无法启动Pod资源-Pod处于ContainerCreating状态
K8S部分节点无法启动Pod资源-Pod处于ContainerCreating状态 文章目录 K8S部分节点无法启动Pod资源-Pod处于ContainerCreating状态 1.Pod长时间处于C ...
- 热水器多长时间清理一次比较好?该怎么清理?
电热水器是我们家用热水器的主流,很多家庭都有. 不过,很多人都知道,电热水器需要定期维护清理的,究竟多长时间维护清理一次才是合理的呢?又该如何清理呢?今天,装修第一站就给大家详细说说这些问题. 电热水 ...
最新文章
- 25个别出心裁的简历设计作品欣赏
- node - 非阻塞的异步 IO
- Android -- ImageLoader本地缓存
- PURE DORM IS GREAT
- Java Date的after和before方法解释
- 牛牛牛!干翻Sci-hub!
- 《技术的潜能:商业颠覆、创新与执行》一一2.12决心、愿望和耐力
- python中奖号_Python分析彩票记录并预测中奖号码过程详解
- 设计包含min函数的栈,O(1)空间实现方法
- jquery js 兄弟父元素的获取
- Visio 图案填充-设置形状格式
- 2018 Wannafly summer camp Day8--区间权值
- wsimport的使用
- dp主机_miniDP转DP和type-C转DP连接线上机简单测评
- 山东计算机考研909,山东大学2018年计算机考研909数据结构考试大纲
- 数据结构课设:基于字符串模式匹配算法的病毒感染检测问题
- swss-bd-interview
- ConfigurationChanged流程梳理(屏幕旋转、语言及字体切换)
- Arduino Uno 实验14——声音传感器
- 学编程要什么基础,零基础呢?
热门文章
- nginx以及openresty
- JUNIT4 断言assertThat greaterThan
- 来 COSCon'21 北京线下聚会,将开心开源进行到底!
- android skin 的参数选择,Android模拟器skin制定方式详解
- 【IDEA】基于Springboot+Netty实现Web聊天室
- php歌唱比赛评分表格,歌唱比赛评分表格.pdf
- java集成高德地图(干货)
- 日语美文欣赏【珍爱自己】
- 皮克斯开源_皮克斯的故事讲述规则适合网页设计师
- Mathorcup数学建模竞赛第三届-【妈妈杯】A题:火车票购票网站优化(附带赛题解析获奖论文和MATLAB、C++代码)(三)