mysql从库故障恢复_mysql数据库故障修复一例

某线上服务器的mysql突然崩溃后,重启一直失败。查看mysql的error.log发现如下错误信息:

InnoDB: Serious error! InnoDB is trying to free page 716

InnoDB: though it is already marked as free in the tablespace!

InnoDB: The tablespace free space info is corrupt.

InnoDB: You may need to dump your InnoDB tables & recreate the whole

InnoDB: database!

尝试了各种修复方法均告失败,看来只能重建数据库了。

先添加如下设置到my.cnf:

# vi /etc/mysql/my.cnf

[mysqld]

innodb_force_recovery = 1

保存my.cnf退出vi后重启mysql:

# service mysql start

但重启依然失败。

按上述官方文档提示,尝试提高recovery级别到2:

[mysqld]

innodb_force_recovery = 2

这次重启成功了,并且可以正常查询,但此时mysql处于只读状态,无法做update、delete等写操作。下面开始尝试先备份再恢复全部数据库。

1、备份全部数据库

mysqldump -uroot -p -AER > /root/recovery_dump.sql

2、删除全部数据库

mysql> SET FOREIGN_KEY_CHECKS=0;

mysql> DROP DATABASE db1;

mysql> DROP DATABASE db2;

...

如果数据库太多,可使用如下命令批量删除。注意:应该替换为真实密码。

# mysql -uroot -p  -e "show databases" | grep -v Database | grep -v mysql| grep -v information_schema| grep -v test | grep -v OLD |gawk '{print "drop database " $1 ";select sleep(0.1);"}' | mysql -uroot -p

3、停止mysql。注意应该禁用innodb_fast_shutdown,确保mysql完全停止。

# mysql -uroot -p -e "SET GLOBAL innodb_fast_shutdown = 0"

# service mysql stop

4、完全删除mysql数据和日志

rm /var/lib/mysql/ibdata*

rm /var/lib/mysql/ib_log*

5、重启mysql并导入备份的数据:

# service mysql start

# mysql -uroot -p < /root/recovery_dump.sql

至此mysql终于启动正常了,数据也完全恢复成功。

阅读:66

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值