MySQL 的生产环境配置需要根据业务规模、数据量、并发量、可用性要求等因素进行针对性调整。以下是一般生产环境的核心配置建议和注意事项:
1. 基础硬件配置
- CPU:
- 4核以上(高并发场景建议 8~16核或更多)。
- 优先选择高频CPU,OLTP(事务处理)场景对单线程性能敏感。
- 内存:
- 至少 8GB,推荐 16GB 起步(内存是性能关键)。
innodb_buffer_pool_size通常设为总内存的 50%~70%(专用于InnoDB缓存)。
- 存储:
- SSD(必须):NVMe SSD 性能最佳,避免使用机械硬盘。
- RAID 10(可选):提高冗余和IO性能。
- 预留足够空间(如数据量的 2~3 倍,考虑日志和增长)。
- 网络:
- 千兆/万兆网卡,低延迟网络(尤其分布式部署)。
2. 关键MySQL参数配置
核心参数(my.cnf/my.ini)
[mysqld]
# 基础设置
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
pid-file = /var/run/mysqld/mysqld.pid
# 内存优化
innodb_buffer_pool_size = 12G # 总内存的50%~70%
innodb_buffer_pool_instances = 4 # 缓冲池分区(建议每1GB pool对应1个实例)
key_buffer_size = 256M # MyISAM表专用(若未使用可调低)
# 连接与线程
max_connections = 500 # 根据应用需求调整(避免过高)
thread_cache_size = 32 # 线程缓存
table_open_cache = 4000 # 打开表的缓存
# InnoDB性能
innodb_log_file_size = 2G # 重做日志大小(通常1~4G)
innodb_log_buffer_size = 64M # 日志缓冲区
innodb_flush_log_at_trx_commit = 1 # 事务安全(1=严格持久化,2=折衷)
innodb_flush_method = O_DIRECT # 避免双缓冲
innodb_file_per_table = ON # 每个表独立表空间
# 查询优化
query_cache_type = 0 # 禁用查询缓存(MySQL 8.0已移除)
tmp_table_size = 64M
max_heap_table_size = 64M
# 日志与监控
slow_query_log = 1
long_query_time = 2 # 慢查询阈值(秒)
log_error = /var/log/mysql/error.log
3. 高可用与扩展
- 主从复制(Master-Slave):
- 至少1个从库(读写分离+备份)。
- 配置
binlog_format=ROW和server_id。
- 集群方案:
- InnoDB Cluster(MySQL Group Replication + MySQL Router)。
- Galera Cluster(如Percona XtraDB Cluster)。
- Proxy/中间件:
- ProxySQL、MySQL Router(实现负载均衡)。
4. 安全配置
- 基础安全:
- 禁用远程root访问,限制用户权限。
- 启用SSL连接(
require_secure_transport=ON)。
- 备份策略:
- 每日全量备份 + binlog增量备份(工具:
mysqldump、xtrabackup)。 - 测试备份恢复流程!
- 每日全量备份 + binlog增量备份(工具:
- 防火墙:
- 限制3306端口仅对应用服务器开放。
5. 监控与调优
- 监控工具:
- Prometheus + Grafana +
mysqld_exporter。 - Percona PMM、MySQL Enterprise Monitor。
- Prometheus + Grafana +
- 关键指标:
- QPS/TPS、连接数、缓存命中率、锁等待、复制延迟。
- 定期维护:
OPTIMIZE TABLE(碎片整理)、ANALYZE TABLE(统计信息更新)。
6. 版本选择
- 推荐版本:
- MySQL 8.0(最新稳定版,性能优化和功能增强)。
- Percona Server 或 MariaDB(兼容MySQL,额外优化)。
7. 云数据库考虑
如果使用云服务(如AWS RDS、阿里云RDS):
- 根据业务规模选择实例规格(如AWS的db.m5系列)。
- 启用自动扩展、读写分离、自动备份功能。
- 利用云监控服务(如CloudWatch)。
注意事项
- 避免配置过高:如
max_connections过大可能导致内存耗尽。 - 测试环境验证:任何配置变更前需在测试环境压测(工具:sysbench、tpcc-mysql)。
- 文档记录:记录所有配置变更和备份策略。
根据实际业务压力逐步调整参数,定期复查性能指标!
云服务器