以下是分步操作,为你在已有 mysql_57_container 容器的情况下,新建一个不区分表名大小写的 MySQL 5.7 容器:

1. 停止并清理旧容器(可选)
如果不需要保留旧容器 mysql_57_container,先删除它以避免端口或名称冲突:
docker stop mysql_57_container # 停止旧容器
docker rm mysql_57_container # 删除旧容器
2. 创建新容器的配置和数据目录
mkdir -p ~/mysql_new/conf # 新容器的配置文件目录
mkdir -p ~/mysql_new/data # 新容器的数据目录(必须为空!)
3. 创建配置文件
在 ~/mysql_new/conf 目录下创建 custom.cnf:
cat <<EOF > ~/mysql_new/conf/custom.cnf
[mysqld]
lower_case_table_names=1 # 强制表名不区分大小写
EOF
4. 启动新 MySQL 容器
docker run -d \
--name mysql_new_container \ # 新容器名称
-v ~/mysql_new/conf:/etc/mysql/conf.d \ # 挂载配置文件
-v ~/mysql_new/data:/var/lib/mysql \ # 挂载空数据目录(关键!)
-e MYSQL_ROOT_PASSWORD=123456 \ # 设置 root 密码
-p 3307:3306 \ # 使用新端口(避免与旧容器冲突)
mysql:5.7
5. 验证配置生效
(1) 检查参数是否生效
docker exec -it mysql_new_container mysql -uroot -p123456 -e "SHOW VARIABLES LIKE 'lower_case_table_names';"
预期输出:
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_table_names | 1 |
+------------------------+-------+
(2) 测试表名大小写
进入 MySQL 命令行:
docker exec -it mysql_new_container mysql -uroot -p123456
执行测试 SQL:
CREATE DATABASE TestDB;
USE TestDB;
CREATE TABLE MyTable (id INT); -- 创建表 MyTable
SHOW TABLES LIKE 'mytable'; -- 应返回 MyTable
6. 关键注意事项
1. 数据目录必须全新
-
如果
~/mysql_new/data目录非空,MySQL 会忽略lower_case_table_names=1配置并启动失败。 - 解决方案:删除旧数据目录并重新启动:
rm -rf ~/mysql_new/data docker run ... # 重新执行启动命令
2. 迁移旧数据(如果需要)
若需从旧容器迁移数据到新容器:
- 备份旧数据:
docker exec mysql_57_container mysqldump -uroot -p123456 --all-databases > backup.sql - 导入到新容器:
docker exec -i mysql_new_container mysql -uroot -p123456 < backup.sql -
检查冲突:确保旧数据中的表名无大小写重复(如
User和user会被视为同一张表)。
7. 完整操作脚本
# 清理旧容器(可选)
docker stop mysql_57_container 2>/dev/null || true
docker rm mysql_57_container 2>/dev/null || true
# 创建新容器目录
mkdir -p ~/mysql_new/{conf,data}
# 生成配置文件
echo -e "[mysqld]\nlower_case_table_names=1" > ~/mysql_new/conf/custom.cnf
# 启动新容器(端口 3307)
docker run -d \
--name mysql_new_container \
-v ~/mysql_new/conf:/etc/mysql/conf.d \
-v ~/mysql_new/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3307:3306 \
mysql:5.7
# 验证配置
sleep 10 # 等待 MySQL 初始化
docker exec -it mysql_new_container mysql -uroot -p123456 -e "SHOW VARIABLES LIKE 'lower_case_table_names';"
8. 故障排查
错误:启动失败并提示数据目录冲突
[ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('1') and data dictionary ('0').
原因:数据目录 (~/mysql_new/data) 包含旧数据。
解决:删除数据目录并重启容器:
rm -rf ~/mysql_new/data
docker run ... # 重新执行启动命令
配置文件未加载
进入容器检查配置文件是否存在:
docker exec -it mysql_new_container ls /etc/mysql/conf.d
预期输出:custom.cnf
通过以上步骤,新容器 mysql_new_container 将严格使用表名不区分大小写的规则。
IT技术交流:

2436

被折叠的 条评论
为什么被折叠?



