必须三步到位:删除'root'@'%'用户、设置bind-address=127.0.0.1并重启服务、关闭云安全组3306端口;仅删用户或仅改配置均不彻底,因权限缓存、监听未锁、端口仍开放会导致远程仍可连接。

直接关闭 MySQL 远程访问权限,核心就三步:删掉或禁用 % 主机的用户、改回 bind-address = 127.0.0.1、重启服务。漏掉任意一步,远程仍可能连上。
删除或限制 root@% 类用户
远程能连上,大概率是因为你之前执行过类似 GRANT ALL ON *.* TO 'root'@'%' 的授权。这个 % 是万能通配符,不能留着。
- 登录 MySQL 命令行:
mysql -u root -p - 执行:
DELETE FROM mysql.user WHERE User='root' AND Host='%';(若创建的是其他用户名,如dev_user,把root换掉) - 务必执行:
FLUSH PRIVILEGES;,否则删除不生效 - 验证是否清理干净:
SELECT User, Host FROM mysql.user;,确认结果里没有@'%'行
改回 bind-address = 127.0.0.1
即使删了用户,如果 my.ini 里还写着 bind-address = 0.0.0.0,MySQL 依然会监听所有网卡——只是没权限用户连不上而已。这不是“关闭”,是“堵门但没锁门”。
- 找到
my.ini(常见路径:C:\ProgramData\MySQL\MySQL Server X.X\my.ini或 MySQL 安装目录下) - 搜索
bind-address,把它改成:bind-address = 127.0.0.1(不要注释掉,也不要写成localhost,Windows 下只认 IP 形式) - 保存文件,必须重启 MySQL 服务才生效:
net stop mysql && net start mysql - 验证是否生效:管理员命令行运行
netstat -ano | findstr :3306,正常只应看到127.0.0.1:3306,而不是0.0.0.0:3306
Windows 防火墙不用动,但别忘检查云安全组
本地关掉远程访问后,防火墙规则本身已无实际影响;但如果这台 Win7 跑在阿里云/腾讯云上,安全组里开着 3306 端口,别人仍可能扫到端口开放(虽然连不上数据库)。这是最容易被忽略的“心理漏洞”。
- 本地防火墙:无需删除原有 3306 入站规则,保留也无害
- 云平台:登录控制台 → 找到对应实例 → 进入「安全组」→ 编辑入方向规则 → 删除或禁用 3306 的 TCP 规则
- 顺手检查下是否还有其他非必要端口(如 22、8080)暴露在外,一并收紧
真正彻底关闭远程访问,不是靠“试连失败”来判断,而是看 netstat 输出里有没有 0.0.0.0:3306、mysql.user 表里有没有 @'%'、云安全组里有没有放行——三者缺一不可。少查一个,就等于留了一条缝。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











