废话不说,直接上yml
version: '3.1'
services:
db:
image: mysql
container_name: mysql8
restart: always
environment:
MYSQL_ROOT_PASSWORD: #记得冒号与密码之间有个空格哈,这是yml的书写格式
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--max_allowed_packet=128M;
ports:
- 3306:3306
volumes:
- ./data:/var/lib/mysql
docker方式:
docker run --name mysq.db -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d -v /home/mysql/:/var/lib/mysql mysql --lower_case_table_names=1
-e MYSQL_ROOT_PASSWORD :设置mysql密码
-v /home/mysql/:/var/lib/mysql:挂载磁盘实现数据持久化
--lower_case_table_names=1 :忽略大小写,docker mysql默认区分大小写的
注:参数顺序一定要对,–lower_case_table_names=1要加在镜像名后面,镜像名前面是参数,后面是mysql配置,不然会报错 lower_case_table_names=1 只能在初始化时配置,不然会报错
查看MySQL官方文档,有记录:
lower_case_table_names can only be configured when initializing the server. Changing the lower_case_table_names setting after the server is initialized is prohibited.
只有在初始化的时候设置 lower_case_table_names=1 才有效
之前文章中记录了dockr安装mysql之后,发现该数据库对大小写敏感,然后各种百度修改配置、重启都不生效。
mysql表名是否区分大小写是通过lower_case_table_names参数来设置,登录mysql后可通过show Variables like ‘%table_names’ 来查看默认的值
不同系统,该参数的默认值是不同的。
参数值 参数说明
lower_case_table_names=1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的
lower_case_table_names=2 表名存储为给定的大小写但是比较的时候是小写的
windows环境默认 1 ,linux环境默认0 ,macos环境默认2
docker exec -it mysql /bin/bash
这个时候已经是大小写不敏感了,可以进入mysql镜像中验证下
mysql -h localhost -u root -p
Enter password: 直接回车
mysql> show variables like '%table_names';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_file_system | OFF |
| lower_case_table_names | 1 |
+------------------------+-------+
2 rows in set (0.00 sec)
可以看到lower_case_table_names参数已经变为1
看下现在的密码的加密方式
select host,user,plugin,authentication_string from mysql.user;
新增用户和修改密码
mysql> CREATE USER 'admin'@'%' IDENTIFIED BY '密码';
mysql> GRANT ALL ON *.* TO admin@'%' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;