在 Linux 上配置 MariaDB 网络访问时,需要从 监听地址、防火墙、用户权限、SELinux、安全策略 等多方面考虑。下面按生产环境常见注意事项系统说明。
常见配置文件:
/etc/my.cnf
/etc/my.cnf.d/server.cnf
/etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld]
bind-address = 0.0.0.0
或指定 IP:
bind-address = 192.168.1.100
⚠️ 注意事项:
bind-address = 127.0.0.1:只能本机访问0.0.0.0,应限定 IPbind-address = 0.0.0.0
mysqlx-bind-address = 0.0.0.0
默认端口:
port = 3306
确认监听状态:
ss -lntp | grep mysqld
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
ufw allow 3306/tcp
ufw reload
⚠️ 建议:
firewall-cmd --permanent --add-rich-rule='
rule family="ipv4"
source address="192.168.1.0/24"
port protocol="tcp" port="3306" accept'
SELECT host FROM mysql.user WHERE user='root';
✅ 推荐方式(最小权限):
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'@'%';
RENAME USER 'user'@'localhost' TO 'user'@'%';
getenforce
setsebool -P mysql_connect_any 1
或:
setsebool -P mariadb_connect_any 1
ausearch -m avc -ts recent
⚠️ 不要启用
skip-networking
一旦启用:
✅ 正常应注释或删除:
# skip-networking
| 方式 | 说明 |
|---|---|
| socket | 本地连接,快,安全 |
| TCP/IP | 远程连接 |
本地连接优先:
mysql -u root -p
远程连接:
mysql -h 192.168.1.100 -u appuser -p
[mysqld]
wait_timeout = 28800
interactive_timeout = 28800
max_connections = 500
✅ 使用 非默认端口
port = 13306
✅ 禁止 root 远程登录
✅ 使用 SSL 连接
GRANT USAGE ON *.* TO 'user'@'%' REQUIRE SSL;
✅ 限制连接 IP
✅ 定期审计用户权限
| 问题 | 检查点 |
|---|---|
| 无法远程连接 | 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
如果你愿意,可以告诉我:
我可以给你一套完全对应的配置示例。