一卷旌收千骑虏,万全身出百重围。这篇文章主要讲述MYSQL随笔四 MySQL误删除ibd文件导致数据库无法启动相关的知识,希望能为你提供帮助。
1、由于磁盘爆满导致数据库宕机,将数据库服务器 mysql/data 文件夹中部分表的.ibd删除释放空间,导致数据库服务器无法重启,用service mysql restart 启动,如果能启动最好,不能启动报错 提示“ not updating without mysqld.pid ” 类似的报错,找解决方法无用。
【MYSQL随笔四 MySQL误删除ibd文件导致数据库无法启动】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随笔三 服务器停电重启,mysqlPID无法启动
- MYSQL随笔五 截取指定字符串
- LINUX随笔十三 windows取消远程桌面连接加密
- MYSQL随笔六 mysql导出表csv
- MYSQL随笔七 Column count of mysql.user is wrong
- MYSQL随笔八 does not exist or is not executable
- Flutter 专题79 图解 Android Native 集成 FlutterBoost 小尝试#yyds干货盘点#
- 不懂DHCP服务,来找我
- MYSQL随笔九 binlog日志清理