服务器异常关闭导致msyql InnoDB数据库崩溃,数据库重启失败的问题

通过查看mysql日志  发现有mysqld got exception 0x80000003,然后去网络上搜索,有挺多这样的问题.总结就是需要先把数据库备份然后重新搞一下.此时数据库已经无法重启,如何才能备份呢?

在mysql的配置文件my.cnf里找到 [mysqld]字段下,添加 innodb_force_recovery=1:

如果innodb_force_recovery = 1不生效,则可尝试2——6几个数字
然后重启mysql,重启成功。然后使用mysqldump或 pma 导出数据,执行修复操作等。修复完成后,把该参数注释掉,还原默认值0。
配置文件的参数:innodb_force_recovery
innodb_force_recovery影响整个InnoDB存储引擎的恢复状况。默认为0,表示当需要恢复时执行所有的恢复操作(即校验数据页/purge undo/insert buffer merge/rolling back&forward),当不能进行有效的恢复操作时,mysql有可能无法启动,并记录错误日志;
innodb_force_recovery可以设置为1-6,大的数字包含前面所有数字的影响。当设置参数值大于0后,可以对表进行select,create,drop操作,但insert,update或者delete这类操作是不允许的。

1(SRV_FORCE_IGNORE_CORRUPT):忽略检查到的corrupt页。
2(SRV_FORCE_NO_BACKGROUND):阻止主线程的运行,如主线程需要执行full purge操作,会导致crash。
3(SRV_FORCE_NO_TRX_UNDO):不执行事务回滚操作。
4(SRV_FORCE_NO_IBUF_MERGE):不执行插入缓冲的合并操作。
5(SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交。
6(SRV_FORCE_NO_LOG_REDO):不执行前滚的操作。 
重启mysql

这时只可以执行select,create,drop操作,但不能执行insert,update,delete操作

执行逻辑导出,完成后将innodb_force_recovery=0,innodb_purge_threads=1,然后重建数据库,最后把导出的数据重新导入

三、解析方案
一般修复方法参考:

1、配置my.cnf

配置innodb_force_recovery = 1或2——6几个数字,重启MySQL

2、导出数据脚本

mysqldump -uroot -p123 test > test.sql
导出SQL脚本。或者用Navicat将所有数据库/表导入到其他服务器的数据库中。
注意:这里的数据一定要备份成功。然后删除原数据库中的数据。

3、删除ib_logfile0、ib_logfile1、ibdata1

备份MySQL数据目录下的ib_logfile0、ib_logfile1、ibdata1三个文件,然后将这三个文件删除

4、配置my.cnf

将my.cnf中innodb_force_recovery = 1或2——6几个数字这行配置删除或者配置为innodb_force_recovery = 0,重启MySQL服务

5、将数据导入MySQL数据库

mysql -uroot -p123 test < test.sql; 或者用Navicat将备份的数据导入到数据库中。
此种方法下要注意的问题:
  1、ib_logfile0、ib_logfile1、ibdata1这三个文件一定要先备份后删除;
  2、一定要确认原数据导出成功了
  3、当数据导出成功后,删除原数据库中的数据时,如果提示不能删除,可在命令行进入MySQL的数据目录,手动删除相关数据库的文件夹或者数据库文件夹下的数据表文件,前提是数据一定导出或备份成功。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL数据库作为广泛使用的开源关系型数据库,可能会遇到各种故障。这里列举一些常见的MySQL数据库故障及其原因: 1. **连接错误(Connect Error)**:可能是由于网络问题服务器未启动、防火墙阻止或MySQL配置文件错误导致。解决方法包括检查网络连接、重启MySQL服务和检查配置文件。 2. **锁定表或事务冲突(Table Locking)**:如果并发访问过多,可能导致死锁或表被锁定。可通过优化查询、设置合适的锁定策略或增加innodb_buffer_pool_size缓解。 3. **内存不足(Memory Exhaustion)**:当内存分配超过限制时,可能会导致崩溃。检查my.cnf中的`key_buffer_size`、`max_heap_table_size`等参数,并确保有足够的物理内存。 4. **磁盘空间不足(Insufficient Disk Space)**:数据库文件无法写入,需要释放空间或增大存储设备的可用空间。 5. **InnoDB表错误(InnoDB Table Corruption)**:数据损坏可能导致读取错误。应备份重要数据并使用`innodb_force_recover`选项检查修复。 6. **日志满(Log File Full)**:二进制日志或错误日志满可能导致事务无法提交或回滚。定期清理日志并检查日志旋转设置。 7. **SQL语句错误(Syntax Error or Query Failure)**:用户输入的SQL语句可能有误,如拼写错误、语法不正确或超出权限。应检查SQL语句并确保拥有足够的执行权限。 8. **服务不稳定(Server Crashes)**:硬件故障、软件版本冲突或配置错误可能导致服务崩溃。定期检查系统健康状态,及时更新补丁。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值