分享到: 分享到QQ  分享到Twitter

作者: kideny    访问次数: 1103 创建时间: 2023-09-23 23:16:11 更新时间: 2024-07-21 03:08:17

使用MySQL容器,已经好多年了,一直被这个问题困扰。数据更新的时候,导致MySQL容器崩溃。报错信息为:[InnoDB] [FATAL] Tablespace id is xx in the data dictionary ,but in file .\test\xxx.ibd it is yyy!。

这两天总算把这个问题解决了,不过解决问题的核心,还是要经常备份数据和表结构。下面分享,在数据库崩溃无法启动的情况下,如何解决这种问题。

 

第一步:删除容器内,已经坏损的表

 

以我使用的laradock为例,数据库文件在

C:\Users\你的用户名\.laradock\data\mysql\你的数据库名\xxx.ibd

 

第二步:删除mysql容器和mysql的镜像

 

千万不要忘记,删除mysql的镜像。

 

第三步:开启mysql的配置文件,开启恢复模式

 

修改mysql容器的配置文件my.cnf,修改强制恢复模式为2,没有就添加这一行。

innodb-force-recovery=2

 

第四步:重构MySQL镜像并启动MySQL

 

docker compose build mysql 先编辑MySQL镜像,再启动,或者直接用docker compose up -d mysql。

 

第五步:MySQL重新启动后,删除原来的数据表

 

进入数据库后,把报错的数据表,给删除。

 

第六步:把备份的表结构,重新导入数据库

 

在MySQL强制恢复的模式2中,不可以导入数据,但是可以导入数据库结构。

 

第七步:成功导入表数据库结构后,再次删除MySQL容器和镜像

 

删除容器和镜像后,再注释掉配置文件的 innodb-force-recovery=2 这一行。

 

第八步:重构MySQL镜像并启动

 

docker compose up -d mysql,这样MySQL就可以在正常模式下,重启动了。

 

第九步:导入备份的数据库

 

现在,已经可以成功导入备份的数据库了。数据库崩溃的问题,就解决了。

 

总结

 

一定要多注意备份,每次在本地进行大量数据更新之前,一定要注意备份。

容器类的MySQL,在面对大量数据更新的情况下,是真的容易崩溃。

数据库的内存,也要给够。

 

 

 

 

季度最有价值文章

月度最有价值文章

帖子投票

名称 是否有价值
kideny

投票统计

是否原创: 100 %

100 % Complete (success)

是否有价值: 100 %

100% Complete

是否有素质: 100 %

100% Complete (warning)

是否合法: 100 %

100% Complete

   群组工具

   外部链接