searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

mysql 从库clone重启出现 Invalid File State

2024-09-05 09:26:37
9
0

某实例一个从库在clone重启 时出现core,日志显示Invalid File State: 10,导致实例启动失败,本文分析该问题产生的原因。

---

1. 问题表现

从库实例一直重启失败,没有产生core文件,日志显示

[ERROR] [MY-011976] [InnoDB] [FATAL] Clone File Roll Back: Invalid File State: 10
 [ERROR] [MY-013183] [InnoDB] Assertion failure: clone0api.cc:1159:ib::fatal triggered thread 22832570353408
InnoDB: We intentionally generate a memory trap.
...
InnoDB: If you get repeated assertion failures or crashes, even
InnoDB: immediately after the mysqld startup, there may be
..

 

日志打印最后显示  [FATAL] Clone File Roll Back: Invalid File State: 10 , 然后assert 错误退出。

 

2. 原因分析

2.1  直接原因

从日志中可知,大概是在clone 恢复的逻辑遇到了问题。 由于没有准确的堆栈信息,需从源码中分析Invalid File State的具体情况。

其中的状态cur_state: 10 标识缺少了原始的数据文件。
查看线上data目录发现缺少了undo_002 文件。这个是导致出错的直接原因。
 
2.2  undo_2_trunc.log 
仔细查看data目录还发现存在一个undo_2_trunc.log,这个文件不常见,它是在undo file 执行truncate undo时生成的临时文件。它会是导致问题的原因吗?
 
通过分析trunc.log 的作用,对照源码的逻辑,发现在服务重启流程中,如果出现undo_x_trunc.log 后清理对应的undo 文件, 然后重建undo文件。
 
 
清理undo_002 后,正常在后续流程中会重建undo_002 文件. 但此时先进入了clone 的恢复流程中,而clone 恢复需要检查Undo 的数据文件是否完整,此时发现文件不存在,报错 Invalid File State: 10 后退出。
 
 

3. 原因总结

从库残留的undo_trunc.log 导致clone 后重启会删除Undo 文件,从而导致clone恢复检查数据文件出错,最终发生了core。

而undo_trunc.log 残留的原因,MYSQL官方有相关BUG报告:bugid: 112717

 

0条评论
作者已关闭评论
tbLu
7文章数
0粉丝数
tbLu
7 文章 | 0 粉丝
原创

mysql 从库clone重启出现 Invalid File State

2024-09-05 09:26:37
9
0

某实例一个从库在clone重启 时出现core,日志显示Invalid File State: 10,导致实例启动失败,本文分析该问题产生的原因。

---

1. 问题表现

从库实例一直重启失败,没有产生core文件,日志显示

[ERROR] [MY-011976] [InnoDB] [FATAL] Clone File Roll Back: Invalid File State: 10
 [ERROR] [MY-013183] [InnoDB] Assertion failure: clone0api.cc:1159:ib::fatal triggered thread 22832570353408
InnoDB: We intentionally generate a memory trap.
...
InnoDB: If you get repeated assertion failures or crashes, even
InnoDB: immediately after the mysqld startup, there may be
..

 

日志打印最后显示  [FATAL] Clone File Roll Back: Invalid File State: 10 , 然后assert 错误退出。

 

2. 原因分析

2.1  直接原因

从日志中可知,大概是在clone 恢复的逻辑遇到了问题。 由于没有准确的堆栈信息,需从源码中分析Invalid File State的具体情况。

其中的状态cur_state: 10 标识缺少了原始的数据文件。
查看线上data目录发现缺少了undo_002 文件。这个是导致出错的直接原因。
 
2.2  undo_2_trunc.log 
仔细查看data目录还发现存在一个undo_2_trunc.log,这个文件不常见,它是在undo file 执行truncate undo时生成的临时文件。它会是导致问题的原因吗?
 
通过分析trunc.log 的作用,对照源码的逻辑,发现在服务重启流程中,如果出现undo_x_trunc.log 后清理对应的undo 文件, 然后重建undo文件。
 
 
清理undo_002 后,正常在后续流程中会重建undo_002 文件. 但此时先进入了clone 的恢复流程中,而clone 恢复需要检查Undo 的数据文件是否完整,此时发现文件不存在,报错 Invalid File State: 10 后退出。
 
 

3. 原因总结

从库残留的undo_trunc.log 导致clone 后重启会删除Undo 文件,从而导致clone恢复检查数据文件出错,最终发生了core。

而undo_trunc.log 残留的原因,MYSQL官方有相关BUG报告:bugid: 112717

 

文章来自个人专栏
皮皮鲁的专栏
7 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0