Docker如何新建一个不区分表名大小写的 MySQL 5.7 容器

以下是分步操作,为你在已有 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. 迁移旧数据(如果需要)

若需从旧容器迁移数据到新容器:

  1. 备份旧数据
    docker exec mysql_57_container mysqldump -uroot -p123456 --all-databases > backup.sql
    
  2. 导入到新容器
    docker exec -i mysql_new_container mysql -uroot -p123456 < backup.sql
    
  3. 检查冲突:确保旧数据中的表名无大小写重复(如 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技术交流:

图片

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端组件开发

你的钟意将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值