docker-compose 安装 mysql并初始化用户与sql文件

docker-compose.yml文件

version: '3'
 
services:
  mysql8.0:
    # 镜像名
    image: mysql:8.0.21
    # 容器名(以后的控制都通过这个)
    container_name: mysql8.0
    # 重启策略
    restart: always
    environment:
      # 时区上海
      TZ: Asia/Shanghai
      # root 密码
      MYSQL_ROOT_PASSWORD: root
      # 初始化数据库(后续的初始化sql会在这个库执行)
      MYSQL_DATABASE: nacos_config
      # 初始化用户(不能是root 会报错, 后续需要给新用户赋予权限)
      MYSQL_USER: nacos
      # 用户密码
      MYSQL_PASSWORD: nacos
      # 映射端口
    ports:
      - 3306:3306
    volumes:
      # 数据挂载
      #- /root/mysql/data/:/var/lib/mysql/
      # 配置挂载
      #- /root/mysql/conf/:/etc/mysql/conf.d/
      # 初始化目录挂载,注意此处我只跑了这个挂载,只是为了说明其他配置不应该数据初始化
      - /root/mysql/init/:/docker-entrypoint-initdb.d/
    command:
      # 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
      --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

如果在sql文件内,需要手动赋予用户权限

    # grant all privileges on dbname.tablename to 'userName'@'%';
    # 比如想给用户nacos赋予数据库test所有的表的权限并且不限制nacos用户的连接地址,代码如下
    grant all privileges on test.* to 'nacos'@'%';
    # 刷新权限
    flush privileges;

三 mysql8.*才开始出现的坑

1.初始化的用户不能是root!差评!

2.默认密码策略的要改为mysql_native_password,否则就是报错!差评

3.如果是几个.sql文件,记得写上user database语句,因为初始化顺序是按文件名来的。

 

posted @ 2021-01-03 16:42  lgp20151222  阅读(1279)  评论(0编辑  收藏  举报