Ubuntu20.04 AWS EC2下Docker部署MySQL8.0.26报lower_case_table_names错误如何解决
MySQL 8.0 Docker容器lower_case_table_names配置冲突解决方案
问题根因
MySQL 8.0及以上版本强制要求lower_case_table_names参数必须在数据库首次初始化(数据目录为空时)完成配置,参数值一旦随数据字典写入存储后,后续启动时再修改参数就会触发「服务配置与数据字典配置不匹配」的报错。
你本地macOS环境可正常运行,是因为macOS默认文件系统大小写不敏感,MySQL首次初始化时默认将lower_case_table_names设为2;而Ubuntu系统文件系统默认大小写敏感,MySQL默认参数值为0。你遇到报错的核心原因是当前挂载的./dbdata目录中已经存在旧的初始化数据,其中写入的lower_case_table_names值和你启动时指定的参数不一致。
无存量数据的修复步骤
如果服务器上没有需要保留的业务数据,直接按以下步骤操作:
- 清理旧容器与残留数据
# 停止并删除当前项目的所有容器及关联匿名卷 docker-compose down -v # 彻底删除本地挂载的数据库目录,清空旧的初始化数据 sudo rm -rf ./dbdata
- 确认
docker-compose.yml配置
你现有配置中的command: --lower_case_table_names=1无需修改,保持即可。 - 重新启动服务
docker-compose up -d
有存量数据的迁移步骤
如果本地mac环境的数据库有需要同步到服务器的业务数据,不能直接拷贝dbdata目录,需按以下步骤操作:
- 在本地正常运行的MySQL容器中导出全量备份
docker exec -it <本地MySQL容器名> mysqldump -u root -p --all-databases > backup.sql
- 按上述无存量数据的步骤完成服务器端MySQL容器的初始化启动
- 将备份数据导入服务器运行中的MySQL容器
docker exec -i <服务器MySQL容器名> mysql -u root -p < backup.sql
内容的提问来源于stack exchange,提问作者Chitrang
相关产品推荐
相关产品推荐

