InnoDB: corruption in the InnoDB tablespace

磁盘空间满和断电都可能导致mysql无法启动,报错如下:

InnoDB: corruption in the InnoDB tablespace. Please refer to
InnoDB: http://dev.mysql.com/doc/refman/8.0/en/forcing-innodb-recovery.html
InnoDB: about forcing recovery.
20241031 10:54:24 [ERROR] mysqld got signal 6 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
To report this bug, see http://kb.askmonty.org/en/reporting-bugs
We will try our best to scrape up some info that will hopefully help
diagnose the problem, but since we have already crashed,
something is definitely wrong and this may fail.

处理步骤:

添加innodb_force_recovery参数的my.cnf强制启动-->导出全部数据库-->去掉innodb_force_recovery参数的my.cnf-->删除mysql数据目录重新初始化-->导入数据sql。

处理过程:

docker ps检查运行的容器

1.此次my.cnf设置innodb_force_recovery = 3后成功启动(正常从1-6按顺序尝试)

2.导出全部数据库:建议写成脚本后台跑

docker exec mysql-master-dev mysqldump  -h127.0.0.1 -uroot -pxxx  --log-error=/var/lib/mysql/db_bak_dby_log.err --ssl-mode=DISABLED  --all-databases >./all.sql

3.关闭容器:

docker-compose -f docker-compose.yml down

4.进入data数据目录,删除所有文件rm -rf *,然后启动容器,自动重新初始化:

docker-compose -f docker-compose.yml up -d

5.进入容器检查mysql:

docker exec -it mysql-master-dev /bin/bash

root@14f086133dda:/# mysql -h127.0.0.1 -uroot -pxxx
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.26 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| |没有新库。

如果导出的脚本没有创建库命令,则先把库建上。create database db;

6.导入数据:使用脚本后台方式,避免网络超时断开。

[root@localhost bak]# cat db.sh
docker exec -i mysql-master-dev mysql -h127.0.0.1 -uroot -pxxx < all.sql

[root@localhost bak]# chmod +x db.sh

[root@localhost bak]# nohup ./db.sh > ./dby.log &

查看导入进度:

pidstat -d 1可查看io运行的情况。

相关参考:

突发!某大厂机房掉电,MySQL数据库无法启动,紧急恢复过程...

Mysql异常停止之后的恢复操作

记一次断电导致的mysql数据恢复问题

iot-database | 2025-07-04T08:35:21.579433Z 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority(). iot-database | 2025-07-04T08:35:21.591130Z 0 [ERROR] [FATAL] InnoDB: Table flags are 0 in the data dictionary but the flags in file ./ibdata1 are 0x4800! iot-database | 2025-07-04 08:35:21 0x7fb876c66880 InnoDB: Assertion failure in thread 140430243424384 in file ut0ut.cc line 921 iot-database | InnoDB: We intentionally generate a memory trap. iot-database | InnoDB: Submit a detailed bug report to http://bugs.mysql.com. iot-database | InnoDB: If you get repeated assertion failures or crashes, even iot-database | InnoDB: immediately after the mysqld startup, there may be iot-database | InnoDB: corruption in the InnoDB tablespace. Please refer to iot-database | InnoDB: http://dev.mysql.com/doc/refman/5.7/en/forcing-innodb-recovery.html iot-database | InnoDB: about forcing recovery. iot-database | 08:35:21 UTC - mysqld got signal 6 ; iot-database | This could be because you hit a bug. It is also possible that this binary iot-database | or one of the libraries it was linked against is corrupt, improperly built, iot-database | or misconfigured. This error can also be caused by malfunctioning hardware. iot-database | Attempting to collect some information that could help diagnose the problem. iot-database | As this is a crash and something is definitely wrong, the information iot-database | collection process might fail.
最新发布
07-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值