MySQL服务器的连接名,默认就是localhost或127.0.0.1,除非你改过服务器主机名,或者连接的是云端/远程数据库。很多刚接触数据库的朋友,在Navicat或命令行里看到“连接名”这一栏就发懵,以为是什么高深配置,实际上它指的是你要连的那台数据库服务器的地址标识,下面把本地、远程、容器环境各种场景下的连接名讲透。
什么是MySQL连接名?先分清“主机名”和“连接名”
连接名的本质是网络地址标识
MySQL客户端连接服务器时,需要提供一个主机地址(Host),这个地址可以写IP、域名,也可以写主机名,图形化工具(比如Navicat、DBeaver)把这栏翻译成“连接名”,命令行里对应的是-h参数。
- 本地库的默认连接名:localhost 或 127.0.0.1
- 局域网库的连接名:192.168.x.x 或 主机名
- 云数据库的连接名:公网IP 或 分配的域名
默认连接名是localhost还是127.0.0.1?
两者都能用,但底层机制不同,localhost走的是Unix套接字(Linux/macOS)或命名管道(Windows),0.0.1强制走TCP/IP协议,多数情况下本地连接用哪个都能通,但如果你在配置文件里把skip-networking开启了,那0.0.1就连不上,只能写localhost。
业内专家指出,区分这两者能解决不少连接报错问题,特别是“Can’t connect through socket”这类。
mysql本地连接名默认是什么?怎么验证
查看当前主机名
打开终端或命令行,输入:
- Windows:
hostname - Linux/macOS:
hostname或cat /etc/hostname
输出的字符串就是这台机器的主机名,如果你的MySQL跑在本机,且没改过配置,那连接名填localhost、0.0.1、或者这个主机名结果都一样。
用命令行实测连接名
mysql -u root -p -h localhost
输入密码能进,说明localhost可用,再试:
mysql -u root -p -h 127.0.0.1
如果也能进,说明TCP/IP正常,换成本机主机名:
mysql -u root -p -h my-pc-name
这个能通,是因为MySQL默认开启了skip_name_resolve反向解析可能关闭或开启的状态下,主机名解析行为不同,多数发行版默认允许解析本机名。
连接配置文件的藏身之处
MySQL的配置文件决定了它监听什么地址,Linux下通常在/etc/mysql/my.cnf或/etc/my.cnf,找到[mysqld]段:
bind-address = 127.0.0.1
这行表示只允许本机通过127.0.0.1连接,如果改成0.0.0,表示监听所有网卡,这时候你的机器IP(比如192.168.1.10)也能作为连接名使用。
mysql连接名怎么写:远程连接场景的填法
同一个局域网里连接别人的MySQL
假设同事的电脑IP是168.31.88,MySQL端口是默认3306,且对方开了远程访问权限,你的连接名(Host)就填:
168.31.88
端口不是3306时,命令行为:
mysql -u root -p -h 192.168.31.88 -P 3307
图形工具里会有独立的“端口”栏,连接名只管填IP或域名。
云数据库RDS的连接名是什么
简米云、酷番云的RDS实例,控制台会给你一个内网地址和公网地址,长得像这样:
rm-2ze6a1b2c3d4e5f6.mysql.rds.aliyuncs.com
这就是连接名,内网访问填内网地址,外网访问填公网地址。密码重置后连接名不变,只影响认证信息。
修改bind-address后的连接名变化
如果服务器想把MySQL开放给其他机器连,除了改bind-address = 0.0.0.0,还要确认:
- 防火墙放行了3306端口
- MySQL用户表里
host字段不是localhost,而是或具体IP
SELECT user, host FROM mysql.user;
看到root的host是,说明允许任意IP登录,这时候连接名填什么?填发起连接的那台机器的网卡IP,不是服务器端看到的什么神秘名称。
不同工具里连接名怎么填:实操对照
Navicat/DBeaver图形界面
新建连接时,“连接名”一栏可以随便起一个便于识别的别名(测试环境”),真正起作用的是“主机”或“IP地址”栏,很多教程混用这两个概念,导致新手把自定义别名当成了服务器地址。
- 连接名 → 你自己起的标识,只存在本机软件的连接配置里
- 主机名/IP → 真正要填的服务器地址
命令行工具
命令行没有“连接名”概念,只有-h参数指定服务器地址,-u指定用户,-p密码,脚本化连接时,连接串写法:
mysql -h 10.0.0.5 -u app_user -p'密码' my_database
JDBC和PHP连接串里的“连接名”
Java程序JDBC URL:
jdbc:mysql://192.168.1.100:3306/dbname
这里的168.1.100就对应连接名,PHP的PDO:
$dsn = 'mysql:host=localhost;dbname=test_db;charset=utf8mb4';
host=后面的值就是连接名。
连接名相关的常见报错怎么排查
ERROR 2003 (HY000): Can’t connect to MySQL server
看到这个,先ping一下连接名对应的IP通不通:
ping 192.168.1.100
通的话,再检查端口:
telnet 192.168.1.100 3306
不通多半是防火墙拦截或者MySQL没监听外部地址。
ERROR 1045 (28000): Access denied for user
连接名能通,但账号权限不允许,按上面说的,查mysql.user表里host字段,只有localhost就改成:
UPDATE mysql.user SET host = '%' WHERE user = 'root'; FLUSH PRIVILEGES;
改完重启MySQL服务,注意生产环境不建议root开放远程。
Docker容器里的MySQL连接名
容器里跑MySQL,宿主机访问连接名填:
0.0.1
前提是启动容器时做了端口映射:
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
容器间互访,要用--link或者自定义网络里的容器名,比如容器名叫mysql-server,另一个容器的连接名就填mysql-server,而不是IPDocker内置DNS会解析。
从连接名的视角理解数据库权限体系
MySQL的账号由“用户名+主机”组合唯一确定,就是'root'@'localhost'这种格式。连接名决定了你以哪个身份登录:
- 从本机连:匹配
'root'@'localhost' - 从192.168.1.5连:匹配
'root'@'192.168.1.5' - 从任意IP连:匹配
'root'@'%'
运维排障时,先确认客户端用的实际源IP,再对应用户表里的host记录,有些时候连接名写对了,但认证失败,问题不是地址,而是SSL证书校验,MySQL 8.0默认开启caching_sha2_password认证,老版本客户端连接时可能报错,连接名不需要变,升级驱动或修改认证插件即可。
常见问题解答
mysql连接名是填IP地址还是主机名?
两个都行,取决于你的网络环境,同一台机器上打localhost最快;跨机器访问必须填对方可达的IP或域名。主机名解析依赖DNS或/etc/hosts文件,如果解析不到,填IP更稳妥。
为什么改了服务器主机名后,MySQL连不上了?
因为MySQL用户表里的host字段可能还保留旧主机名,比如原来账号是'app'@'old-name',主机名改成new-name后,本机连接的源主机变成了new-name,匹配不到任何账号,就报Access denied,解决办法是把host改成localhost或,或者新增一条'app'@'new-name'记录。
localhost和127.0.0.1作为连接名,性能有差别吗?
没有可感知的性能差异,但两者走的是不同协议栈,绕过方式不同,socket连接没有TCP握手和网络栈开销,在极高并发短连接场景下略有优势;TCP连接可以跨网络,适用范围更广,日常开发用哪个都行,建议统一写成localhost,语义更清晰。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/928852.html


评论列表(2条)
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是连接名部分,给了我很多新的思路。感谢分享这么好的内容!
@鱼user663:这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于连接名的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!