当我执行命令时服务 mysql 重启它在终端返回错误:
停止:未知实例:启动:作业启动失败
这是我的 error.log 文件。
200205 18:57:35 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
200205 18:57:35 [Note] Plugin 'FEDERATED' is disabled.
200205 18:57:35 InnoDB: The InnoDB memory heap is disabled
200205 18:57:35 InnoDB: Mutexes and rw_locks use GCC atomic builtins
200205 18:57:35 InnoDB: Compressed tables use zlib 1.2.8
200205 18:57:35 InnoDB: Using Linux native AIO
200205 18:57:35 InnoDB: Initializing buffer pool, size = 128.0M
200205 18:57:35 InnoDB: Completed initialization of buffer pool
InnoDB: Database page corruption on disk or a failed
InnoDB: file read of page 5.
InnoDB: You may have to recover from a backup.
200205 18:57:35 InnoDB: Page dump in ascii and hex (16384 bytes):
服务器中,已经有58%的可用空间。
我需要做什么才能使 MySQL 再次正常运行?
请帮帮我。我需要紧急帮助。
谢谢。
答案1
自从这个问题被提出已经过去了将近一年,但是它对于没有准备好的人来说会造成很大的压力。
当您看到类似的消息时InnoDB: Database page corruption on disk or a failed ... file read
,说明您正在查看几个问题之一:
- 硬盘已经物理损坏
- 当机器断电时,系统正处于长时间写入的状态,现在 InnoDB 表处于不完整状态
- 硬盘已满
- 硬盘的 inode 已用完
要解决这个问题,我发现只有两种方法可以持续工作。第一种方法是切换到热插拔服务器并继续运行,但对于大多数运行 MySQL 的人来说,这并不现实。第二种方法是设置 值,mysql_force_recovery
并mysqld.cnf
希望系统能够重建足够的自身资源以允许mysqldump
,然后恢复数据库。
操作方法如下:
打开终端或通过 SSH 进入服务器
打开
mysqld.cnf
文件为root
:sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
笔记:您可以使用任何您喜欢的文本编辑器。
vi
这更多的是关于肌肉记忆,而不是隐含的建议。将以下内容添加到文件末尾:
mysql_force_recovery=4
重新启动 MySQL:
sudo service mysql start
重建过程可能需要很长时间,具体取决于数据库的大小。我见过 5GB 的数据库需要长达 15 分钟才能恢复在线。一旦数据库再次可访问,请尽可能多地导出数据:
mysqldump -h {host} -u {user} -p --events --routines --triggers --all-databases > full-export.sql
将其恢复到测试/开发机器,查看缺少什么或需要修复什么,然后开始构建新的生产服务器。无论出于何种原因,在旧的服务器出现故障后,不要再信任它。