You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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=1
    
    或修改容器配置文件,在my.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:40:23