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 配置

相关推荐
用户84913717547161 小时前
【技术面试高频】MySQL 存储 IP 地址:你还在用 VARCHAR?
mysql·面试
壹玖玖肆2 小时前
Docker 部署 openGauss 7.0(aarch64)MySQL 兼容模式建库与数据恢复完整实践
mysql·docker·容器
hgf10112 小时前
大内密探 · 案卷 1.2:一夫当关,万夫莫开(Receive Enable)
数据库·mysql
子沫20203 小时前
mysql慢sql
sql·mysql
2501_933923253 小时前
MySQL CRUD 详解:表数据插入、更新与删除,附生产避坑指南
数据库·mysql
kaixin_啊啊3 小时前
飞牛部署Mtab完整实战:Docker安装、MySQL建库与固定地址访问
mysql·docker·容器
mister_guo12 小时前
MySQL-1267错误:排序规则冲突的原因与解决方案
数据库·mysql
Lost_the_wind15 小时前
MySQL学习笔记五
mysql
程序员老赵16 小时前
Docker 部署 Wiki.js:轻松搭建私有化维基知识库
docker·容器·开源
这个DBA有点耶16 小时前
从时间到语义:时序数据库与向量数据库的核心机制、选型与多模融合趋势
数据库·mysql·架构