docker-compose部署mysql,并设置帐号,密码,端口

本文介绍了如何使用docker-compose.yml文件简化MySQL的Docker部署,包括端口映射、数据持久化和初始化配置。重点是通过环境变量MYSQL_DATABASE、MYSQL_USER和MYSQL_PASSWORD在启动时创建用户和数据库,避免了传统方法的繁琐步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,那配置将无任何效果。
<think>好的,用户想知道如何使用docker-compose部署MySQL数据库。我需要根据提供的引用内容来整理步骤,同时确保回答符合系统级指令的要求。首先,用户提供的引用中有几个相关的信息,比如引用3提到了docker-compose快速部署MySQL的步骤,引用2中有一个Dockerfile的例子,但可能更相关的应该是直接使用docker-compose.yml文件。引用1引用5提到了拉取镜像初始化数据库的方法,这些都需要整合到回答中。 首先,我需要明确用户的需求是通过docker-compose部署MySQL,所以需要创建一个docker-compose.yml文件。根据引用3中的步骤,用户需要安装dockerdocker-compose,然后拉取MySQL镜像,编写docker-compose.yml,启动服务,可能进行初始化。 接下来,引用2中的Dockerfile可能不是必须的,因为用户更倾向于使用docker-compose来管理服务。但引用2中的ADD指令可以用来初始化数据库,这可能对应docker-compose中的volumes或者entrypoint配置。不过更常见的是将初始化脚本放在/docker-entrypoint-initdb.d目录下,这样容器启动时会自动执行这些SQL脚本,如引用5提到的初始化数据库的方法。 然后,引用5中还提到了设置权限密码校验,这可能需要在MySQL配置中进行设置,或者在docker-compose文件中通过环境变量来配置。比如MYSQL_ROOT_PASSWORD环境变量是必须的,用来设置root用户的密码。 现在,我需要将这些信息整合成一个步骤指南。步骤可能包括: 1. 安装DockerDocker Compose:根据引用3,用户需要先安装dockerdocker-compose,但用户可能已经安装好了,所以可以简要提及。 2. 创建项目目录docker-compose.yml文件:这里需要编写正确的docker-compose配置,指定MySQL镜像版本,设置环境变量如root密码,挂载数据卷持久化数据,以及初始化脚本的位置。 3. 初始化数据库:根据引用25,用户可能需要将SQL文件放入指定目录,以便容器启动时执行。比如在docker-compose中通过volumes挂载一个本地目录到容器的/docker-entrypoint-initdb.d下,这样容器启动时会自动执行该目录下的SQL文件。 4. 启动服务:使用docker-compose up命令启动容器,可能还需要设置后台运行,如使用-d参数。 5. 验证连接:进入容器内部或者远程连接,确保数据库正常运行。 此外,需要注意用户提供的引用中有一些具体的例子,比如引用2中的Dockerfile可能不是直接相关的,但其中的ADD指令可以转化为docker-compose中的volumes配置。引用5中的权限设置密码校验需要在MySQL配置中处理,可能通过环境变量或者初始化脚本实现。 在整合这些步骤时,需要确保LaTeX格式正确,行内公式用$...$,独立公式用$$...$$,但在这个问题中可能涉及较少数学公式,更多的是代码块配置文件的展示。所以重点放在代码块的正确格式上,比如使用三个反引号包裹代码,注明语言类型。 可能还需要生成相关问题,比如如何持久化数据、如何初始化数据库、如何设置权限等,这些可以从引用内容中提取。 最后,确保回答中引用的引用标识正确添加,比如在提到拉取镜像时引用1,初始化数据库时引用25,docker-compose配置引用3等。</think>### 通过 docker-compose 部署 MySQL 数据库的步骤 #### 1. 安装 Docker Docker Compose 确保已安装 Docker Docker Compose。验证安装是否成功: ```bash docker --version docker-compose --version ``` 若显示版本信息则正常[^1]。 #### 2. 编写 `docker-compose.yml` 文件 创建项目目录编写配置文件: ```yaml version: '3.8' services: mysql: image: mysql:8.0.36 # 指定镜像版本[^3] container_name: my-mysql environment: MYSQL_ROOT_PASSWORD: your_root_password # 设置root密码[^5] MYSQL_DATABASE: nacos # 可选:初始化数据库 MYSQL_USER: asa # 可选:创建用户 MYSQL_PASSWORD: asa_password volumes: - ./mysql_data:/var/lib/mysql # 数据持久化 - ./init-scripts:/docker-entrypoint-initdb.d # 初始化SQL脚本[^2][^5] ports: - "3306:3306" # 暴露端口 restart: always ``` #### 3. 添加初始化脚本 在本地目录 `./init-scripts` 中放置 SQL 文件(如 `nacos-mysql.sql`),容器启动时会自动执行: ```sql -- 示例:创建用户授权 GRANT ALL PRIVILEGES ON asa.* TO 'asa'@'%'; FLUSH PRIVILEGES; ``` #### 4. 启动服务 通过以下命令启动容器: ```bash docker-compose up -d # 后台运行[^3] ``` #### 5. 验证与连接 - **进入容器内部**: ```bash docker exec -it my-mysql mysql -uroot -p ``` - **远程连接**: 使用 MySQL 客户端工具连接 `主机IP:3306`,用户名为 `root`,密码为 `your_root_password`[^3]。 #### 关键配置说明 - **数据持久化**:`volumes` 将容器内的 `/var/lib/mysql` 映射到本地目录,避免数据丢失[^3]。 - **初始化脚本**:`/docker-entrypoint-initdb.d` 目录下的 `.sql` 或 `.sh` 文件会在首次启动时按字母顺序执行[^5]。 - **权限设置**:通过 SQL 脚本或环境变量定义用户权限,确保安全性[^5]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值