DOCKER-COMPOSE创建mysql8
发表于:2022-04-20 |

废话不说,直接上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;
上一篇:
解决:Docker下运行Mysql出现:mbind: Operation not permitted
下一篇:
设置 SSH 通过密钥登录