如何修复Docker MySQL容器出现的[sequence number 29689014 is in the future!]错误
MySQL 8.0 Docker容器启动失败修复方案
从日志可知错误分为两类,可按如下步骤修复:
无历史数据需要保留的场景
直接删除MySQL挂载的本地数据目录/对应Docker数据卷,重新执行docker-compose up -d即可,容器会自动初始化全新的数据库实例。
需要保留历史数据的场景
第一步:修复lower_case_table_names配置不匹配错误
该错误是启动失败的直接触发原因:MySQL 8.0要求lower_case_table_names参数必须和数据库首次初始化时的配置完全一致,不允许初始化后修改。你当前启动配置中该参数值为0,和原有数据字典记录的2冲突,需调整docker-compose.yml配置:
services: mysql_3sem: # 保留你原有镜像、环境变量、挂载卷等配置不变 command: --lower_case_table_names=2
第二步:修复InnoDB表空间LSN超前损坏问题
日志提示的LSN超前属于InnoDB表空间逻辑损坏,需通过强制恢复模式修复:
- 在上述command参数后追加强制恢复配置,初始先使用最低恢复等级
1:command: --lower_case_table_names=2 --innodb_force_recovery=1 - 执行
docker-compose up -d启动容器,若启动失败可逐步提升恢复等级至2~6(等级越高,可恢复的完整数据越少,优先从低等级尝试) - 容器启动成功后立即执行全库逻辑备份,备份完成后删除原有损坏的数据目录,移除配置中的
--innodb_force_recovery参数,用备份数据恢复到新初始化的实例中即可。
提示:强制恢复模式仅允许执行数据导出操作,不要在该模式下执行业务写入操作,避免损坏进一步扩大。
内容的提问来源于stack exchange,提问作者Alexander Stub Michelsen
相关产品推荐
相关产品推荐

