cd /root/ wget https://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-utilities-1.6.5-1.el7.noarch.rpm wget https://dev.mysql.com/get/Downloads/Connector-Python/mysql-connector-python-2.1.7-1.el7.x86_64.rpm yum install mysql-utilities-1.6.5-1.el7.noarch.rpm mysql-connector-python-2.1.7-1.el7.x86_64.rp
mkdir /root/corrupt_mysql cp -r /var/lib/mysql /root/corrupt_mysql/
systemctl start mysql
If the database does not start, then gradually increase the innodb_force_recovery parameter from 2 and higher in /etc/my.cnf
mysql -e'grant all on . to frm@localhost identified by "MysqlFRMSecret678";'
DATABASE=brokendbname for file in $(ls /root/corrupt_mysql/mysql/${DATABASE}/*.frm); do mysqlfrm --server=frm:MysqlFRMSecret678@localhost:/var/lib/mysql/mysql.sock --diagnostic $file | grep -v "WARNING" >> /root/corrupt_mysql/${DATABASE}_create.sql ; done sed -i 's##utf8#g' /root/corrupt_mysql/${DATABASE}_create.sql
mysql -e'drop database ${DATABASE};' rm -rf /var/lib/mysql/${DATABASE}/
systemctl restart mysql
mysql -e'create database ${DATABASE};' mysql --force ${DATABASE} < /root/corrupt_mysql/${DATABASE}_create.sql
for table in $(mysql -e 'show tables from ${DATABASE};' | grep -v "Tables_in"); do mysql ${DATABASE} -e"ALTER TABLE $table DISCARD TABLESPACE;"; done for table in $(mysql -e 'show tables from ${DATABASE};' | grep -v "Tables_in"); do rsync -avzP /root/corrupt_mysql/mysql/${DATABASE}/$table.ibd /var/lib/mysql/${DATABASE}/ ; done chown -R mysql:mysql /var/lib/mysql/ for table in $(mysql -e 'show tables from ${DATABASE};' | grep -v "Tables_in"); do mysql ${DATABASE} -e"ALTER TABLE $table IMPORT TABLESPACE;"; done
Restart mysql
systemctl restart mysql