生产案例:某客户MySQL服务器断电起不来恢复处理

背景

有朋友找说他们MySQL数据库由于断电后服务器起不来了,版本MySQL5.7.4,服务器windows server2012,没有备份,没有主从,没有开启binlog,里面有四五年的分区表。

思路一:

首先去看error日志,发现日志里全是read only分区表空间,无法打开库,如下:

[ERROR] InnoDB: Operating system error number 2 in a file operation.
2021-06-28T10:02:52.331948Z 0 [Note] InnoDB: Some operating system error numbers are described at http://dev.mysql.com/doc/refman/5.7/en/operating-system-error-codes.html
2021-06-28T10:02:52.333886Z 0 [ERROR] InnoDB: Cannot open datafile for read-only: '.gpsdata_gps_day#p#day_am.ibd'

 想到就是断电后导致日志缓存刷新错乱报错,所以尝试修改下面参数1,2,3,4,5,6来启动去先备份数据,还是不行

innodb_force_recovery=0

思路二:

实在启动不了,只想想办法如何快速把数据恢复了,因为什么备份都没有,所以只能用表空间ibd来恢复了。

1、装一个Linux虚拟机,利用MySQL的frm文件来找回建表语句

yum install mysql-connector-python-2.1.8-1.el7.x86_64.rpm
yum install mysql-utilities-1.6.5-1.el7.noarch.rpm

2、把frm后缀的文件全部上传到一个文件夹/root/gaohuirong

3、mysqlfrm恢复建表语句

注:分区表提取不出来,还有提取出来的表可能有一些特殊字符检查一下

mysqlfrm --diagnostic /root/gaohuirong/ > createtable.sql

4、复制原来MySQL5.7.4的软件搭建一个新的MySQL环境

1)复制软件

2)安装MySQL:

mysqld --initialize-insecure --conlose

mysqld --install mysql1

net start mysql1

5、再新的环境上创建提取的表格

source createtable.sql

7、把新建的表的表空间discard去除:

alter table 表名 discard tablespace;

8、把之前的ibd文件拷贝到新建对应的目录,然后import导入表空间数据

alter table 表名 import tablespace; 

原文地址:https://www.cnblogs.com/galengao/p/14958760.html