温馨提示×

Linux MariaDB网络配置注意事项

小樊
58
2026-06-30 14:57:33
栏目: 云计算

在 Linux 上配置 MariaDB 网络访问时,需要从 监听地址、防火墙、用户权限、SELinux、安全策略 等多方面考虑。下面按生产环境常见注意事项系统说明。


一、监听地址与端口配置

1️⃣ 配置文件位置

常见配置文件:

/etc/my.cnf
/etc/my.cnf.d/server.cnf
/etc/mysql/mariadb.conf.d/50-server.cnf

2️⃣ 监听地址(bind-address)

[mysqld]
bind-address = 0.0.0.0

或指定 IP:

bind-address = 192.168.1.100

⚠️ 注意事项:

  • bind-address = 127.0.0.1只能本机访问
  • 生产环境不建议直接 0.0.0.0,应限定 IP
  • MariaDB ≥ 10.6:
    bind-address = 0.0.0.0
    mysqlx-bind-address = 0.0.0.0
    

3️⃣ 端口

默认端口:

port = 3306

确认监听状态:

ss -lntp | grep mysqld

二、防火墙配置(非常重要)

1️⃣ firewalld(CentOS / RHEL / Rocky)

firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

2️⃣ ufw(Ubuntu)

ufw allow 3306/tcp
ufw reload

⚠️ 建议:

  • 只允许 指定 IP 或网段
firewall-cmd --permanent --add-rich-rule='
  rule family="ipv4"
  source address="192.168.1.0/24"
  port protocol="tcp" port="3306" accept'

三、MariaDB 用户权限(最常见问题)

1️⃣ 默认用户只能本地登录

SELECT host FROM mysql.user WHERE user='root';

2️⃣ 创建允许远程访问的用户

✅ 推荐方式(最小权限):

CREATE USER 'appuser'@'192.168.1.%' IDENTIFIED BY 'StrongPass!';
GRANT SELECT,INSERT,UPDATE ON appdb.* TO 'appuser'@'192.168.1.%';
FLUSH PRIVILEGES;

❌ 不推荐:

GRANT ALL ON *.* TO 'root'@'%';

3️⃣ 修改已有用户

RENAME USER 'user'@'localhost' TO 'user'@'%';

四、SELinux 注意事项(CentOS / RHEL)

1️⃣ 检查 SELinux

getenforce

2️⃣ 允许 MariaDB 网络访问

setsebool -P mysql_connect_any 1

或:

setsebool -P mariadb_connect_any 1

3️⃣ 查看拒绝日志

ausearch -m avc -ts recent

五、skip-networking 参数(致命问题)

⚠️ 不要启用

skip-networking

一旦启用:

  • TCP 网络连接全部失效
  • 只能 socket 连接

✅ 正常应注释或删除:

# skip-networking

六、socket 与 TCP 的区别

方式 说明
socket 本地连接,快,安全
TCP/IP 远程连接

本地连接优先:

mysql -u root -p

远程连接:

mysql -h 192.168.1.100 -u appuser -p

七、连接超时与网络稳定性

1️⃣ 防止空闲断开

[mysqld]
wait_timeout = 28800
interactive_timeout = 28800

2️⃣ 大连接数

max_connections = 500

八、安全加固建议(生产必做)

✅ 使用 非默认端口

port = 13306

✅ 禁止 root 远程登录
✅ 使用 SSL 连接

GRANT USAGE ON *.* TO 'user'@'%' REQUIRE SSL;

✅ 限制连接 IP
✅ 定期审计用户权限


九、常见排错 checklist

问题 检查点
无法远程连接 bind-address
连接被拒绝 防火墙
用户无法登录 host 字段
本地能连远程不能 SELinux
连接慢 DNS 反向解析

关闭 DNS 反向解析(可选):

[mysqld]
skip-name-resolve

十、快速检查命令总结

ss -lntp | grep 3306
mysql -h 127.0.0.1 -u user -p
mysql -h 真实IP -u user -p

如果你愿意,可以告诉我:

  • ✅ 发行版(CentOS / Ubuntu)
  • ✅ MariaDB 版本
  • ✅ 是否 Docker / 云服务器
  • ✅ 本地还是远程连接

我可以给你一套完全对应的配置示例

0