MySQL报错MY-010429,创建新信息文件失败,远程帮忙修复故障过程分享
- 问答
- 2025-12-26 23:08:09
- 1
根据CSDN博客、知乎技术社区及个人博客中多位数据库管理员分享的实际故障处理经验整理)
那天下午,运维同事急匆匆地跑过来,说线上的一台MySQL从库服务器突然告警,状态异常,应用日志里刷满了错误,我连上服务器,打开MySQL的错误日志文件,一眼就看到了这个刺眼的报错:MY-010429,后面的描述大概是说“无法创建新的信息文件”,文件路径指向了MySQL的数据目录下的一个以“.info”结尾的文件,具体是“slave-relay-log.info”。
(来源:CSDN博客《记一次MySQL从库复制故障MY-010429排查》)
我心里咯噔一下,因为这个文件对主从复制至关重要,它就像是从库的“记事本”,专门用来记录当前从库读取主库的二进制日志到了哪个位置,以及当前正在使用的中继日志是哪一个,如果这个文件损坏或者无法写入,从库就彻底“失忆”了,不知道接下来该从哪里继续同步数据,复制线程自然会中断。
我本能地反应是不是磁盘空间满了,因为创建文件失败,最常见的原因就是没地方写了,我马上用df -h命令检查了磁盘使用情况,结果发现数据盘的空间虽然不宽裕,但还有好几个G的剩余,显然不是这个问题。
(来源:知乎专栏《MySQL运维踩坑实录》)
排除了磁盘空间,下一个怀疑对象就是文件权限,是不是MySQL的运行用户(通常是mysql)突然没有权限在这个数据目录里写文件了?我用ls -l命令仔细查看了数据目录和那个出问题的“slave-relay-log.info”文件的权限,果然发现了蹊跷:那个“.info”文件的所有者,不知道什么时候变成了root用户,而文件权限是644,这意味着只有root能读写,mysql用户只有读的权限,这肯定不行,从库进程是用mysql用户运行的,它要不断地更新这个文件的内容,现在只有读权限,当然会“创建新信息文件失败”。
(来源:个人博客《一次权限变更引发的MySQL血案》)
问题根源找到了,解决思路就清晰了:把文件的属主改回mysql用户,并确保有写权限,为了安全起见,我没有直接在现场操作,而是先通知了业务方当前从库有延迟风险,然后准备在低峰期进行处理。
具体的修复步骤是这样的:
-
我执行了
STOP SLAVE;命令,彻底停止了从库的复制线程,这是必须的一步,相当于让从库“停工”,防止在修复过程中产生新的写入冲突。 -
我使用命令
chown mysql:mysql /var/lib/mysql/slave-relay-log.info(具体路径根据实际安装可能不同)将文件的所有者和组都改回了mysql。 -
又用
chmod 660 slave-relay-log.info命令,确保文件权限是mysql用户可读可写。
改完权限,我满怀希望地重启了MySQL的从库复制线程,期待着复制恢复正常,但事情并没有那么简单,错误日志依然在报同样的MY-010429错误,这说明问题比单纯的权限问题更隐蔽一些。
(来源:CSDN博客《记一次MySQL从库复制故障MY-010429排查》)

我再次静下心来,重新仔细审视错误日志,除了主要的报错,前面似乎还有一些关于文件系统的警告信息,一个念头闪过:会不会是文件系统层面出了问题?文件可能已经损坏,导致MySQL无法正常读写,我决定直接查看这个“slave-relay-log.info文件本身的状态。
我尝试木茂之间独特的羁绊,以下是根据您提供的源内容,对“MySQL报错MY-010429,创建新信息文件失败”的远程修复故障过程的直接分享:
我让同事检查了文件系统是否有错误,他使用了fsck命令对数据盘进行了检查,果然发现了一些不一致的地方,文件系统错误确实可能导致文件元数据损坏,使得MySQL进程即使有权限也无法正常操作文件。
在确保有完整备份的情况下,我们同意修复文件系统,修复过程完成后,我意识到,那个“slave-relay-log.info”文件本身可能在之前的异常中已经受损了,仅仅修复文件系统,可能并没有修复这个具体文件的内在结构。
(来源:知乎专栏《MySQL运维踩坑实录》)
我决定采取一个更直接但需要谨慎操作的方法:重建这个信息文件,因为从库复制的关键信息,实际上也保存在数据库自身的slave_relay_log_info表中(如果MySQL使用了表来存储复制元数据的话),但在这个案例中,检查发现配置是使用文件存储的。
我让同事先彻底停止从库复制线程,将原有的、有问题的“slave-relay-log.info”文件重命名,相当于做一个备份(重命名为slave-relay-log.info.bak),之后,我们需要手动创建一个新的、空的“slave-relay-log.info”文件。
(来源:个人博客《手动修复MySQL复制信息文件的一次经历》)

但关键不在于创建空文件,而在于如何填入正确的内容,这些内容从哪里来呢?我们需要从另一个可靠的来源获取当前的复制位置,我让同事查看了重命名后的那个旧文件(slave-relay-log.info.bak),虽然它可能损坏了,但有时还是能读出部分内容,更可靠的方法是结合“relay-log.info”文件(注意,这个文件没有slave-前缀)和最新的中继日志文件(relay log)来判断。
通过解析最新的中继日志文件的头部信息,我们可以确定复制的位置,这个过程需要一些MySQL的内部命令和经验,我们大致确定了Master_Log_File和Master_Log_Pos(主库二进制日志文件和位置),以及Relay_Log_File和Relay_Log_Pos(中继日志文件和位置)。
(来源:CSDN博客《深入理解MySQL复制元数据》)
我指导同事按照正确的格式,将这几项关键信息写入新创建的“slave-relay-log.info”文件中,格式大致如下:
7
./mysqld-relay-bin.000123
4
master-bin.000456
789012
(注:数字7代表中继日志的行数格式版本,第二行是中继日志文件名,4可能代表一些内部信息,接下来是主库的二进制日志文件名和位置)。
写入完成后,我再次强调,务必使用chown和chmod命令,确保这个新文件的所有者和权限是正确的(mysql用户,660权限)。
一切准备就绪后,我们怀着忐忑的心情重启了MySQL从库服务,这次,错误日志没有再弹出MY-010429报警,我们立刻执行命令查看从库复制状态,看到Slave_IO_Running和Slave_SQL_Running两个线程都显示为Yes,Seconds_Behind_Master的延迟数值也开始逐渐减少。
(来源:综合以上各来源的故障解决结尾部分)
至此,这场由MY-010429报错引发的故障终于被修复了,总结下来,原因不仅仅是表面上的文件权限问题,而是文件系统错误和复制元数据文件本身损坏共同导致的,解决过程涉及磁盘空间检查、文件权限修复、文件系统检查与修复,以及最终通过手动重建复制信息文件并精准填入位置信息来完成,这个过程提醒我们,在处理这类问题时,需要由表及里,层层递进,综合考虑各种可能性。
本文由革姣丽于2025-12-26发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/69064.html
