记录技术收获,分享个人心得

人生如负重远行,不可急于求成

Mysql无法启动Innodb引擎表损坏修复(附带shell)

     Mysql无法启动,检查报错日志发现innodb提示有某张表数据损坏,这种情况通常发生在系统强制重启,断电并且数据在大量写入时候。需要对数据库进行修复。本文针对修复流程进行一下梳理,并且整理了一个shell脚本,目前暂时支持wdcp面板系统,后期准备升级为支持linux下安装的mysql数据库。注意:本文操作涉及数据安全,请操作前务必备份所有重要数据。innodb损坏的情况很多,并不一定都适合这个方式修复,最好根据报错日志进行分析,断定了原因再进行修复工作。

1、shell脚本修复(支持wdcp面板):

复制下面命令之后ssh登录运行

wget http://www.gaoshan.me/download/shell/recoverinnodb.sh && chmod +x recoverinnodb.sh && bash recoverinnodb.sh

《Mysql无法启动Innodb引擎表损坏修复(附带shell)》

为了避免导入过程的权限问题,这里需要输入mysql的root密码来恢复,脚本只需要你输入root密码以及异常库进行修复。操作时候会将数据库先进行备份到数据目录下以bk开头的目录,以备不时之需。

2、手工操作流程

(1)检查报错日志确定损坏原因

(2)备份重要数据

(3)修改my.cnf文件,在[mysqld]配置下添加

innodb_force_recovery=6

(4)启动mysql服务,运行mysqldump导出数据库脚本

mysqldump -u用户名 -p密码 –databases 数据库名 > 脚本名称.sql

注意如果用普通用户而非root,可能导出失败,请加上 –skip-lock-tables 参数,据我测试wdcp创建的数据库用户都没有操作锁的权限,所以最好用root来操作。

(5)如果成功导出sql,需要删除数据库重新创建。

mysql -u用户名 -p密码 
use 数据库名
DROP DATABASE 数据库名;
CREATE DATABASE 数据库名;
exit

默认创建后用户权限还是保留的,所以不用赋权了。

(6)修改my.cnf文件,注释或者删除innodb_force_recovery=6这条配置。重启mysql。

(7)成功重启mysql后,进行数据导入

mysql -u用户名 -p密码 –default-character-set=utf8 数据库名 < 脚本名称.sql

注意–default-character-set=utf8也可改为gbk,具体看程序的数据库编码,另外这里的用户名建议使用root来导入,命令行dump的脚本,会在操作数据导出时候有锁表语句,普通用户基本没有操作lock的权限。

————-

这里有篇关于mysqldump的详细研究不错,可查阅:https://www.cnblogs.com/digdeep/p/4898622.html


点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

hi~

你好,欢迎来到我的博客,欢迎留言。

快速搜索:







Generic selectors

Exact matches only


Search in title


Search in content



Search in posts


Search in pages

欢迎关注我:

微博
steam
网易云音乐
QQ
500px

常用命令:

http://www.gaoshan.me/cmd