不知道是不是mysql(version 5.6.11)的bug,情况如下。今天当我更新mysql conf并杀死-9并重新启动mysqld时,我发现它不能再重新启动了。查看错误日志后,我发现以下内容:
2013-07-09 17:04:21 7872 [ERROR] InnoDB: Tried to read 1048576 bytes at offset 2097152. Was only able to read 917504.
然后我做了一个 strace 来跟踪哪个文件有问题。结果是ibdata1。
-rw-rw----. 1 mysql mysql 79691776 7月 9 16:51 ibdata1
好吧,为了性能,我将日志提交更改如下。
innodb_flush_log_at_trx_commit = 2
但我认为这不会导致数据丢失,因为在 mysql 重新启动期间操作系统不会重新启动。那么任何人都可以帮助我了解导致数据损坏的原因(也许是 kill -9?)以及如何恢复数据,非常感谢。
如果你没有备份。
我认为恢复该数据库的推荐方法是使用 innodb_force_recovery = 4(或更高值)启动 MySQL 并将数据库转储到 SQL。然后将其删除并从备份中恢复。而不是删除原始数据库,我更喜欢使用另一个名称或在另一个服务器中创建新数据库并首先检查内容。
应遵循的步骤
在 my.cnf 的 mysqld 部分添加一行
innodb_force_recovery = 4
,然后使用/etc/init.d/mysql restart
.进行备份。
在其他服务器上恢复它并验证内容。
另请查看强制 InnoDB 恢复。
更新:对于您的评论,如何在这方面取得进展,以免再次发生
你不应该杀死 MySQL 这可能会导致 MySQL 服务器崩溃,这不是一个好习惯,每当你进行任何配置更改时,你都应该按照以下步骤进行。
/etc/init.d/mysql stop