# 数据库服务独立配置文件 # 可用于单独启动和管理数据库服务 version: '3.8' services: # MySQL数据库服务 anxin-mysql: image: mysql:8.0 container_name: ${COMPOSE_PROJECT_NAME:-anxin}-mysql restart: unless-stopped # 环境变量配置 environment: # 必需的环境变量 MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root123} MYSQL_DATABASE: ${DB_NAME:-anxin} MYSQL_USER: ${DB_USER:-anxin} MYSQL_PASSWORD: ${DB_PASSWORD:-anxin123} # 可选的环境变量 MYSQL_ALLOW_EMPTY_PASSWORD: ${MYSQL_ALLOW_EMPTY_PASSWORD:-no} MYSQL_RANDOM_ROOT_PASSWORD: ${MYSQL_RANDOM_ROOT_PASSWORD:-no} # 系统配置 TZ: ${TIMEZONE:-Asia/Shanghai} # 端口映射 ports: - "${DB_PORT:-3306}:3306" # 卷挂载配置 volumes: # 数据持久化 - 挂载数据目录 - mysql-data:/var/lib/mysql # 初始化脚本 - 按字母顺序执行 - ./init:/docker-entrypoint-initdb.d:ro # MySQL配置文件 - ../configs/my.cnf.template:/etc/mysql/conf.d/custom.cnf:ro # 日志目录 - mysql-logs:/var/log/mysql # 临时文件目录 - mysql-tmp:/tmp # 网络配置 networks: - anxin-network # 资源限制 deploy: resources: limits: memory: ${DATABASE_MEMORY_LIMIT:-512M} cpus: '${DATABASE_CPU_LIMIT:-0.5}' reservations: memory: ${DATABASE_MEMORY_RESERVATION:-256M} cpus: '${DATABASE_CPU_RESERVATION:-0.25}' # 健康检查 healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD:-root123}"] interval: 30s timeout: 20s retries: 10 start_period: 60s # 安全配置 security_opt: - no-new-privileges:true # 用户配置(可选,用于安全加固) # user: "999:999" # 命令覆盖(可选,用于自定义启动参数) command: > --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-time-zone='+08:00' --max-connections=200 --innodb-buffer-pool-size=128M --innodb-log-file-size=32M --innodb-flush-log-at-trx-commit=1 --slow-query-log=1 --slow-query-log-file=/var/log/mysql/slow.log --long-query-time=3 --log-error=/var/log/mysql/error.log # 网络配置 networks: anxin-network: name: ${NETWORK_NAME:-anxin-network} driver: bridge ipam: driver: default config: - subnet: ${SUBNET:-172.20.0.0/16} gateway: ${GATEWAY:-172.20.0.1} # 卷配置 volumes: # 数据库数据卷 - 持久化存储 mysql-data: driver: local driver_opts: type: none o: bind device: ${MYSQL_DATA_PATH:-./data/mysql} # 数据库日志卷 mysql-logs: driver: local driver_opts: type: none o: bind device: ${MYSQL_LOGS_PATH:-./data/logs/mysql} # 临时文件卷 mysql-tmp: driver: local