docker安装mysql8之lower_case_table_names参数

前言

既然使用docker安装mysql,看重的就是一键拉取和一键启动,然后在安装mysql容器的过程中,出现了新问题,关于lower_case_table_names的深坑。

发现问题

部署前使用的是本地服务器的mysql数据库,而上线的是一台全新的服务器,因此需要笔者重新配置运行环境,安装mysql并将本地库导入服务器上的数据库后,问题就在这里出现了。

在这里插入图片描述
出现明明数据表存在,然后springboot启动后,却显示查询不到数据表的问题。

找到问题

毫无疑问,这里就是lower_case_table_names参数的问题。

show variables like '%lower_case%';

在这里插入图片描述
lower_case_table_names 是mysql设置大小写是否敏感的一个参数。

lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的
lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
lower_case_table_names=2 表名存储为给定的大小写但是比较的时候是小写的

由于本地库 lower_case_table_names = 1,所以数据表查询不区分大小写,而Docker拉取的mysql镜像默认lower_case_table_names=0,因此会出现以上 数据表找不到的情况 Table xxx.xxx doesn't exit

解决方案

在线上创建数据库时,需要与本地数据库的参数一致,因此在创建容器是设置参数:lower_case_table_names = 1。创建容器命令如下:

不挂载外部文件
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=123456\
-p 3306:3306 mysql --lower-case-table-names=1
挂载外部文件
docker run --name mysql \
-v /docker/mysql/log:/var/log/mysql \ 
-v /docker/mysql/data:/var/lib/mysql \ 
-p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 \
-d mysql --lower-case-table-names=1

注意最后的 --lower-case-table-names=1很重要别遗漏了。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值