【使用 Docker Compose 部署 MySQL 5.7 容器】

该文章已生成可运行项目,

以下是一个完整的 Markdown(.md)文档,详细描述了如何使用 Docker Compose 部署 MySQL 5.7 容器,并实现数据持久化与自动启动功能:


使用 Docker Compose 部署 MySQL 5.7 容器(含数据持久化与自启动)

目录

  1. 目标概述
  2. 前置条件
  3. 部署步骤
  4. 关键配置说明
  5. 项目结构示例
  6. 常见问题

目标概述

通过 Docker Compose 快速部署一个 MySQL 5.7 容器,实现:

  • 数据持久化(避免容器删除后数据丢失)
  • 自动启动 MySQL 服务(容器重启策略)
  • 可选的自定义配置和初始化脚本

前置条件


部署步骤

1. 创建项目目录

mkdir mysql57-docker-compose
cd mysql57-docker-compose

2. 编写 docker-compose.yml

创建文件 docker-compose.yml,内容如下:

version: '3.8'

services:
  mysql57:
    image: mysql:5.7
    container_name: mysql57
    environment:
      MYSQL_ROOT_PASSWORD: root  # 设置root密码
    ports:
      - "3306:3306"              # 端口映射
    volumes:
      - ./mysql_data:/var/lib/mysql  # 数据持久化
    restart: always                # 自动重启策略

3. (可选)自定义 MySQL 配置

创建 my.cnf 文件配置字符集:

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

docker-compose.ymlvolumes 部分添加挂载:

    volumes:
      - ./mysql_data:/var/lib/mysql
      - ./my.cnf:/etc/mysql/conf.d/my.cnf  # 挂载配置文件

4. (可选)初始化 SQL 脚本

创建 init.sql 初始化数据库:

CREATE DATABASE IF NOT EXISTS flaskblog CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'flaskuser'@'%' IDENTIFIED BY 'flaskpass';
GRANT ALL PRIVILEGES ON flaskblog.* TO 'flaskuser'@'%';
FLUSH PRIVILEGES;

docker-compose.yml 中添加挂载:

    volumes:
      - ./mysql_data:/var/lib/mysql
      - ./my.cnf:/etc/mysql/conf.d/my.cnf
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql  # 初始化脚本

⚠️ 注意:初始化脚本仅在首次启动时执行一次!

5. 启动 MySQL 容器

docker-compose up -d

6. 验证 MySQL 运行状态

# 查看运行中的容器
docker ps

# 测试连接(需安装MySQL客户端)
mysql -h 127.0.0.1 -P 3306 -u root -p
# 或进入容器内部连接
docker exec -it mysql57 mysql -uroot -proot

关键配置说明

配置项作用
image: mysql:5.7使用官方MySQL 5.7镜像
volumes数据持久化挂载
restart: always容器自动重启策略
environment设置环境变量(如密码)
/docker-entrypoint-initdb.d/初始化脚本自动执行目录

项目结构示例

mysql57-docker-compose/
├── docker-compose.yml       # 主配置文件
├── my.cnf                   # (可选)MySQL配置文件
└── init.sql                 # (可选)初始化SQL脚本
└── mysql_data/              # 自动生成的数据卷目录

常见问题

Q1: 如何修改MySQL root密码?
A: 修改docker-compose.yml中的MYSQL_ROOT_PASSWORD后,需要删除旧容器和数据卷重新创建:

docker-compose down -v
docker-compose up -d

Q2: 初始化脚本没有执行?
A: 确保:

  1. 脚本已正确挂载到/docker-entrypoint-initdb.d/
  2. 数据卷是新建的(未初始化过数据库)

Q3: 如何备份数据?
A: 直接备份mysql_data目录即可:

tar -czvf mysql_backup.tar.gz mysql_data/

✅ 提示:生产环境建议使用MySQL 5.7+或8.0版本,并配置更安全的密码策略。

本文章已经生成可运行项目
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值