搭建mysql生产环境需兼顾安全、稳定、可维护与可扩展,涵盖系统配置(禁swap、调优文件系统)、MySQL安装(官方源/二进制包)、核心参数(server-id、log-bin、innodb_flush_log_at_trx_commit=1)、权限最小化、ssl加密、自动化备份(XtraBackup/mysqldump+binlog)、prometheus+grafana监控及运维标准化。

在服务器上搭建 MySQL 生产环境,核心是安全、稳定、可维护和可扩展。不能只装个 MySQL 就完事,得从系统配置、权限控制、备份恢复、监控告警、高可用准备等多方面入手。
系统与依赖准备
选择稳定版本的 linux 发行版(如 centos 7/8、Rocky Linux、ubuntu 22.04 LTS),关闭 SELinux 或设为 permissive 模式,调整防火墙只开放必要端口(默认 3306)。确保系统时间同步(chronyd/NTP),禁用 swap(避免 MySQL 内存被交换导致性能抖动)。
- 预留足够内存:InnoDB buffer pool 建议设为物理内存的 50%–75%,但需为 OS 和其他服务留余量
- 使用 XFS 或 ext4 文件系统,挂载时加 noatime,nobarrier(XFS 下可省略 barrier)提升 I/O 效率
- MySQL 用户必须为独立系统用户(如 mysql),禁止 root 直接运行 mysqld
MySQL 安装与基础配置
优先使用官方 YUM/Apt 仓库或 tar.gz 二进制包安装(避免系统自带老旧版本)。配置文件统一放在 /etc/my.cnf 或 /etc/my.cnf.d/server.cnf,关键参数需显式声明。
- server-id 必须唯一(主从/集群必需),log-bin 开启二进制日志(用于复制与 PITR)
- innodb_flush_log_at_trx_commit=1(保障 ACID),sync_binlog=1(主库强一致性)
- max_connections 按预估并发连接数设(如 500–2000),并配合应用层连接池控制
- 禁用本地文件导入(local_infile=OFF),关闭符号链接支持(symbolic-links=0)
账号权限与安全加固
删除匿名用户、test 数据库;root 账号仅限 localhost 登录;所有业务账号按最小权限原则授权,禁用通配符主机(如 ‘user’@’%’ 改为具体 IP 或内网段)。
- 密码策略启用:validate_password.policy = MEDIUM,要求长度 ≥ 12,含大小写字母+数字+特殊字符
- 敏感操作审计:开启 general_log 或使用 MySQL Enterprise Audit(开源版可用 pt-query-digest + 日志分析)
- 传输加密:强制 SSL 连接(require_secure_transport=ON),生成并部署合法证书
备份、监控与日常运维
备份必须自动化、可验证、异地保存。推荐 mysqldump + binlog(中小规模)或 Percona XtraBackup(大库热备)。每天全备 + 每小时 binlog 增量归档,保留至少 7 天,定期执行还原演练。
- 监控项必含:连接数、QPS/TPS、慢查询数量、InnoDB 缓冲池命中率、复制延迟(Seconds_Behind_Master)、磁盘空间
- 用 Prometheus + mysqld_exporter + Grafana 实现可视化告警,关键指标异常(如连接数 > 90% max_connections)触发企业微信/钉钉通知
- 建立运维手册:包括启动/停止脚本、主从切换 SOP、紧急 kill 连接流程、慢 SQL 分析模板
不复杂但容易忽略的是配置持久化验证和变更管理——每次修改 my.cnf 后要 mysqld –validate-config 检查,上线前在预发环境完整走一遍压测和故障模拟。