MYSQL 失败,并显示:InnoDB:文件操作中出现操作系统错误编号 30

MYSQL 失败,并显示:InnoDB:文件操作中出现操作系统错误编号 30

我的 MYSQL 服务器最近大约每周都会停止运行一次。它需要重新启动才能恢复运行。但一旦重新启动,它又可以运行一两周。

有问题的错误是第 30 号。根据错误日志中的 url,MYSQL 没有提供任何更多信息,只是说我的数据库驱动器现在处于只读模式。

我的数据库位于使用 的已安装驱动器上UUID="c3c2527e-..." /media/database ext4 user,auto 0 2。当发生此错误时,可以通过 ssh 访问该已安装驱动器。

据我所知,我最近没有更新我的操作系统或 MYSQL,也没有对服务器进行任何更改。我记得当我第一次添加包含 MYSQL 的驱动器时必须调整 apparmor。然而那是一年多前的事了。

所以我的问题是:这个问题是否与我的硬盘出现故障、apparmor 出现故障或其他问题有关?

操作系统:12.04.2 LTS(GNU/Linux 3.5.0-23-通用 x86_64)

MYSQL:5.5.31-0ubuntu0.12.04.1(Ubuntu)

MYSQL 驱动器:/dev/sdb1 2.0T 709M 2.0T 1% /media/database

整个错误是:

140301  8:00:29 [Note] Plugin 'FEDERATED' is disabled.
140301  8:00:29 InnoDB: The InnoDB memory heap is disabled
140301  8:00:29 InnoDB: Mutexes and rw_locks use GCC atomic builtins
140301  8:00:29 InnoDB: Compressed tables use zlib 1.2.3.4
140301  8:00:29 InnoDB: Initializing buffer pool, size = 128.0M
140301  8:00:29 InnoDB: Completed initialization of buffer pool
140301  8:00:29  InnoDB: Operating system error number 30 in a file operation.
InnoDB: Error number 30 means 'Read-only file system'.
InnoDB: Some operating system error numbers are described at
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/operating-system-error-codes.html
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'open'.
InnoDB: Cannot continue operation.

答案1

您肯定遇到了与磁盘相关的问题。可能是磁盘控制器的问题。无论如何,错误都发生在操作系统级别:

sh-4.1# perror 30
OS error code  30:  Read-only file system

InnoDB 将停止工作,因为它需要进行大量写入,即使它正在读取

InnoDB 的样子如下

InnoDB架构

需要写入的活动 InnoDB 组件是

  • 数据字典(创建、修改和删除表时)
  • 双写缓冲区(崩溃恢复时可重用的数据副本)
  • 插入缓冲区(缓解缓冲池索引的变化)
  • 回滚段/撤消日志(事务隔离脉动循环控制电路
  • 日志文件(通过日志缓冲区接收更改模糊检查点
  • .ibd文件(单独的表空间文件)

一旦文件系统变为只读,所有这些移动部件就会停止。

你应该备份数据

  • 我会对所有数据进行 mysqldump
  • 关闭 mysql 并获取 LVM 快照(如果适用)
  • 关闭 mysql 并复制数据目录

备份完成后,立即进行磁盘维护。检查 RAID、磁盘控制器和磁盘本身。

以下是有关只读问题的其他一些 ServerFault 帖子

相关内容