1.需求:
一个项目需要用docker部署mysql,并且mysql的
项目数据库名:mproject,帐号:mao,密码为mao123,端口为:33307
网上一般方式:
网上找的都是默认帐号为root,另外配置的用户名和密码也是错误的,以这种方式如果要将数据库的账户改为mao有两种方式:
方式一:在容器启动时通过初始化sql新增用户名mao和密码mao123
方式二:在容器启动之后进入mysql,新增用户名mao和密码mao123
这两种方式都比较繁琐。
于是去mysql官网探索一番之后发现了新方法。下面是自己的docker-compose.yml搭配讲解
2.docker-compose.yml配置
version: "3"
services:
mysql:
image: mysql:8.0
ports:
- 33307:3306 #将外部端口33307映射为内部默认创建的3306
volumes:
- ./data/mysql:/var/lib/mysql #将容器中运行的mysql数据保存到宿主机,防止容器删除后数据丢失
- ./init:/docker-entrypoint-initdb.d/ #/docker-entrypoint-initdb.d/这是数据库提供的初始化目录,数据库在启动时会默认执行当期目录下的以.sql或者.sh结尾的文件。
environment:
MYSQL_ROOT_PASSWORD: root #数据库初始话为root用户设置的默认密码
MYSQL_DATABASE: mproject #数据库名
MYSQL_USER: mao #自定义数据库的用户,权限只作用于MYSQL_DATABASE配置的数据库
MYSQL_PASSWORD: mao123 #自定义数据库的用户,权限只作用于MYSQL_DATABASE配置的数据库
restart: on-failure #重启条件
networks:
- my_pro
networks:
my_pro:
driver: bridge
ipam:
config:
- subnet: 192.168.0.0/16 #配置子网
3.配置说明:
1./docker-entrypoint-initdb.d/
这个目录是数据库官方提供的初始目录,以.sql .sh .bat结尾的文件放到这个目录下面,
在数据库启动的时候会自动执行。
2.environment 这是mysql官方提供的针对数据库启动时的配置
上图是mysql官网针对MYSQL_DATABASE,MYSQL_USER,MYSQL_PASSWORD三者的关系描述:
MYSQL_USER,MYSQL_PASSWORD是对MYSQL_DATABASE表有作用,如果只配置了MYSQL_USER,MYSQL_PASSWORD,那配置将无任何效果。