
要限制 MySQL 外部 IP 的连接,本质上就是控制哪些 IP 地址可以访问你的 MySQL 服务器。这可以通过配置 MySQL 的绑定地址以及防火墙规则来实现。
解决方案
-
修改 MySQL 配置文件: 找到 MySQL 的配置文件
my.cnf(或者my.ini,具体位置取决于你的操作系统和 MySQL 安装方式)。在[mysqld]部分,找到bind-address这一行。-
只允许本地连接: 如果你只想允许本机连接 MySQL,可以将
bind-address设置为127.0.0.1。 -
允许特定 IP 连接: 如果你想允许特定的 IP 地址连接,可以将
bind-address设置为服务器的 IP 地址,或者注释掉bind-address行(默认允许所有 IP 连接,但不推荐)。 注意: 修改完bind-address后,需要重启 MySQL 服务才能生效。
-
-
使用防火墙: 即使你配置了
bind-address,最好还是使用防火墙来限制访问。-
Linux (iptables/firewalld): 使用
my.ini0 或my.ini1 允许特定 IP 地址访问 MySQL 的 3306 端口。例如,使用my.ini1 允许 IP 地址my.ini3 连接:sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3306" accept' sudo firewall-cmd --reload
使用
my.ini0 允许 IP 地址my.ini3 连接:iptables -A INPUT -p tcp -s 192.168.1.100 --dport 3306 -j ACCEPT iptables -A INPUT -p tcp --dport 3306 -j DROP # 默认拒绝所有其他连接 service iptables save # 保存规则 service iptables restart # 重启服务
-
Windows 防火墙: 在 Windows 防火墙中,创建一个入站规则,允许特定 IP 地址访问 MySQL 的 3306 端口。
-
-
MySQL 用户权限控制: 即使 IP 地址允许连接,MySQL 用户也需要有相应的权限才能访问数据库。确保每个用户只被授予必要的权限,并且只允许从特定的 IP 地址连接。例如:
CREATE USER 'username'@'192.168.1.100' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'192.168.1.100'; FLUSH PRIVILEGES;
这个例子创建了一个用户
my.ini6,只允许从my.ini3 连接,并且拥有my.ini8 数据库的所有权限。
如何确认MySQL是否监听在所有IP上?
你可以使用 my.ini9 或 [mysqld]0 命令来检查 MySQL 是否监听在所有 IP 地址上。
netstat -tulnp | grep 3306
或者
ss -tulnp | grep 3306
如果输出结果中 [mysqld]1 显示为 [mysqld]2 或 [mysqld]3,则表示 MySQL 监听在所有 IP 地址上。如果显示为 [mysqld]4,则表示只监听本地连接。
修改 bind-address 后无法连接,该如何排查?
修改 bind-address 后无法连接,首先检查以下几点:
-
确认 MySQL 服务已重启: 修改配置文件后,必须重启 MySQL 服务才能生效。
-
检查防火墙设置: 确保防火墙允许你的 IP 地址访问 MySQL 的 3306 端口。
-
确认
bind-address设置正确: 检查my.cnf文件中bind-address是否设置正确。如果设置为服务器的 IP 地址,确保该 IP 地址是正确的。 -
MySQL 用户权限: 确保你使用的 MySQL 用户允许从你的 IP 地址连接。
-
SELinux 或 appArmor: 如果你的系统启用了 SELinux 或 AppArmor,可能会阻止 MySQL 监听网络端口。你需要配置 SELinux 或 AppArmor 允许 MySQL 监听网络端口。
为什么即使设置了 bind-address,仍然可以通过其他IP访问?
这通常是因为防火墙没有正确配置。bind-address 告诉 MySQL 监听哪些 IP 地址,但防火墙控制哪些 IP 地址可以访问服务器。如果防火墙允许所有 IP 地址访问 3306 端口,那么即使你设置了 bind-address,仍然可以通过其他 IP 地址访问。因此,配置 bind-address 的同时,务必配置防火墙规则,只允许特定的 IP 地址访问。
mysql linux word windows 操作系统 防火墙 app 端口 win 配置文件 mysql windows 数据库 linux


