生产案例:某客户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: '.\gps\data_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;