最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
刚安装好的MySQL 8.0如何开启并配置安全的外部远程连接权限?
时间:2026-07-16 08:16:46 编辑:袖梨 来源:一聚教程网
MySQL 8.0远程连接需同步解除四层封锁:①将bind-address设为0.0.0.0并重启服务;②用CREATE USER指定mysql_native_password插件创建用户并授权;③开放本地防火墙及云安全组3306端口;④客户端显式指定认证插件。
刚装好的 MySQL 8.0 默认完全禁止远程连接,不是“没开权限”,而是从监听地址、用户 host、认证插件、防火墙四层全部堵死——必须同步解四道锁,缺一不可。
确认并修改 bind-address = 0.0.0.0
MySQL 进程默认只监听 127.0.0.1:3306,外部请求根本到不了服务端。光改用户权限没用。
- 配置文件位置:
/etc/mysql/mysql.conf.d/mysqld.cnf(Ubuntu/Debian)或/etc/my.cnf(CentOS/RHEL),Windows 是C:ProgramDataMySQLMySQL Server 8.0my.ini - 在
[mysqld]段下找到bind-address = 127.0.0.1,改为bind-address = 0.0.0.0或直接注释掉整行 - 重启服务:
sudo systemctl restart mysql(Ubuntu)或net stop mysql80 && net start mysql80(Windows) - 验证是否生效:
ss -tlnp | grep :3306输出中必须含*:3306或0.0.0.0:3306,不能只有127.0.0.1:3306
创建专用用户并强制指定 mysql_native_password 插件
MySQL 8.0 默认用 caching_sha2_password,Navicat、旧版 PyMySQL、PHP mysqli 等会直接报 ERROR 2059 或卡在握手阶段。
- 切勿执行
UPDATE user SET host = '%'—— MySQL 8.0 会报ERROR 1396 (HY000),且破坏系统表结构 - 新建用户(推荐):
CREATE USER 'app_user'@'192.168.10.%' IDENTIFIED WITH mysql_native_password BY 'StrongPass!2026';(生产环境禁用'%',用具体 IP 段) - 授权(不授
ALL):GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'app_user'@'192.168.10.%'; - 必须刷新:
FLUSH PRIVILEGES;,否则权限仍在内存缓存中未加载 - 验证插件:
SELECT user, host, plugin FROM mysql.user WHERE user = 'app_user';返回的plugin必须是mysql_native_password
放行 3306 端口(本地防火墙 + 云安全组)
ufw/firewalld 放行后不 reload,或云服务器安全组没开,现象都是 ERROR 2003 (HY000): Can't connect to MySQL server,但错误日志里无记录——静默丢包。
- Ubuntu(ufw):
sudo ufw allow 3306/tcp(注意不是ufw allow 3306,后者默认开 UDP) - CentOS/RHEL(firewalld):
sudo firewall-cmd --permanent --add-port=3306/tcp && sudo firewall-cmd --reload - Windows 防火墙:新建「入站规则」→「端口」→「TCP 3306」→ 勾选「域」「私有」「公共」所有配置文件
- 云服务器(阿里云/腾讯云):必须单独在控制台「安全组」里添加入方向规则,协议 TCP,端口 3306,源 IP 按需限制
- SELinux 启用时(
sestatus查看):sudo setsebool -P mysqld_connect_any on
客户端连接时显式指定 auth_plugin(Python/Java 场景)
即使服务端已设为 mysql_native_password,某些驱动仍会默认尝试 caching_sha2_password,导致连接失败。
- PyMySQL:
conn = pymysql.connect(..., auth_plugin='mysql_native_password') - mysql-connector-python:
mysql.connector.connect(..., auth_plugin='mysql_native_password') - Navicat 15+ 可在连接属性 →「高级」→「Authentication Plugin」手动选
mysql_native_password - 不要删系统自带的
mysql_native_password插件——它被sys库等内部账户依赖,删了可能导致mysqld启动失败
最容易被跳过的环节是:改完用户权限后忘了改 bind-address,或开了防火墙但没 reload,或云安全组压根没配。三者任一缺失,都会表现为“连不上”,但原因完全不同——得一层层查,不能只盯着 SQL 权限看。
相关文章
- 王者荣耀世界零氪玩家如何生存 07-28
- 快手极速版怎么绑定手机号 07-28
- 明日方舟和轻松小熊联动活动内容一览 07-28
- 逆战未来黎明之光 逆战未来黎明之光玩法机制与新手入门指南 07-28
- 植物大战僵尸融合版毁灭土豆地雷介绍 07-28
- 逆战未来飓风之龙 逆战未来飓风之龙武器获取方法详解 07-28