InnoDB Table flags are 0 in the data dictionary but the flags in file ./ibdata1 are 0x4800!

bug#

系统 Mac OS docker-compose

修改docker-compose里的mysql版本,从8.0降到5.7

InnoDB: Table flags are 0 in the data dictionary but the flags in file ./ibdata1 are 0x4800!

原因#

之前docker已经运行了一个mysql 8.0 的容器,并且挂载到了主机目录。

原来安装的是mysql8.0版本,比现在的5.7版本要高,但在高版本数据库时创建的一些数据库数据都还在。

使用的是高版本的InnoDB引擎,而低版本的数据库服务还是指向了这些数据,但是一些版本的数据格式不同,这个时候,我们只要把高版本的数据删掉就可以了,删掉后重新启动mysql就可以了。

解决#

删除高版本数据库时创建的数据,不是仅仅删除创建的一些数据库,而是把整个mysql的数据目录全部删除。

  1. 因为我是用docker跑的,找到挂载的目录
volumes:
      - ./data/mysql_db:/var/lib/mysql

进入到docker-compose.yml文件目录

rm -rf data

再次执行docker-compose up
成功

  1. 如果你是直接安装在主机上
cd /var/lib/mysql
sudo rm -R mysql

重启即可

posted @   李帆1998  阅读(2761)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示
主题色彩