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语句,因为初始化顺序是按文件名来的。