docker安装mysql8之lower_case_table_names参数

docker安装mysql8之lower_case_table_names参数

      • 前言
      • 发现问题
      • 找到问题
      • 解决方案
          • 不挂载外部文件
          • 挂载外部文件

前言

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

发现问题

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

docker安装mysql8之lower_case_table_names参数_第1张图片
出现明明数据表存在,然后springboot启动后,却显示查询不到数据表的问题。

找到问题

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

show variables like '%lower_case%';

docker安装mysql8之lower_case_table_names参数_第2张图片
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很重要别遗漏了。

你可能感兴趣的:(mysql8,docker系列,问题集锦,docker,容器)