如何在企业内网中快速完成MySQL环境搭建 内网数据库环境搭建与访问权限控制

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

MySQL 5.7/8.0 在 CentOS 7 内网离线安装

内网环境通常无法直接

yum install mysql-server
,必须走离线部署。优先选官方二进制包(
mysql-5.7.42-linux-glibc2.12-x86_64.tar.gz
mysql-8.0.33-linux-glibc2.12-x86_64.tar.gz
),比 RPM 包更可控,不依赖系统级服务注册。

关键步骤:

用外网机器下载对应版本二进制包,校验
sha256sum
防止传输损坏
解压到
/opt/mysql
,创建专用用户
mysql
(不要用 root 启动)
初始化必须加
--initialize-insecure
(避免随机 root 密码丢失在日志里,内网调试期省事)
mysqld --defaults-file=/etc/my.cnf
启动前务必确认
my.cnf
bind-address = 127.0.0.1
已改为内网 IP(如
192.168.10.5
),否则其他机器连不上

创建应用账号并限制访问来源

默认

root@localhost
无法从内网其他机器登录,必须显式创建带 host 限定的账号。不要用
%
,哪怕是在内网——一旦防火墙策略松动或跳板机暴露,风险陡增。

实操命令示例:

CREATE USER 'app_user'@'192.168.10.%' IDENTIFIED BY 'StrongPass123!';
GRANT SELECT,INSERT,UPDATE ON mydb.* TO 'app_user'@'192.168.10.%';
FLUSH PRIVILEGES;

注意点:

host 段用
192.168.10.%
%
更安全,且兼容大多数内网子网划分
MySQL 8.0 默认认证插件是
caching_sha2_password
,老应用连接可能报
Client does not support authentication protocol
;建号时加
IDENTIFIED WITH mysql_native_password
兼容
权限粒度按最小够用原则给,比如报表库只给
SELECT
,写入库禁用
DROP
ALTER

防火墙与 SELinux 的实际放行逻辑

即使 MySQL 绑定了内网 IP、账号也开了对应 host,仍连不上?八成卡在系统层。CentOS 7 默认 firewalld 和 SELinux 双启用,必须都过一遍。

firewalld 放行:

别只加端口:运行
firewall-cmd --permanent --add-port=3306/tcp
后,必须
firewall-cmd --reload
更稳妥的做法是加 rich rule,限定源 IP 段:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port port=3306 protocol=tcp accept'

SELinux 放行(常被忽略):

检查状态:
sestatus
,若为
enforcing
,需允许 mysqld 网络连接:
setsebool -P mysqld_connect_any on
若数据目录不在
/var/lib/mysql
(比如放在
/data/mysql
),还要恢复上下文:
semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?"
,再
restorecon -Rv /data/mysql

验证连通性时最容易漏掉的三个点

用另一台内网机器执行

mysql -h 192.168.10.5 -u app_user -p
连不上?先别改配置,快速排查这三项:

从客户端机器执行
telnet 192.168.10.5 3306
—— 如果不通,问题在网络或防火墙,不是 MySQL 配置
在数据库服务器上执行
netstat -tlnp | grep :3306
,确认监听的是
*:3306
或具体内网 IP,不是仅
127.0.0.1:3306
查 MySQL 错误日志:
tail -f /opt/mysql/data/hostname.err
,常见提示如
Access denied for user 'app_user'@'192.168.10.22'
,说明账号 host 不匹配,不是密码错

内网环境容易高估“物理隔离”的安全性,但账号、防火墙、SELinux 三层中任意一层配置疏漏,都会导致服务不可用或越权访问。尤其是多实例共存时,

my.cnf
加载顺序和
socket
路径冲突,比公网环境更难定位。

相关推荐