脚本下载&执行:
wget http://www.gaoshan.me/download/shell/ibdatarebuild.sh && chmod +x ibdatarebuild.sh && bash ibdatarebuild.sh
执行输入root密码即可自动执行啦
======================
之前有写过一个2个关于mysql数据表损坏修复的文章:
1、innodb单个库损坏的修复:http://www.gaoshan.me/operation/optech/shell/recover-innodb-linux.html
2、ibdata1文件损坏的修复:http://www.gaoshan.me/website/databases/mysql/mysql-shutdown.html
在linux上也遇到了类似的问题,于是花了两天写了一个小shell脚本,能批量的全部重建服务器上的mysql数据库,在服务器上数据库很多的情况下,可以避免手工操作的烦恼
脚本适用于:ibdata1文件损坏,非单个库损坏,mysql错误日志无明显的单个库报错,目前只支持centos系统,在wdcp和宝塔面板集成环境中可正常使用
======================
日志特征:
InnoDB: Assertion failure in thread 139743447295744 in file trx0purge.cc line 840
InnoDB: Failing assertion: purge_sys->iter.trx_no <= purge_sys->rseg->last_trx_no
InnoDB: Doing recovery: scanned up to log sequence number 20293596130
======================
恢复流程的文字说明(脚本也是基于此流程书写):
1、备份Mysql数据目录data或者var等
2、修改my.cnf文件,增加innodb_force_recovery=6,innodb_purge_threads=0,低于5.5的库不支持innodb_purge_threads参数,程序中做了判断
3、启动mysql服务,全部修复一次数据库(避免出现table crash导致无法导出sql文件的问题)命令:mysqlcheck -A -r -uroot -p密码 修复所有库
4、逐个导出每个数据库为sql脚本文件mysqldump -uroot -p –skip-lock-tables 数据库名 > sql脚本名.sql
5、使用mysql -p -uroot登录,show databases;记录所有的额外建立的数据库名
6、逐个drop掉数据库,命令:drop database 库名;
7、停止mysql服务,删除mysql目录下的ibdata1,ib_logfile0,ib_logfile1文件,重启mysql服务
8、使用mysql -p -uroot登录,逐个新建之前的库,命令create database 库名;
9、逐个导入之前备份的mysql的sql脚本,完成重建