中文字幕一区二区三区在线中文-日本中文字幕 在线观看-欧美日韩国产亚洲综合-性色AV一二三天美传媒

廣州總部電話:020-85564311
廣州總部電話:020-85564311
20年
互聯(lián)網(wǎng)應用服務商
請輸入搜索關鍵詞
知識庫 知識庫

優(yōu)網(wǎng)知識庫

探索行業(yè)前沿,共享知識寶庫

Docker容器化部署Mysql

發(fā)布日期:2025-08-09 17:22:15 瀏覽次數(shù): 815 來源:沉浸的行吟
推薦語
MySQL容器化部署指南:開發(fā)測試環(huán)境下的最佳實踐配置,包含數(shù)據(jù)持久化、日志管理等關鍵設置。

核心內容:
1. MySQL Docker容器化部署的完整Compose文件詳解
2. 數(shù)據(jù)掛載、日志處理及時區(qū)修正等關鍵配置項說明
3. 配套my.cnf配置文件的優(yōu)化建議與注意事項
小優(yōu) 網(wǎng)站建設顧問
專業(yè)來源于二十年的積累,用心讓我們做到更好!

 

虽然不建议在生产环境中用容器来部署数据库服务,但是在开发测试环境以及小型项目里也有不少以容器化运维数据库的场景。
以下是一份完整的MySQL Docker容器化部署Compose文件,包含数据挂载、日志处理及时区修正等最佳实践配置:

docker-compose.yml 完整配置

version: "3.9"
services:
  mysql:
    container_name: mysql
    image: mysql:8.0.33  # 使用稳定的MySQL 8版本
    restart: unless-stopped
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=your_strong_password  # 请修改为强密码
      - MYSQL_DATABASE=your_database             # 可选:初始化数据库
      - MYSQL_USER=your_user                     # 可选:初始化用户
      - MYSQL_PASSWORD=your_user_password        # 可选:用户密码
      - TZ=Asia/Shanghai                        # 修正容器时区
    volumes:
      - ./data:/var/lib/mysql        # 挂载数据目录(含Binlog)
      - ./conf/my.cnf:/etc/mysql/my.cnf  # 挂载配置文件
      - ./logs:/var/log/mysql       # 挂载日志目录
    healthcheck:
      test: ["CMD""mysqladmin""ping""-h""localhost""-u""root""-p${MYSQL_ROOT_PASSWORD}"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 20s
    networks:
      - mysql-network

networks:
  mysql-network:
    driver: bridge

配套文件说明

1. 配置文件 conf/my.cnf

[mysqld]
# 基础配置
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
log-error = /var/log/mysql/error.log
pid-file = /var/run/mysqld/mysqld.pid

# 时区配置(双重保障)
default-time-zone = '+08:00'

# Binlog配置(生产环境建议开启)
log_bin = mysql-bin
binlog_format = ROW
server_id = 1
binlog_expire_logs_seconds = 604800
max_binlog_size = 100M

# 性能优化(根据服务器配置调整)
innodb_buffer_pool_size = 128M
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1

# 安全配置
skip_name_resolve = ON

[client]
#mysql客户端需要这个
socket = /var/lib/mysql/mysql.sock

2. 初始化脚本(可选)

在 init 目录下创建SQL脚本,如 create_database.sql

CREATE DATABASE IF NOT EXISTS your_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS 'your_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_user_password';
GRANT ALL PRIVILEGES ON your_database.* TO 'your_user'@'%';
FLUSH PRIVILEGES;

并在Compose文件中添加挂载:

volumes:
  - ./init:/docker-entrypoint-initdb.d  # 初始化脚本目录

部署与验证步骤

1. 准备目录结构

mkdir -p data conf logs init  # 若使用初始化脚本
touch conf/my.cnf

2. 启动容器

docker compose up -d

3. 验证时区

docker exec -it mysql date  # 应显示正确的本地时间
docker exec -it mysql mysql -u root -p -e "SELECT NOW();"

4. 验证数据挂载

# 查看数据目录
ls -la data
# 查看日志文件
ls -la logs/mysql/error.log

5. 验证Binlog(若配置)

docker exec -it mysql mysql -u root -p -e "SHOW VARIABLES LIKE 'log_bin';"
# 输出应为 ON

关键配置说明

1. 数据与日志挂载

  • • ./data:/var/lib/mysql:存储数据文件、Binlog、InnoDB日志等,确保容器重启后数据不丢失。
  • • ./logs:/var/log/mysql:单独挂载日志目录,便于日志分析和清理。
  • • ./conf/my.cnf:/etc/mysql/my.cnf:自定义配置文件,支持时区、Binlog等高级配置。

2. 时区解决方案

  • • 通过环境变量 TZ=Asia/Shanghai 设置容器时区。
  • • 在 my.cnf 中添加 default-time-zone='+08:00' 双重保障,确保MySQL服务时区与系统一致。

3. 生产环境优化

  • • 健康检查:通过mysqladmin ping实时监控服务状态。
  • • 安全配置skip_name_resolve避免DNS解析延迟,utf8mb4支持Emoji等特殊字符。
  • • 性能参数innodb_buffer_pool_size根据服务器内存调整(建议为物理内存的50%-70%)。

注意事项

  1. 1. 密码安全:务必修改MYSQL_ROOT_PASSWORD为强密码,避免使用默认值。
  2. 2. 存储权限:确保宿主机挂载目录有正确的读写权限(Linux下建议chmod 777 data logs)。
  3. 3. 备份策略:定期备份data目录,结合Binlog实现增量恢复。
  4. 4. 端口映射:生产环境建议通过Nginx代理或防火墙限制3306端口访问。

通过此配置,可实现MySQL容器的稳定部署,满足数据持久化、日志管理及时区一致性需求。


注意:MySQL 8.0 后expire_logs_days 不再被识别

在 MySQL 8.0 及以上版本 中,expire_logs_days 已经被 废弃,取而代之的是 binlog_expire_logs_seconds,用来设置二进制日志的过期时间(单位:秒)。

问题分析

  1. 1. 参数废弃
    MySQL 8.0 后,expire_logs_days 不再被识别,必须用  binlog_expire_logs_seconds 替代。
    MySQL 8.4.5就会触发这个错误。
  2. 2. 配置冲突
    旧参数 expire_logs_days 留在配置文件里,MySQL 不认识,启动时直接报错并退出。

解决方案

把配置文件里的 expire_logs_days = 7 替换成 binlog_expire_logs_seconds,按需求设置过期时间(比如 7 天 = 604800 秒 )。

修改后的 my.cnf 关键配置示例:

[mysqld]
# Binlog 配置(生产环境建议开启)
log_bin = mysql-bin
binlog_format = ROW
server_id = 1
# 替换成新参数,7 天 = 604800 秒
binlog_expire_logs_seconds = 604800  
max_binlog_size = 100M

完整修改步骤
1.编辑 my.cnf:
找到配置文件里的 expire_logs_days = 7,替换成:

SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';

2.重启 MySQL 容器:
修改完配置后,必须重启容器让新配置生效:

docker compose down
docker compose up -d

3.验证是否生效:
进入容器,用 SQL 查看参数是否正确加载:

docker exec -it mysql mysql -u root -p

4.登录后执行:

SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';

如果返回 604800,说明配置成功。

额外注意事项
版本兼容性:
MySQL 8.0 及以上版本,必须用 binlog_expire_logs_seconds。
如果是 MySQL 5.7 及以下,继续用 expire_logs_days 没问题。
时间换算:
binlog_expire_logs_seconds 单位是秒,常用换算:
1 天 = 86400 秒
7 天 = 604800 秒
30 天 = 2592000 秒
其他废弃参数:
从日志里还看到 binlog_format 有警告('binlog_format' is deprecated),虽然当前版本还能用,但未来也可能被弃用。如果想彻底解决,建议关注官方文档,替换成更推荐的配置(比如 binlog_row_format 等细粒度参数)。
这样修改后,unknown variable 'expire_logs_days=7' 的错误就会消失,二进制日志的自动清理也能正常工作了。>)

 


優(yōu)網(wǎng)科技,優(yōu)秀企業(yè)首選的互聯(lián)網(wǎng)供應服務商

優(yōu)網(wǎng)科技秉承"專業(yè)團隊、品質服務" 的經營理念,誠信務實的服務了近萬家客戶,成為眾多世界500強、集團和上市公司的長期合作伙伴!

優(yōu)網(wǎng)科技成立于2001年,擅長網(wǎng)站建設、網(wǎng)站與各類業(yè)務系統(tǒng)深度整合,致力于提供完善的企業(yè)互聯(lián)網(wǎng)解決方案。優(yōu)網(wǎng)科技提供PC端網(wǎng)站建設(品牌展示型、官方門戶型、營銷商務型、電子商務型、信息門戶型、微信小程序定制開發(fā)、移動端應用(手機站APP開發(fā))、微信定制開發(fā)(微信官網(wǎng)、微信商城、企業(yè)微信)等一系列互聯(lián)網(wǎng)應用服務。


我要投稿

姓名

文章鏈接

提交即表示你已閱讀并同意《個人信息保護聲明》

專屬顧問 專屬顧問
掃碼咨詢您的優(yōu)網(wǎng)專屬顧問!
專屬顧問
馬上咨詢
聯(lián)系專屬顧問
聯(lián)系專屬顧問
聯(lián)系專屬顧問
掃一掃馬上咨詢
掃一掃馬上咨詢

掃一掃馬上咨詢

和我們在線交談!