虽然不建议在生产环境中用容器来部署数据库服务,但是在开发测试环境以及小型项目里也有不少以容器化运维数据库的场景。 在 并在Compose文件中添加挂载: 通过此配置,可实现MySQL容器的稳定部署,满足数据持久化、日志管理及时区一致性需求。 在 MySQL 8.0 及以上版本 中, 把配置文件里的 修改后的 完整修改步骤 2.重启 MySQL 容器: 3.验证是否生效: 4.登录后执行: 如果返回 604800,说明配置成功。 额外注意事项
以下是一份完整的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.sock2. 初始化脚本(可选)
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;volumes:
- ./init:/docker-entrypoint-initdb.d # 初始化脚本目录部署与验证步骤
1. 准备目录结构
mkdir -p data conf logs init # 若使用初始化脚本
touch conf/my.cnf2. 启动容器
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.log5. 验证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%)。注意事项
MYSQL_ROOT_PASSWORD
为强密码,避免使用默认值。chmod 777 data logs
)。data
目录,结合Binlog实现增量恢复。
注意:MySQL 8.0 后expire_logs_days 不再被识别
expire_logs_days
已经被 废弃,取而代之的是 binlog_expire_logs_seconds
,用来设置二进制日志的过期时间(单位:秒)。问题分析
MySQL 8.0 后,expire_logs_days
不再被识别,必须用 binlog_expire_logs_seconds
替代。
MySQL 8.4.5就会触发这个错误。
旧参数 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';
修改完配置后,必须重启容器让新配置生效:docker compose down
docker compose up -d
进入容器,用 SQL 查看参数是否正确加载:docker exec -it mysql mysql -u root -p
SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';
版本兼容性:
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' 的错误就会消失,二进制日志的自动清理也能正常工作了。>)

优网科技秉承"专业团队、品质服务" 的经营理念,诚信务实的服务了近万家客户,成为众多世界500强、集团和上市公司的长期合作伙伴!
优网科技成立于2001年,擅长网站建设、网站与各类业务系统深度整合,致力于提供完善的企业互联网解决方案。优网科技提供PC端网站建设(品牌展示型、官方门户型、营销商务型、电子商务型、信息门户型、微信小程序定制开发、移动端应用(手机站、APP开发)、微信定制开发(微信官网、微信商城、企业微信)等一系列互联网应用服务。