记一次断电导致mysql崩溃的恢复办法

异常断电导致mysql库表损坏,并且在/etc/my.cnf配置文件中添加innodb_force_revocery=1到6均无法启动

此方法会导致存储过程、函数丢失,谨慎操作。
此方法会导致存储过程、函数丢失,谨慎操作。
此方法会导致存储过程、函数丢失,谨慎操作。

解决步骤如下:

1、进入目录/var/lib/mysql 移动此下所有数据库目录和ibdata1文件到其他目录进行备份 ,不需要备份mysql、sys、performance_schema、information_schema四个目录

2、删除rm -rf /var/lib/mysql

3、启动systecmctl start mysqld 此时数据库会重新初始化,并生成 /var/lib/mysql 和新的数据库密码,使用/var/log/mysqld.log中的新密码登录数据库,修改密码
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘MyNewPass4!’;

4、退出并关闭数据库systecmctl stop mysqld
5、删除rm -f /var/lib/mysql/ibdata1 /var/lib/mysql/ib_log*
6、将备份的数据库目录和ibdata1文件移动到/var/lib/mysql/ 下
7、启动数据库systecmctl start mysqld ,注意配置文件/etc/my.cnf中不要添加innodb_force_revocery参数,此时数据库启动日志中会提示有损坏库表需要修复,不用管,等待启动即可。

8、开始修复损坏的表
执行修复数据库命令mysqlcheck -uroot -p -r --databases 数据库名,此时注意观察日志/var/lib/mysqld.log一旦出现重启或乱码报错,查看乱码的前两行,会显示表名称,将其记录下来,再在/etc/my.cnf配置文件中添加innodb_force_revocery=1,重启数据库进入导出该表后删除。去掉配置文件中的innodb_force_revocery=1,再次重启后进入数据库导入删除的表。反复执行此步骤直至mysqlcheck数据库不在重启和报错。

其他说明:

第8步是使用mysqlcheck检查修复一遍所有的库表。也可通过其他方式,例如一张表一张表的打开或者select,出现错误时再通过单独将表导出、删除、再导入来修复。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值