ibdata文件中的日志序列号不匹配

时间:2013-10-15 10:13:23

标签: mysql recovery

每当我启动Mysql数据库时,我都会在error_log中看到这一点:

  

131015 12:07:06 [注意]插件'FEDERATED'被禁用。 131015 12:07:06   InnoDB:InnoDB内存堆被禁用131015 12:07:06 InnoDB:   互斥锁和rw_locks使用Windows互锁功能131015 12:07:06   InnoDB:压缩表使用zlib 1.2.3 131015 12:07:06 InnoDB:   初始化缓冲池,大小= 16.0M 131015 12:07:06 InnoDB:   完成初始化缓冲池131015 12:07:06 InnoDB:   最高支持的文件格式是Barracuda。 InnoDB:日志序列   ibdata文件中的数字与InnoDB不匹配:日志序列号   在ib_logfiles中! 131015 12:07:06 InnoDB:数据库没有关闭   正常下来! InnoDB:开始崩溃恢复。 InnoDB:阅读   来自.ibd文件的表空间信息... InnoDB:恢复   双重写入InnoDB中可能的半写数据页:   缓冲... 131015 12:07:07 InnoDB:等待后台线程   开始131015 12:07:08 InnoDB:5.5.32开始;日志序列号   1595695 131015 12:07:08 [注意]服务器主机名(bind-address):   '0.0.0.0'; port:3306 131015 12:07:08 [注意] - '0.0.0.0'解析为   '0.0.0.0'; 131015 12:07:08 [注意]在IP上创建的服务器套接字:   '0.0.0.0'。

我已经尝试过mysqlcheck -u root -p --repair -A来修复数据库。这会报告所有表格都没问题。

我也尝试过将innodb_force_recovery设置为4

我尝试过SET GLOBAL innodb_fast_shutdown = 1;并关闭数据库。

这些都不会使错误消失。

如何修复数据库中的InnoDB表?

3 个答案:

答案 0 :(得分:0)

如果MySQL崩溃,则LSN(日志序列号)可能不匹配。 但如果崩溃恢复过程完成,你应该没问题。如果任何事务修改页面中的数据,则新的LSN将写入页眉。

我会调查每次重启时MySQL崩溃的原因。据我所知/etc/init.d/mysql停止可能需要很长时间,所以如果重新启动服务器操作系统可能只是杀死mysqld。在这种情况下,您应该在重新启动整个服务器之前手动停止MySQL。

答案 1 :(得分:0)

我遇到了同样的问题。

在我的情况下,我通过XAMPP在Windows上运行MySQL并使用XAMPP控件来启动/停止服务器。

看来XAMPP关机控制正在杀死MySQL服务器,而不是请求关闭。

解决方案

  1. (可选)在my.ini中设置innodb_fast_shutdown=0以配置mysqld以执行完整摊牌
  2. 使用您的root用户详细信息创建一个内容为mysqladmin --user=[user] --password=[password] shutdown替换[user][password]的.bat文件
  3. 如果要关闭MySQL服务器,只需运行.bat文件即可。 XAMPP控制面板检测到关机,因此您可以使用XAMPP控件重新启动。

    如果你现在看看你的日志,你会发现错误消失了

    或者更好的是,只需将mysql安装为Windows服务。

    参考文献:

    1. innodb_fast_shutdown http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_fast_shutdown
    2. mysqladmin shutdown - http://dev.mysql.com/doc/refman/5.7/en/server-shutdown.html

答案 2 :(得分:0)

我通过删除"Xampp\mysql\data"中的某些文件来解决我的问题:

  • ib_logfile0
  • ib_logfile1
  • ibdata1

**确保通过以下方式备份数据库:

[mysqld]
innodb_force_recovery = 2

(此命令将帮助您以只读模式启动Mysql。)