使用 docker 安装 mysql
安装mysql
- cmd(以管理员身份运行)
- 查看docker版本,是否安装成功:docker --version
- 拉去docker mysql镜像: docker pull mysql:latest (国内镜像daocloud.io/library库下载 docker pull daocloud.io/library/mysql:5.7)
- 查看镜像是否存在:docker images
- 启动mysql镜像:docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
- -itd 表示启动交互式会话模拟linux tty 但是docker将会分离并且在后台运行
- --name mysql-test 表示容器名称
- -p 3306:3306 表示从docker的服务器端口(后)映射到主机的端口(前)
- -e MYSQL_ROOT_PASSWORD=123456 表示配置用户名和密码(root用户密码123456)
- mysql 表示需要启动的镜像名称
- 查看mysql服务是否在docker运行:docker ps
docker run -itd --restart=always --name mysql-8.0.0 -p 3306:3306 -v D:/dockervolumes/mysql_8_0_0_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.0
mysql大小写敏感问题
在docker安装MySQL后,进行项目连接数据库,发现查询的表不存在了:Table 'XXXX.XXXX' doesn't exist
Linux下:
- 数据库名与表名是严格区分大小写的;
- 表的别名是严格区分大小写的;
- 列名与列的别名在所有的情况下均是忽略大小写的;
- 变量名也是严格区分大小写的;
Windows下:
- 都不区分大小写
lower_case_table_names 参数说明
参数值 | 解释 |
---|---|
0 | 使用CREATE TABLE或CREATE DATABASE语句指定的大小写字母在硬盘上保存表名和数据库名。名称比较对大小写敏感。在大小写不敏感的操作系统如windows或Mac OS x上我们不能将该参数设为0,如果在大小写不敏感的文件系统上将–lowercase-table-names强制设为0,并且使用不同的大小写访问MyISAM表名,可能会导致索引破坏。 |
1 | 表名在硬盘上以小写保存,名称比较对大小写不敏感。MySQL将所有表名转换为小写在存储和查找表上。该行为也适合数据库名和表的别名。该值为Windows的默认值。 |
2 | 表名和数据库名在硬盘上使用CREATE TABLE或CREATE DATABASE语句指定的大小写字母进行保存,但MySQL将它们转换为小写在查找表上。名称比较对大小写不敏感,即按照大小写来保存,按照小写来比较。注释:只在对大小写不敏感的文件系统上适用! innodb表名用小写保存。 |
Docker 部署 MySql 并修改为大小写不敏感
-
直接在Docker启动的时候,添加参数,设置为对小写不敏感
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql --lower_case_table_names=1
-
Docker容器内进行修改(将文件var/lib/mysql 挂载出来可直接在宿主机修改)
- 进入 docker 容器 MySQL: docker exec -it mysql /bin/bash
- 进入配置文件目录: cd /etc/mysql/conf.d
- 需要用到vim(安装过的请跳过)
- apt-get update
- apt-get install vim
- 启动编辑配置文件: vim mysqld.cnf
- 在[mysqld]下添加 lower_case_table_names=1
- 退出重启
折腾了半天还是无法通过修改配置忽略大小写问题。索性删掉容器重新启动(直接在Docker启动的时候,添加参数,设置为对小写不敏感)
后面遇到再研究吧!!!
参考:
http://t.zoukankan.com/aixing-p-13327251.html
https://stackoverflow.com/questions/51803216/lower-case-table-names-settings-in-mysql-8-0-12
本文来自博客园,作者:weichangk,转载请注明原文链接:https://www.cnblogs.com/weichangk/p/15473251.html