如何搭建mysql生产环境_mysql环境部署规范

来源:这里教程网 时间:2026-02-28 20:42:24 作者:

MySQL 生产环境必须禁用
skip-grant-tables

跳过权限验证看似方便初始化,但等于把数据库裸奔在公网。只要配置文件里出现这行,重启后所有账号(包括空密码)都能直接登录,

mysqld
启动日志里会明确警告
WARNING: --skip-grant-tables specified
。生产环境上线前务必 grep 检查:
grep -r "skip-grant-tables" /etc/my.cnf* /usr/my.cnf
,删掉、注释掉,再执行
mysql -u root -p
验证是否真正启用了权限系统。

bind-address 必须显式设为内网 IP 或 127.0.0.1

默认值

0.0.0.0
是高危配置,尤其在云主机或 Docker 环境中极易暴露到公网。若应用与 MySQL 同机部署,直接设
bind-address = 127.0.0.1
;若需跨机器访问,只写具体内网 IP,例如
bind-address = 192.168.10.5
。切勿使用
localhost
(它会触发 socket 连接,绕过 TCP 层限制)。检查方式:
mysql -e "SHOW VARIABLES LIKE 'bind_address';"
,输出必须是明确的 IPv4 地址,不是
*
或空值。

root 账号必须删除或重命名,且禁止远程登录

MySQL 安装后默认存在

'root'@'localhost'
'root'@'127.0.0.1'
两个账号,部分版本甚至带
'root'@'%'
。立即执行:
DROP USER 'root'@'%';<br>RENAME USER 'root'@'localhost' TO 'adm_2024'@'localhost';<br>FLUSH PRIVILEGES;
。新账号密码必须满足:长度 ≥12,含大小写字母+数字+符号,不包含用户名或日期。后续管理统一用该账号 +
mysql -u adm_2024 -p -S /var/run/mysqld/mysqld.sock
本地 socket 连接。

innodb_buffer_pool_size 至少设为物理内存的 50%~75%

这个参数直接影响查询性能和磁盘 IO 压力。设太小会导致频繁刷脏页、Buffer Pool 命中率暴跌;设太大可能挤占系统缓存,引发 OOM。常见错误是沿用开发机的 128M 或 256M。正确做法:

查总内存:
free -h
查当前值:
mysql -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"
线上 16G 内存机器建议设为
10G
(即
10737418240
字节),写入
/etc/my.cnf
[mysqld]
修改后必须重启
systemctl restart mysqld
,仅 reload 不生效
。监控时重点关注
Innodb_buffer_pool_reads
(每秒物理读)是否持续 > 5,过高说明 Buffer Pool 不足。

生产环境最常被忽略的是

max_connections
与应用连接池的匹配——设太高撑爆内存,设太低导致应用报
Too many connections
。这需要结合实际并发量和每个连接平均内存占用测算,不能只看文档推荐值。

相关推荐