MySQL运维|服务器强制断电后导致mysql无法启动(终极方案)

1 强制InnoDB恢复

   找到mysql的my.cnf文件,添加一下子两个参数:
   [mysqld]
   innodb_force_recovery=6(这个值越小越安全,最开始建议设置为1,如果也无法启动再改为2,以此内推)
   innodb_purge_thread=0
注意:
只有在紧急情况下才能设置innodb_force_recovery大于0,默认值是0,不进行强制恢复的正常启动。innodb_force_recovery一共有6个级别,举例说明:值为3时包括了1和2的功能,值越小越安全;
关于innodb_force_recovery的值
1 (SRV_FORCE_IGNORE_CORRUPT):即使服务器检测到损坏的页仍让它运行。试图使SELECT* FROM tbl_name跳过损坏的索引记录和页,这样有助于转储表。
2 (SRV_FORCE_NO_BACKGROUND):阻止主线程和任何清除线程的运行。如果崩溃会在清除操作中发生,该恢复值会阻止它。
3 (SRV_FORCE_NO_TRX_UNDO):不要在崩溃恢复后运行事务回滚。
4 (SRV_FORCE_NO_IBUF_MERGE):阻止插入缓冲合并操作。如果它们会导致崩溃,不要做这些。不计算表统计。这个值可以永久损坏数据文件。使用这个值后,准备号删除并重建所有辅助索引。在MySQL5.6.15中,设置InnoDB为只读。
5 (SRV_FORCE_NO_UNDO_LOG_SCAN):在启动数据库时不查看撤消日志:InnoDB将即使未完成的事务也作为已提交。这个值可以永久损坏数据文件。在MySQL5.6.15中,设置InnoDB为只读。
6 (SRV_FORCE_NO_LOG_REDO):不要通过恢复对重做日志进行前滚。这个值可能永久损坏数据文件。数据库页被留在一个陈旧的状态,这反过来又可能带给B-trees和其它数据库结构更多的损坏。在MySQL5.6.15中,设置InnoDB为只读。 

2 重启mysql服务

执行:systemctl restart mysql

3 备份数据

1 测试数据库是否可以连通:mysql -uroot -p密码
2 如果可以正常连通则可以备份数据:mysqldump -uroot -p密码 --all-databases  > all_mysql_bak.sql (all_mysql_bak.sql文件就是所有的库数据和表数据,到时候回重新导入数据库中;)

4 清空数据

数据备份完之后,把数据库全部数据清空。
1 先停掉数据库服务:systemctl stop mysql
2 清空数据:mv /var/lib/mysql/ /var/lib/mysql.bak

5 恢复my.cnf配置

注释掉下面参数
  #innodb_force_recovery=6
  #innodb_purge_thread=0

6重启服务恢复数据

 1 重启mysql :systemctl restart mysql
 2 恢复密码:mysqladmin -u root password 密码
 3 恢复数据:mysql -uroot -p密码 -e "source all_mysql_bak.sql"
  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@hhw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值