部署 MySQL
自托管 MySQL,Docker、复制和生产调优。
平台高级
为什么
自托管 MySQL 控制存储引擎、复制拓扑和配置调优。Group Replication 或 InnoDB Cluster 提供 HA 自动故障转移。
平台即服务采用率 2024 年增长 24%,团队从虚拟机管理转向 git push 部署。the cloud infrastructure market reached $330B in 2024, growing 22% year-over-year (Synergy Research),PaaS 层捕获了大多数新工作负载。
何时使用
遗留应用、特定存储需求和大规模成本用自托管 MySQL。托管优先 PlanetScale/RDS。
如何做
1. Docker — mysql:8 镜像加 volume
2. 配置 — my.cnf 调优(innodb_buffer_pool_size、max_connections)
3. 初始化 — init.sql 放 docker-entrypoint-initdb.d
4. 备份 — mysqldump 或 mysqlbackup(企业)
5. 复制 — source + replica 或 Group Replication
6. HA — InnoDB Cluster 加 MySQL Router
7. 监控 — performance_schema、慢查询日志
示例
# docker-compose.yml
services:
mysql:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: mydb
volumes:
- mysqldata:/var/lib/mysql
- ./my.cnf:/etc/mysql/conf.d/my.cnf
command: --default-authentication-plugin=mysql_native_password
volumes:
mysqldata:
# my.cnf
[mysqld]
innodb_buffer_pool_size = 1G
max_connections = 200
slow_query_log = 1
long_query_time = 2
# 备份
docker exec mydb mysqldump -u root -p mydb | gzip > backup.sql.gz
常见问题
- ⚠innodb_buffer_pool_size 过低 — 默认 128MB,专用 DB 设 RAM 70%
- ⚠认证插件错误 — MySQL 8 默认 caching_sha2,旧客户端设 native_password
- ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致
最佳实践
- ✓innodb_buffer_pool_size 设 RAM 70% — 最大 InnoDB 性能提升
- ✓HA 用 Group Replication — 自动故障转移、多源
- ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求