本地连接服务器中的 MySQL 数据库,核心就三件事:让 MySQL 监听外部访问、在云安全组和防火墙放行 3306 端口、用授权账号连接。 下面把这套流程拆开讲清楚,命令行和 Navicat 两种方式都会覆盖。
本地连接服务器mysql数据库的四个准备工作
本地电脑要连服务器上的 MySQL,先别急着敲命令,行业共识认为,远程连接失败多半不是密码问题,而是服务器端根本没把 3306 端口暴露出来,业内专家指出,真正需要动手解决的问题通常集中在监听地址、防火墙和账号权限三个方向。
确认MySQL监听地址允许外部访问
先登录服务器,执行这条命令看 MySQL 实际监听在哪:
netstat -tlnp | grep 3306
如果输出结果是 0.0.1:3306,说明 MySQL 只接受本机连接,外部怎么连都会被拒,找到配置文件改掉 bind-address:
- Ubuntu/Debian 系:
/etc/mysql/mysql.conf.d/mysqld.cnf - CentOS/RHEL 系:
/etc/my.cnf或/etc/my.cnf.d/下的文件
把 bind-address = 127.0.0.1 改成 bind-address = 0.0.0.0,如果看到 skip-networking,直接注释掉,改完重启:
sudo systemctl restart mysql
再执行一次 netstat -tlnp | grep 3306,输出里出现 0.0.0:3306 或 ,说明监听已经放开。
云服务器安全组和系统防火墙都要放行3306
云服务器比自建机房多一层安全组,两层同时放行才能连,云控制台里的安全组入方向规则,加一条:
- 协议:TCP
- 端口:3306
- 源地址:建议填你本地宽带的公网 IP,不推荐直接
0.0.0/0
系统防火墙也要确认,CentOS 上执行:
sudo firewall-cmd --add-port=3306/tcp --permanent sudo firewall-cmd --reload
Ubuntu 若启用了 ufw,则执行 sudo ufw allow 3306/tcp,安全组和系统防火墙缺一不可,少放行一个,本地连接会直接报 2003。
创建允许远程登录的mysql账号
不建议把 root 暴露到公网,单独建一个远程专用账号,Host 写成 表示不限制来源 IP:
CREATE USER 'remote_conn'@'%' IDENTIFIED BY '你的强密码'; GRANT ALL PRIVILEGES ON . TO 'remote_conn'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
如果希望更严格,可以把 替换成你本地固定的公网 IP,'remote_conn'@'223.5.5.5',创建完毕后验证一下:
SELECT user, host FROM mysql.user;
看到 remote_conn | % 这一行,代表配置已生效。
记录服务器公网IP与端口信息
本地连接时填的是服务器公网 IP,不是内网地址,服务器如果有弹性公网 IP,就使用弹性 IP;如果服务器有多个网卡,还要确认 MySQL 监听在对应的网卡上,端口默认 3306,除非你在 MySQL 配置里改过 port,否则不需要额外指定。
navicat远程连接mysql数据库的两种配置方式
准备工作做完,打开 Navicat 就能新建连接了,Navicat 是很多开发者常用的图形化管理工具,这里说清楚两种连接方式。
常规TCP/IP方式
点击连接,选 MySQL,填写以下信息:
- 连接名:随意,
server-mysql - 主机:服务器公网 IP
- 端口:3306
- 用户名:
remote_conn - 密码:刚才设置的强密码
填完点击“测试连接”,提示成功即可进入,如果提示 2003 或 1045,按文章最后一部分去排查。
SSH隧道方式
有一类服务器只开放了 22 端口,3306 不对公网暴露,这时常规 TCP/IP 连不上,Navicat 的 SSH 标签页刚好解决这个问题:
勾选“使用 SSH 隧道”,填服务器 SSH 地址、端口、用户名和密码,常规标签页里的主机写 localhost,端口还是 3306,数据实际流程是:Navicat 先建立 SSH 加密通道,再把 MySQL 请求转发给服务器本地的 3306,全程不暴露 3306。
这两种方式对比见下表:
| 连接方式 | 适用场景 | 对3306端口要求 | 公网安全性 |
|---|---|---|---|
| 常规TCP/IP | 安全组已放通3306 | 必须放通 | 明文传输,建议内网使用 |
| SSH隧道 | 仅开放22端口 | 无需放通 | 加密传输,公网更安全 |
本地命令行连接mysql数据库的操作步骤
不依赖图形工具时,命令行客户端同样能完成连接和日常管理,Windows、macOS、Linux 通用。
先测端口再敲命令
本地执行命令检测端口连通性:
telnet 服务器公网IP 3306
如果提示 Connection refused 或超时,问题在前面的配置步骤,不用急着执行下一步,端口通了,再用标准命令登录:
mysql -h 服务器公网IP -P 3306 -u remote_conn -p
参数具体含义如下:
-h:服务器地址,填公网 IP-P:端口号,默认 3306 可以省略,但显式写上更直观-u:远程登录账号-p:回车之后交互式输入密码
本地mysql导入服务器数据库的常用方法
本地数据要迁移到服务器时,先导出再导入,本地执行:
mysqldump -u root -p mydb > mydb.sql
然后直接导入远程数据库:
mysql -h 服务器公网IP -u remote_conn -p mydb < mydb.sql
导入前确认远端已有同名数据库,如果没有,先执行 CREATE DATABASE mydb CHARACTER SET utf8mb4;,否则会报数据库不存在。
mysql远程连接失败常见原因与处理方案
连接报错大致落在三种现象上,定位方向完全不同。
ERROR 2003:连不上MySQL服务
提示 Can't connect to MySQL server,说明网络层面根本没够到 MySQL,按顺序检查:
- MySQL 是否已监听
0.0.0:3306 - 云安全组入方向是否放行 3306
- 系统防火墙(firewalld/ufw)是否放行 3306
如果服务器是酷番云轻量应用服务器或简米云 ECS,控制台里还有独立的防火墙规则,同样要检查。
ERROR 1045:登录被拒绝
提示 Access denied for user,网络通了但权限不对,多数情况出在账号的 Host 限制,比如账号只允许 localhost 登录,远程当然被拒,重新授权即可:
ALTER USER 'remote_conn'@'%' IDENTIFIED BY '你的密码'; GRANT ALL PRIVILEGES ON . TO 'remote_conn'@'%'; FLUSH PRIVILEGES;
MySQL 8.0 默认使用 caching_sha2_password 加密插件,较旧的客户端可能不支持,遇到认证报错时,调整加密方式:
ALTER USER 'remote_conn'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';
ERROR 1130:远程主机不被允许
报错原文是 Host is not allowed to connect to this MySQL server,属于典型的授权范围过窄,执行授权语句把 Host 改成 ,然后刷新权限。
如果是云数据库实例(如简米云 RDS、酷番云 CDB),这条报错通常还要去云控制台的白名单里添加本地公网 IP,操作方式和自建 MySQL 略有不同。
本地连接服务器mysql时如果网络、账号、安全组都正常仍然失败,最后再查本机防火墙,Windows 自带防火墙和第三方安全软件偶发拦截,排查时可临时关闭本机防火墙测试,但不要长期关闭。
本地连接服务器中的 MySQL 数据库并不复杂,监听地址、安全组、账号权限三件事依次落实后,命令行或 Navicat 都能稳定连上,遇到问题先判断是网络层还是权限层,避免反复修改配置却找不到症结。
Q&A
Q1:本地连接服务器mysql数据库一直提示2003怎么办?
2003 表示客户端没有访问到 MySQL 服务,先登录服务器,确认 netstat -tlnp | grep 3306 能查到监听,且地址不是 127.0.0.1;再检查云安全组入方向和系统防火墙是否同时放行 3306,如果使用的是云数据库实例,则要核对白名单里是否加入了你本地的公网 IP。
Q2:navicat远程连接mysql数据库时遇到1045怎么解决?
1045 属于身份验证失败,检查三项:用户名是否正确、密码是否过期、Host 是否允许当前来源 IP,MySQL 8.0 环境下,旧版 Navicat 可能不支持 caching_sha2_password,把账号加密方式改为 mysql_native_password 后基本可以解决。
Q3:本地无法连接服务器mysql,但又不想把3306暴露到公网怎么办?
用 SSH 隧道方案,Navicat 勾选 SSH 连接,或者命令行执行 ssh -L 3306:127.0.0.1:3306 用户名@服务器IP,把本地的 3306 端口转发到服务器内网回环地址,再连接 0.0.1:3306 即可,MySQL 全程不开放公网监听,连接通过 SSH 加密通道完成,安全性和便捷性兼顾。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/737539.html




