CentOS或Ubuntu系统部署MySQL生产环境推荐配置有哪些?

在 CentOS 或 Ubuntu 上部署 MySQL 生产环境时,配置的核心目标是稳定性、高可用性和性能。以下是一份经过验证的推荐配置清单,涵盖系统层、MySQL 层及运维层面。


一、操作系统层优化(CentOS / Ubuntu)

1. 内核参数调优

修改 /etc/sysctl.conf 并执行 sysctl -p

# 增加文件描述符限制
fs.file-max = 6553500

# 增加进程最大数
kernel.pid_max = 4096

# 网络参数优化(提升并发连接能力)
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 30

# 内存管理优化
vm.swappiness = 10  # 降低 swap 使用倾向
vm.overcommit_memory = 1  # 允许过度分配内存(适合 MySQL)

💡 注意:Ubuntu 默认可能已启用 transparent huge pages (THP),建议关闭以避免性能抖动:

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

2. 文件系统与磁盘 I/O

  • 文件系统:推荐使用 XFS(CentOS 默认)或 ext4(Ubuntu),避免使用 NFS 作为数据盘。
  • 挂载选项:对数据目录所在分区添加 noatime,nodiratime 减少写入开销:
    /dev/sdb1  /var/lib/mysql  xfs,noatime,nodiratime,defaults  0 0
  • I/O 调度器:SSD 建议使用 nonemq-deadline;HDD 使用 deadlinebfq
    echo mq-deadline > /sys/block/sda/queue/scheduler

3. 用户与权限

  • 创建专用用户运行 MySQL:
    useradd -r -s /bin/false mysql
    chown -R mysql:mysql /var/lib/mysql
    chmod 750 /var/lib/mysql

二、MySQL 核心配置(my.cnf / my.ini)

将以下内容放入 /etc/my.cnf(主配置文件)的 [mysqld] 段:

[mysqld]
# 基础设置
basedir = /usr
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
port = 3306
user = mysql

# 字符集(生产环境推荐 utf8mb4)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# 连接相关
max_connections = 500
max_allowed_packet = 128M
wait_timeout = 28800
interactive_timeout = 28800

# InnoDB 关键配置(根据内存调整)
innodb_buffer_pool_size = 70% of total RAM  # 例如 16G 内存设为 11G
innodb_log_file_size = 512M
innodb_log_buffer_size = 64M
innodb_flush_method = O_DIRECT  # 避免双重缓冲
innodb_flush_log_at_trx_commit = 1  # 保证事务安全(可考虑 2 提升性能但牺牲部分安全性)
innodb_file_per_table = 1
innodb_stats_on_metadata = 0
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_thread_concurrency = 0  # 自动优化

# 日志与备份
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_error = /var/log/mysql/error.log

# 其他
skip-name-resolve = 1  # 禁用 DNS 解析提速连接
tmp_table_size = 256M
max_heap_table_size = 256M

⚠️ 内存计算示例
若服务器有 32GB RAM:

  • innodb_buffer_pool_size = 22G(约 70%)
  • 预留 4GB 给 OS + 其他进程
  • 避免设置 query_cache_size(MySQL 8.0 已移除,5.7 中生产环境通常禁用)

三、高可用与监控建议

1. 高可用方案(根据需求选择)

  • 主从复制(Master-Slave):基础架构必备,用于读写分离和灾备。
  • MHA / Orchestrator:自动故障转移。
  • InnoDB Cluster / MySQL Group Replication:强一致性集群(推荐用于关键业务)。
  • ProxySQL / Proxy:实现智能路由、连接池、缓存等。

2. 监控体系

  • Prometheus + Grafana:采集 mysql_exporter 指标,可视化展示 QPS、TPS、延迟、锁等待等。
  • 慢查询分析:定期分析 slow.log,配合 pt-query-digest 工具。
  • 告警:配置 CPU、内存、磁盘、主从延迟、连接数等阈值告警。

3. 备份策略

  • 每日全量备份(XtraBackup / mysqldump),每小时增量备份。
  • 备份文件加密存储,异地保留至少 3 份。
  • 定期演练恢复流程。

四、安全加固

  • 删除默认账户(如 root@localhost 以外的 root 登录)。
  • 仅允许应用服务器 IP 访问 MySQL 端口(防火墙规则 + bind-address 限制)。
  • 启用 SSL/TLS 加密连接。
  • 定期更新 MySQL 版本(关注 CVE 漏洞)。
  • 最小权限原则:为每个应用创建独立账号,仅授予必要权限。

五、版本选择建议

场景 推荐版本
新项目 MySQL 8.0 LTS(支持 JSON、窗口函数、更好的性能)
旧系统兼容 MySQL 5.7(仍在维护至 2023 年底,建议尽快迁移)
云原生环境 考虑托管服务(如 AWS RDS、阿里云 RDS)减少运维负担

六、部署注意事项

  • 不要使用官方预编译包直接跑在生产环境,建议通过源码编译或使用官方 RPM/DEB 包。
  • 禁止在数据库服务器上运行其他重负载服务(如 Web、Redis 等)。
  • 定期执行 ANALYZE TABLEOPTIMIZE TABLE(针对碎片化严重的表)。
  • 压测验证:上线前进行压力测试(如 sysbench),确认配置合理性。

如需针对具体硬件规格(如 CPU 核数、内存大小、磁盘类型)定制配置参数,可提供详细信息,我可进一步给出精细化建议。

云服务器