修复一个失败的InnoDB数据库。这个数据库因崩溃而无法启动。
第一步将InnoDB在force-recovery模式下开启,此时InnoDB虽开启了但是将忽略所有更新(UPDATEs)与插入(INSERTs)操作。
在/etc/my.cnf文件中添加此行:
innodb_force_recovery = 2
现在重启数据库:
/usr/local/bin/mysqld_safe &
(注意:如果MySQL没有启动,继续增加 innodb_force_recovery 的数值直到将参数值设为8( innodb_force_recovery =)
将所有数据保存到临时文件alldb.sql(下个命令需要花一定时间):
mysqldump --force --compress --triggers --routines --create-options -uUSERNAME -pPASSWORD --all-databases > /usr/alldb.sql
再次关闭数据库:
mysqladmin -uUSERNAME -pPASSWORD shutdown
删除数据库目录。(注意:我的数据目录在/usr/local/var下。你的设置有可能不同,确保删除的是正确的文件夹。)
rm -fdr /usr/local/var
重建数据库文件夹,安装MySQL基础表
mkdir /usr/local/var
chown -R mysql:mysql /usr/local/var
/usr/local/bin/mysql_install_db
chown -R mysql:mysql /usr/local/var
从/etc/my.cnf文件中删除innodb_force_recovery ,重启数据库:
/usr/local/bin/mysqld_safe &
导入所有备份文件(下一命令需要花一段时间):
mysql -uroot --compress < /usr/alldb.sql
最后,刷新MySQL的权限(因为我们也更新了MySQL的表)
/usr/local/bin/mysqladmin -uroot flush-privileges
注意:为了得到最好的结果,添加port=8819(或任何其他随机端口)到/etc/my.cnf文件中在重启MySQL之前,然后将--port=8819添加到mysqldump命令中。这种方法避免了MySQL数据库过于系繁忙当修复进程正在进行时。
作者 mushme