MYSQL随笔四 MySQL误删除ibd文件导致数据库无法启动

Posted 哭泣的馒头

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL随笔四 MySQL误删除ibd文件导致数据库无法启动相关的知识,希望对你有一定的参考价值。

1、由于磁盘爆满导致数据库宕机,将数据库服务器 mysql/data 文件夹中部分表的.ibd删除释放空间,导致数据库服务器无法重启,用service mysql restart 启动,如果能启动最好,不能启动报错 提示“ not updating without mysqld.pid ” 类似的报错,找解决方法无用。

2、数据回滚的时候,部分表的ibd无法回滚数据

找到my.cnf 文件,先将innodb_force_recovery 值设为 3,设置为放弃事务回滚。

innodb_force_recovery 值 具体区别详见下表

1. (SRV_FORCE_IGNORE_CORRUPT):忽略检查到的corrupt页。
2. (SRV_FORCE_NO_BACKGROUND):阻止主线程的运行,如主线程需要执行full purge操作,会导致crash。
3. (SRV_FORCE_NO_TRX_UNDO):不执行事务回滚操作。
4. (SRV_FORCE_NO_IBUF_MERGE):不执行插入缓冲的合并操作。
5. (SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交。
6. (SRV_FORCE_NO_LOG_REDO):不执行前滚的操作。

3、设置为3可以启动起来

此时数据库只有查询操作,不能执行增删改(insert,update,delete)的操作

4、使用mysqldump -d参数将建表语句备份出来

5、恢复

(1)mysql开启安全路径
vim /etc/my.cnf --->添加以下配置
[mysqld]
secure-file-priv=/tmp

(1)创建和原来一模一样的库和表
(2)新表表空间脱离sql
select concat(alter table ,table_schema,.,table_name, discard tablespace;) from information_schema.tables where table_schema=qingchen into outfile /tmp/discard.sql;
(3)新表表空间重新加入sql
select concat(alter table ,table_schema,.,table_name, import tablespace;) from information_schema.tables where table_schema=qingchen into outfile /tmp/import.sql;
source /tmp/import.sql
(4)脱离表空间
source /tmp/discard.sql
#会将新表的ibd全部删掉
(5)将旧的ibd复制到新库目录下
(6)重新加入表空间
source /tmp/import.sql
##一次不要执行太多,如果单个表的数据量上G,最好单独执行加入表空间

以上是关于MYSQL随笔四 MySQL误删除ibd文件导致数据库无法启动的主要内容,如果未能解决你的问题,请参考以下文章

Mysql 通过frm&ibd 恢复数据

Mysql 通过frm&ibd 恢复数据

RDS中的.frm和.ibd文件转换为sql文件

mysql ibd文件 怎么删除

Mysql ibd文件恢复指南

mysql数据库frm文件和ibd文件可以删除吗