在京东云ECS实例上通过Docker运行MySQL,虽便捷但需兼顾稳定性、安全性、性能与可维护性。以下是关键配置注意事项(按优先级和类别梳理):
✅ 一、基础环境准备
-
ECS选型建议
- CPU/内存:MySQL对内存敏感,建议至少2核4GB(生产环境建议4核8GB+),避免与宿主机其他服务争抢资源。
- 系统盘/数据盘:
- 系统盘(高效云盘)仅存OS和Docker;
- MySQL数据必须挂载独立的高性能云硬盘(SSD云盘),并设置为
ext4/xfs格式,启用noatime挂载选项(减少IO开销)。
- 网络:确保安全组放行3306端口(建议限制源IP,非全网开放)。
-
Docker环境
- 使用京东云官方镜像源提速(
https://docker.jdcloud.com)或配置阿里云/清华镜像源。 - Docker版本 ≥ 20.10(支持
--cgroup-parent等高级资源控制)。
- 使用京东云官方镜像源提速(
✅ 二、Docker运行MySQL的关键配置(推荐命令模板)
docker run -d
--name mysql-prod
--restart=unless-stopped
--network=host # 或自定义bridge网络(推荐,便于端口隔离)
-p 3306:3306
-e MYSQL_ROOT_PASSWORD='StrongPass123!'
-e MYSQL_DATABASE='app_db'
-e MYSQL_USER='app_user'
-e MYSQL_PASSWORD='AppPass456!'
--ulimit nofile=65536:65536
--memory=4g
--cpus=2
--oom-kill-disable=false # 允许OOM时被kill(避免影响宿主机)
--tmpfs /tmp:rw,size=128m,exec
-v /data/mysql/conf:/etc/mysql/conf.d:ro
-v /data/mysql/data:/var/lib/mysql:rw,Z # SELinux上下文(若启用)
-v /data/mysql/logs:/var/log/mysql:rw
-v /etc/localtime:/etc/localtime:ro # 同步宿主机时区
-v /etc/timezone:/etc/timezone:ro
--log-driver json-file
--log-opt max-size=100m
--log-opt max-file=3
mysql:8.0.33
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
--default-authentication-plugin=mysql_native_password
--innodb_buffer_pool_size=2G # 建议设为物理内存50%~75%
--max_connections=500
--wait_timeout=28800
--interactive_timeout=28800
--log-bin=/var/log/mysql/mysql-bin.log
--binlog_format=ROW
--sync_binlog=1
--innodb_flush_log_at_trx_commit=1
🔑 关键参数说明:
--memory/--cpus:强制限制资源,防MySQL吃光宿主机内存(必须设置!)-v ...:Z:SELinux下必需(京东云CentOS/RHEL默认启用)innodb_buffer_pool_size:核心性能参数,务必根据实际内存调整sync_binlog=1&innodb_flush_log_at_trx_commit=1:保障事务持久性(牺牲少量性能换数据安全)--log-bin+ROW:开启二进制日志(备份/主从必备)
✅ 三、安全加固(重中之重!)
| 风险点 | 解决方案 |
|---|---|
| 弱密码/默认root | 严禁使用root账号应用连接;通过MYSQL_USER创建专用账号,权限最小化(如 GRANT SELECT,INSERT ON app_db.* TO 'app_user'@'%') |
| 远程无限制访问 | 安全组仅放行可信IP;MySQL内禁用root@'%',保留root@'localhost';或使用--bind-address=127.0.0.1(仅本地访问)+ 反向X_X(如Nginx) |
| 未加密传输 | 生产环境必须启用SSL: ① 挂载证书到容器 /etc/mysql/ssl/② 启动参数追加: --ssl-ca=/etc/mysql/ssl/ca.pem --ssl-cert=/etc/mysql/ssl/server-cert.pem --ssl-key=/etc/mysql/ssl/server-key.pem |
| 敏感信息泄露 | 避免在命令行暴露密码(改用--env-file);配置文件中密码用mysql_config_editor加密或KMS托管 |
✅ 四、数据持久化与备份
- 绝对禁止:不挂载
/var/lib/mysql到宿主机 → 容器删除即数据丢失! - 备份策略:
- 物理备份:
mysqldump(逻辑)或Percona XtraBackup(物理热备,推荐)→ 定时脚本+上传至京东云对象存储(JSO); - Binlog备份:每日归档binlog到JSO,支持PITR(时间点恢复);
- 快照备份:对挂载的数据盘定期创建云硬盘快照(京东云控制台一键操作)。
- 物理备份:
✅ 五、监控与运维
- 监控指标(接入京东云云监控/JCloud Monitor):
- MySQL:
Threads_connected,Innodb_buffer_pool_read_requests,Slow_queries,QPS - 容器:
container_memory_usage_bytes,container_cpu_usage_seconds_total
- MySQL:
- 日志收集:通过京东云日志服务(JDL)采集
/var/log/mysql/*.log及Docker日志。 - 健康检查:添加
--health-cmd="mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD} --silent"。
⚠️ 六、避坑指南(京东云特有注意点)
- 云盘IOPS限制:SSD云盘有IOPS上限(如1TB盘约3000 IOPS),高并发场景需升级更高规格或使用超高IO云盘。
- 内网DNS解析:若ECS使用京东云VPC内网,确保
/etc/resolv.conf指向京东云DNS(100.100.2.136),避免容器内域名解析失败。 - GPU/ECS规格兼容性:若未来需AI扩展,确认所选ECS型号支持GPU且Docker已安装NVIDIA Container Toolkit。
- 备案要求:若MySQL对外提供Web服务,ECS公网IP需完成ICP备案(京东云控制台提交)。
✅ 七、进阶建议
- 高可用方案:单容器仅适合测试/开发;生产环境推荐:
- 主从复制(Docker Compose编排主从+ProxySQL);
- 或直接使用京东云云数据库RDS for MySQL(自动备份、故障切换、读写分离,更省心)。
- 配置管理:将
my.cnf置于Git仓库,配合Ansible/CICD自动部署。 - 升级策略:使用
docker pull mysql:8.0.x+docker-compose up -d --force-recreate滚动升级,提前验证兼容性。
如需,我可为你提供:
- ✅ 完整的
docker-compose.yml(含主从+监控) - ✅ 自动化备份脚本(JSO上传+过期清理)
- ✅ 京东云安全组规则JSON模板
- ✅ MySQL 8.0 最小化安全配置清单(
my.cnf)
欢迎随时提出具体场景(如:高并发电商、日志分析系统),我会给出针对性优化方案。
云计算