当前位置: 首页 > 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.xdnf.cn/news/1297603.html

相关文章:

  • 面试题之项目中灰度发布是怎么做的
  • 深入了解linux系统—— 线程概念
  • ZigBee入门与提高(3)—— ZigBee协议初识
  • Visual Studio2019/2022离线安装完整教程(含闪退解决方法)
  • Windows bypassUAC 提权技法详解(一)
  • 基于FPGA的8PSK+卷积编码Viterbi译码通信系统,包含帧同步,信道,误码统计,可设置SNR
  • Python之Django使用技巧(附视频教程)
  • HTML <link rel=“preload“>:提前加载关键资源的性能优化利器
  • 企业智脑正在构建企业第二大脑,四大场景引擎驱动数字化转型新范式
  • C++入门自学Day11-- List类型的自实现
  • 手写MyBatis第16弹:泛型魔法应用:MyBatis如何破解List的运行时类型
  • 一种适用于 3D 低剂量和少视角心脏单光子发射计算机断层成像(SPECT)的可泛化扩散框架|文献速递-深度学习人工智能医疗图像
  • OpenCV 高斯模糊降噪
  • Spring Boot + Redis + 布隆过滤器防止缓存穿透
  • 带root权限_贝尔RG020ET-CA融合终端S905L处理器当贝纯净版刷机教程
  • 分布式系统架构设计模式:从微服务到云原生
  • pycharm远程连接服务器跑实验详细操作
  • Go语言实战案例:简易图像验证码生成
  • Java 设计模式-组合模式
  • Vscode的wsl环境开发ESP32S3的一些问题总结
  • 在 Windows 系统中解决 Git 推送时出现的 Permission denied (publickey) 错误,请按照以下详细步骤操作:
  • 宋红康 JVM 笔记 Day01|JVM介绍
  • [工具]vscode 使用AI 优化代码
  • 使用EvalScope对GPT-OSS-20B进行推理性能压测实战
  • 【完整源码+数据集+部署教程】肾脏病变实例分割系统源码和数据集:改进yolo11-CARAFE
  • 自动化运维实验(二)---自动识别设备,并导出配置
  • AM32电调学习-使用Keil编译uboot
  • 搭建局域网yum源仓库全流程
  • 华为实验 链路聚合
  • GoLand 项目从 0 到 1:第八天 ——GORM 命名策略陷阱与 Go 项目启动慢问题攻坚