作者: kideny 访问次数: 143 创建时间: 2023-09-23 23:16:11 更新时间: 2023-11-29 07:06:53
使用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,在面对大量数据更新的情况下,是真的容易崩溃。
数据库的内存,也要给够。
语言: zh-CN
翻译人员:
原作者:
转载地址:
源网址:
版权: 本站所有内容, 版权归原作者所有。发表原创内容将会获得现金奖励, 并且随着时间倍数增长, 请了解我们的内容奖励计划。