如何解决Percona 5.7 Docker容器中MySQL 1007/1008异常?
Docker中Percona 5.7数据库异常处理:无法正常创建/删除
digitalContent库 异常现象
在Docker容器中运行Percona 5.7时遇到矛盾性错误:
- 执行
drop database digitalContent;,报错:ERROR 1008 (HY000): Can't drop database 'digitalcontent'; database doesn't exist - 执行
CREATE DATABASE digitalContent;,报错:ERROR 1007 (HY000): Can't create database 'digitalContent'; database exists - 执行
show databases;却无法看到digitalContent或digitalcontent数据库
异常原因
核心问题是MySQL数据库名的大小写敏感性:
Percona 5.7在Linux环境(Docker容器默认基于Linux)下,数据库名默认区分大小写,但底层文件系统会将数据库文件夹名存储为小写(即digitalcontent)。同时information_schema或mysql系统库中可能残留了该数据库的元数据记录,但由于大小写显示规则,show databases;无法正常展示,最终导致创建/删除操作的矛盾报错。
解决办法
1. 检查并清理系统库残留元数据
进入MySQL命令行,执行以下查询确认元数据残留:
SELECT schema_name FROM information_schema.schemata WHERE schema_name LIKE '%digitalcontent%'; SELECT db FROM mysql.db WHERE db LIKE '%digitalcontent%';
若查询到digitalcontent(小写)的记录,执行清理操作:
DELETE FROM mysql.db WHERE db = 'digitalcontent'; FLUSH PRIVILEGES; DROP DATABASE IF EXISTS `digitalcontent`;
2. 调整大小写敏感配置(避免后续复发)
若希望彻底避免这类问题,可修改MySQL的大小写处理规则:
- 停止容器:
docker stop <percona-container-name> - 重启容器时添加参数,强制库表名不区分大小写:
或修改容器配置文件,在docker run -d --name <percona-container-name> -e MYSQL_ROOT_PASSWORD=<your-password> percona:5.7 --lower_case_table_names=1my.cnf中添加:[mysqld] lower_case_table_names=1
3. 极端情况:手动清理容器内数据库文件
若元数据清理后仍无效,进入容器检查并删除残留的数据库文件夹:
docker exec -it <percona-container-name> ls /var/lib/mysql
若存在digitalcontent文件夹,手动删除:
docker exec -it <percona-container-name> rm -rf /var/lib/mysql/digitalcontent
回到MySQL命令行重新执行元数据清理,再创建数据库:
CREATE DATABASE digitalContent;
内容的提问来源于stack exchange,提问作者Jackie Wang
相关产品推荐
相关产品推荐

