mysql允许外网访问
MySQL默认绑定的许外127.0.0.1,等于把自己锁在本地抽屉里。网访问你写的许外应用跑在另一台服务器上,想连这个数据库,网访问直接吃闭门羹。许外这事儿我踩过坑——之前帮朋友调试一个电商后台,网访问他在阿里云上装了MySQL,许外本地Navicat死活连不上,网访问折腾两小时,许外最后发现配置文件里地址没改。网访问 改起来其实不复杂。许外核心就两步:改监听地址,网访问开防火墙端口。许外先找到my.cnf或my.ini(Windows下叫my.ini,网访问Linux通常在/etc/mysql/或/etc/下)。许外里面有个[mysqld]段落,找到bind-address这一行。默认是127.0.0.1,把它改成0.0.0.0。意思是不再只听本机回环,而是所有网络接口都监听。没有这行?手动加一行也行。改完保存,重启MySQL服务——service mysql restart(或systemctl restart mysqld,看发行版)。 光改这个还不够。你得确认MySQL用户表里,允许哪个账号从哪个host登录。默认的root通常只允许localhost。用命令行进MySQL: 还有个坑,防火墙。很多云服务器默认只开22端口。你改了MySQL配置,防火墙没放行3306,照样连不上。Linux上检查ufw或firewalld。ufw的话: 改完之后,验证一下。本地命令行: 最后说句实在话——外网访问MySQL确实方便,但风险是实打实的。数据库暴露在公网,等于给黑客递了把钥匙。密码必须复杂,至少16位混合字符。另外强烈建议不要用默认的3306端口,改成其他高位端口,比如43306,能挡掉一大批自动扫描脚本。我自己的服务器就是这么干的,至今没出过事。要是业务允许,更推荐用SSH隧道或者VPN访问数据库,那才是正经做法,但那是另一个话题了。mysql -u root -p,然后执行SELECT user, host FROM mysql.user;,你会看到root的host列是localhost。要允许外网,得新建一个用户或者改host。我习惯新建专用账号,别直接动root——安全习惯问题。比如:CREATE USER 'appuser'@'%' IDENTIFIED BY '强密码';,再给权限:GRANT ALL PRIVILEGES ON 你的库.* TO 'appuser'@'%';,最后FLUSH PRIVILEGES;。%代表任意IP,你也可以写成具体IP段,比如'192.168.1.%',更稳。sudo ufw allow 3306/tcp。如果是云服务商的安全组策略——比如阿里云、腾讯云——得去控制台,找到安全组,入方向加一条规则,TCP端口3306,源IP建议别写0.0.0.0/0,只写你办公网的IP,安全得多。我见过有人图省事全放通,结果数据库被扫到,被勒索软件加密,哭都来不及。mysql -h 你的服务器公网IP -u appuser -p,能进就说明通了。不通的话,先ping一下IP,再telnet IP 3306看看端口通不通。telnet不通,基本就是防火墙或安全组的问题。这时候别慌,一步步排查,多半是安全组规则没生效,或者云服务商默认禁了3306。
-
上一篇
-
下一篇