当前位置: 首页 > news >正文

docker compose部署mysql

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

1. 创建 docker-compose.yml 文件

version: '3.8'services:mysql:image: mysql:8.0.34  # 建议指定具体版本container_name: mysql-serverenvironment: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: 10stimeout: 5sretries: 3restart: unless-stoppednetworks:- backend-networkcommand: --character-set-server=utf8mb4--collation-server=utf8mb4_unicode_ci--max_connections=200--default-authentication-plugin=mysql_native_passwordvolumes:mysql_data:  # 命名卷实现数据持久化networks:backend-network:driver: bridge

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

mkdir -p {mysql/conf.d,mysql/initdb}

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

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

[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 中添加:

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 文件:

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

6. 启动服务

docker-compose up -d  # 后台启动

7. 管理命令

# 查看日志
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 脚本:

#!/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 配置

http://www.dtcms.com/a/330651.html

相关文章:

  • UniVoc:基于二维矩阵映射的多语言词汇表系统
  • ESP32单片机与STM32单片机协同完成工业控制智能化改造
  • Uniapp 条件编译详解
  • 用Python从零开始实现机器学习Baseline
  • 文件服务器:FTP
  • Inconsistent vendoring detected. Please re-run “go mod vendor“.
  • QML开发:画布元素
  • 数学建模-非线性规划模型
  • Spring AI PagePdfDocumentReader 全解析:基于 Apache PdfBox 的按页 PDF 读取实战
  • PDF压缩原理详解:如何在不失真的前提下减小文件体积?
  • 高分辨率PDF压缩技巧:保留可读性的最小体积方案
  • PDF 段落提取利器:Spring AI 的 ParagraphPdfDocumentReader 实战
  • 【办公自动化】如何使用Python操作PPT和自动化生成PPT?
  • pdf文件流或者本地文件读取
  • OSI七层模型和TCP/IP协议簇
  • elasticsearch冷热数据读写分离!
  • Qt TCP 客户端对象生命周期与连接断开问题解析
  • ESXI 6.7服务器时间错乱问题
  • 面试题之项目中git如何进行管理
  • 计算机如何进行“卷积”操作:从图像到矩阵的奥秘
  • 星空开源MES(万界星空科技)——专业、通用、开源、免费的MES系统
  • AM32电调学习-使用Keil编译uboot
  • 医疗AI问答系统实战:知识图谱+大模型的融合应用开发
  • 带环链表详解:环形链表检测与入环节点查找
  • 推荐三个国内开源数据治理工具
  • Python3 详解:从基础到进阶的完整指南
  • 第四天~什么是ARXML?
  • CV 医学影像分类、分割、目标检测,之【肺结节目标检测】项目拆解
  • pytorch学习笔记-加载现有的网络模型(VGG16)、增加/修改其中的网络层(修改为10分类)
  • AI测试自动化:智能软件质量守护者