我的 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 组件是
- 数据字典(创建、修改和删除表时)
- 双写缓冲区(崩溃恢复时可重用的数据副本)
- 插入缓冲区(缓解缓冲池索引的变化)
- 回滚段/撤消日志(事务隔离和脉动循环控制电路)
- 日志文件(通过日志缓冲区接收更改模糊检查点)
.ibd
文件(单独的表空间文件)
一旦文件系统变为只读,所有这些移动部件就会停止。
你应该备份数据
- 我会对所有数据进行 mysqldump
- 关闭 mysql 并获取 LVM 快照(如果适用)
- 关闭 mysql 并复制数据目录
备份完成后,立即进行磁盘维护。检查 RAID、磁盘控制器和磁盘本身。
以下是有关只读问题的其他一些 ServerFault 帖子