网上大部分的步骤是,经实测部分步骤是对的,下方详细说明。
1、停止mysql服务,添加innodb_force_recovery=1 ,启动mysql服务
2、创建新数据库,创建相同表结构的表(表结构必须相同)
3、执行alter table tb discard tablespace;
4、删除表的ibd文件(上方命令执行后会自动删除)
5、跨服务器复制表ibd文件
6、修改ibd文件权限
7、执行alter table tb import tablespace;
历程:
阿里云服务器mysql进程cpu占用很高,导致数据库几乎无法连接。使用了kill 杀掉mysql进程后,启动的时候出现了问题。
The server quit without updating PID file (/data/mysql/mysql.pid).
error日志里面大致如下:
2018-06-27 18:59:10 31816 [ERROR] Plugin 'InnoDB' init function returned error. 2018-06-27 18:59:10 31816 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 2018-06-27 18:59:10 31816 [ERROR] Unknown/unsupported storage engine: InnoDB 2018-06-27 18:59:10 31816 [ERROR] Aborting
启动不了,客户又急着用项目,你懂得,急坏了! 已是下班时间,客户一直催不能走啊......晚上8点了,还没搞定.................12点........................凌晨2点......饿坏了。
也不是没有进展,重命名,下图文件,mysql服务终于启动了。但是一些表,打开提示“table doesnt exist!”,难道数据库损坏了,吓坏了,怎办??
保险起见,备份了mysql数据文件的整个文件夹。
然后把数据文件下载到本地的linux服务器中,启动mysql,报表不存在或表空间不存在等。反正还是有问题。
140410533292800 [ERROR] InnoDB: Could not find a valid tablespace file for
按照其他博客指示,执行了如下相关命令。
innodb_force_recovery= 4 还原级别
chown -R mysql:mysql /data/mysql 文件夹用户组
chmod -R 0777 /var/lib/mysql 读写权限
mysqladmin -u root -p flush-tables 刷新权限
还是有问题,还出现,table is readonly,表里面内容编辑不了了,同事解决了3小时没搞定。
- 创建表(注意ROW_FORMAT=compact or ROW_FORMAT=DYNAMIC;)
-
ALTER TABLE user_subscribe_app_info DISCARD TABLESPACE;
- 复制问题数据库的ibd文件到新建的数据库目录中
- ALTER TABLE user_subscribe_app_info IMPORT TABLESPACE;
全程不用重启mysql,即可打开表看到数据。 此时,数据回来了,松了一口气!
恢复数据过程中有问题可联系 238611804@139.com
版权所有,请勿转载!
更多mysql、mariadb数据库文件损坏,修复方法及思路,请查看: