docker compose部署mysql

以下是使用 Docker Compose 部署 MySQL 的完整方案,包含最佳实践配置:

1. 创建 docker-compose.yml 文件

yaml 复制代码
version: '3.8'

services:
  mysql:
    image: mysql:8.0.34  # 建议指定具体版本
    container_name: mysql-server
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-StrongPassword123!}  # 从环境变量读取,默认值作为后备
      MYSQL_DATABASE: ${DB_NAME:-myapp_db}
      MYSQL_USER: ${DB_USER:-app_user}
      MYSQL_PASSWORD: ${DB_PASSWORD:-UserPassword123!}
      TZ: Asia/Shanghai  # 设置时区
    ports:
      - "${DB_PORT:-3306}:3306"
    volumes:
      - mysql_data:/var/lib/mysql
      - ./mysql/conf.d:/etc/mysql/conf.d  # 自定义配置
      - ./mysql/initdb:/docker-entrypoint-initdb.d  # 初始化SQL脚本
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 3
    restart: unless-stopped
    networks:
      - backend-network
    command: 
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_unicode_ci
      --max_connections=200
      --default-authentication-plugin=mysql_native_password

volumes:
  mysql_data:  # 命名卷实现数据持久化

networks:
  backend-network:
    driver: bridge

2. 创建配置文件目录结构

bash 复制代码
mkdir -p {mysql/conf.d,mysql/initdb}

3. 添加自定义配置 (可选)

在 mysql/conf.d/my-custom.cnf 中添加:

ini 复制代码
[mysqld]
skip-name-resolve
innodb_buffer_pool_size = 256M
log-error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2

4. 添加初始化脚本 (可选)

在 mysql/initdb/01-create-tables.sql 中添加:

sql 复制代码
CREATE TABLE IF NOT EXISTS users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(50) NOT NULL UNIQUE,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

5. 使用环境变量文件 (推荐)

创建 .env 文件:

ini 复制代码
# MySQL 配置
DB_ROOT_PASSWORD=YourSecureRootPassword
DB_NAME=production_db
DB_USER=admin_user
DB_PASSWORD=Admin@1234
DB_PORT=3307  # 避免与宿主机MySQL冲突

6. 启动服务

bash 复制代码
docker-compose up -d  # 后台启动

7. 管理命令

bash 复制代码
# 查看日志
docker-compose logs -f mysql

# 进入容器
docker-compose exec mysql bash

# 连接MySQL
docker-compose exec mysql mysql -u root -p

# 安全关闭
docker-compose down --volumes  # 警告:这会删除数据卷

8. 备份方案

创建 backup.sh 脚本:

bash 复制代码
#!/bin/bash
BACKUP_DIR=/path/to/backups
DATE=$(date +%Y%m%d_%H%M%S)

docker-compose exec -T mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > $BACKUP_DIR/full_backup_$DATE.sql

高级功能扩展

  1. 主从复制配置:可扩展为多节点集群
  2. 监控集成:添加Prometheus监控
  3. PHPMyAdmin:添加管理界面服务
  4. 连接池:配合ProxySQL使用

💡 提示:生产环境建议使用 secrets 管理密码,可通过 docker-compose secrets 配置

相关推荐
小白男神3 天前
MySQL进阶学习四(存储过程、游标、触发器)
mysql
分布式存储与RustFS3 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
这个DBA有点耶3 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
kybs19913 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
玉&心3 天前
通过Arthas在线诊断K8S中的内存及JVM等使用情况
docker·k8s·arthas
xing-xing3 天前
Docker容器中Nginx站点根目录网页配置访问
nginx·docker
程序猿_极客3 天前
【免费】分享一套优质的基于SSM的校园失物招领系统的设计与实现,源码+文档+视频详解(讲解)
java·mysql·ssm·课程设计·失物招领系统
guo_wen_qiang3 天前
上传本地镜像到harbor中
docker·容器·持续部署
羑悻的小杀马特3 天前
Dockerfile 全景指南:从入门编写dockerfile到生产环境镜像优化实战,一步步带你从啃透制作指令到镜像制作落地!
docker·dockerfile·镜像制作
于平安3 天前
MySQL-触发器
数据库·mysql