要查看自己的数据库服务器IP,最直接的方法是登录云数据库控制台或在你部署数据库的服务器上执行一条查询命令,几分钟就能拿到结果。
很多人一听到“数据库服务器IP”就头大,其实这问题没你想的那么复杂,关键是你得先搞明白:数据库到底跑在哪里?是买来的云数据库,还是自己装的一台服务器?两种场景,方法完全不同,下面我按实际使用频率,把最常用的几种查看方式给你捋一遍。
数据库服务器ip怎么查:先分清你的数据库在哪
绝大多数情况下,你不是直接坐在机房那台机器前面,你可能是用了简米云、酷番云、华为云的RDS,也可能是自己在ECS上装了MySQL或PostgreSQL,再有就是公司内网里的一台独立数据库服务器,这三种场景,查询入口和命令都不一样。
云数据库实例:控制台里直接看
如果你用的是云数据库(比如RDS for MySQL、云数据库Redis),那IP基本不用“查”,控制台首页就会展示,以主流云厂商为例:
- 登录云厂商官网,进入控制台
- 找到你的数据库实例列表,通常列表里就有一列叫“内网地址”或“外网地址”
- 如果没显示,点击实例名称进入详情页,在“基本信息”或“连接信息”标签下就能看到
这里有个细节要注意:内网IP和外网IP是两回事,内网IP只能在同一个VPC或同一台服务器上访问,外网IP才是你从家里电脑连过去用的,如果你在控制台看到的是类似0.0.1这种地址,那多半是内网;看到0.113.5这种公网段才是外网,很多新手把内网地址复制到本地客户端去连,当然连不上。
自建数据库:服务器上敲三条命令
数据库是你自己装在ECS或物理机上的,那就直接登录服务器操作系统看一眼,Linux系统下,命令就三条:
# 查看本机所有IP地址 ip addr show # 或者用ifconfig(老系统) ifconfig # 如果只想看IP,不想看一堆网卡信息 hostname -I
ip addr会显示eth0、eth1这样的网卡信息,重点看inet后面的地址,那就是这台服务器的IP,注意别把0.0.1当成数据库IP了,那是回环地址,只代表本机自己。
Windows服务器更简单,打开CMD输入ipconfig,看“IPv4地址”那一行就行,不过这里有个坑:数据库服务可能只监听了某个特定IP,你查到服务器IP是168.1.10,但MySQL可能只监听了
0.0.1,那你从别的机器用168.1.10还是连不上,所以还得确认一下数据库的监听配置。
远程访问权限:查到了IP也不一定连得上
就算你拿到了准确的IP,连接失败的情况还是很常见,行业共识认为,百分之六七十的连接问题不是出在IP查错上,而是账号权限和防火墙策略没放通。
- 数据库账号的host字段是否允许了你的来源IP?MySQL里
user表的host如果是localhost,那远程就是连不上的 - 安全组/防火墙是否放行了数据库端口?默认MySQL是3306,Redis是6379,PostgreSQL是5432
- 云数据库的外网地址是否已开通?很多云厂商默认不开外网,需要手动申请
当你查到IP却连不上时,别急着怀疑IP错了,用telnet IP 端口测一下端口通不通,比反复核对IP更有效。
查看数据库服务器ip地址的三种常用方法对比
我把上面说的和补充的方案放到一起,做成一张对比表,你看着选就行。
| 方法 | 适用场景 | 复杂度 | 是否要求登录服务器 |
|---|---|---|---|
| 云控制台查看 | 云数据库RDS/Redis等 | 低 | 否 |
ip addr命令 |
自建Linux数据库 | 中 | 是 |
ipconfig命令 |
自建Windows数据库 | 低 | 是 |
| 数据库客户端查询 | 已能连接数据库但不知IP | 中 | 否 |
已经连通数据库但不知道IP:SQL一句话搞定
还有一种情况比较隐蔽:你手上已经有一个数据库账号和密码,甚至能通过客户端正常连接,但你就是不知道这台数据库服务器的IP是多少,这时候完全不用跑机房,直接在SQL里查:
-- MySQL SELECT SUBSTRING_INDEX(USER(), '@', -1) AS source_ip; SHOW VARIABLES WHERE Variable_name = 'hostname'; -- 或者查看当前连接的服务器信息 SELECT @@hostname;
SUBSTRING_INDEX那一句能返回你当前连接的服务器IP,原理是USER()函数会返回你的账号@来源IP,截取出后面的部分就是对方的IP,这个办法很实用,尤其适合你只有个连接串、其他信息一概不知的时候。
不同数据库的隐藏入口也有区别
如果你是Oracle或者SQL Server的老用户,查看方式略有不同,Oracle里可以查
v$instance视图,UTL_INADDR.get_host_address能拿到主机名对应的IP,SQL Server则直接用SELECT @@SERVERNAME,然后再通过sys.servers去查,不过说实话,对于绝大多数使用者来说,MySQL和PostgreSQL占了主流,上面那几个方法已经覆盖你九成的需求。
本地开发环境与远程数据库服务器ip查询的差异
自己电脑上装了MySQL当开发环境,跟生产环境的数据库服务器IP查询思路完全不一样,本地环境通常就是localhost或者0.0.1,这俩在任何电脑上都一样,不存在“查”的必要。
为什么本地能连、远程就是超时
你在本地用localhost连数据库,走的是Unix套接字或环回接口,根本不经过网卡,但你把应用部署到另一台服务器,让它去连你本地数据库的“局域网IP”,往往就超时了,原因很简单:
- 你本机的MySQL没有开启远程访问绑定,默认
bind-address是0.0.1 - Windows防火墙或Linux iptables没有放行3306端口
- 你连的路由器上两台设备不在同一个网段
这种情况下,你查到的本地IP正确,但数据库服务本身就没打算接受外部连接,修改my.cnf里的bind-address改为0.0.0,再重启数据库,十次里有八次能解决。
区分内网IP、外网IP和弹性公网IP
在云服务器上,你会看到三组地址:内网IP、公网IP、弹性公网IP,刚接触云主机的朋友容易混淆,我举个例子你就懂了:
- 内网IP:类似
16.0.5,只在云厂商的虚拟网络里有效,两台同地域的云服务器之间互相访问,用内网IP速度快且不收流量费 - 公网IP:类似
0.0.8,被外界直接访问,这个地址是绑定在云主机的公网网卡上的,ip addr能看到 - 弹性公网IP:独立购买、可以随时绑定到任意服务器的公网IP,它不是自动配在网卡上的,需要你去控制台手动绑定
如果你是自建数据库并对外开放,我建议用弹性公网IP,因为一旦服务器出了问题,IP还能迁移到备用机器上,不用改DNS和客户端配置。
常见疑问:数据库服务器ip是固定的吗
很多做开发的会问这个问题,答案是:不确定,要看服务类型,云数据库RDS的内网IP通常是固定的,除非你释放实例,自建服务器的内网IP在普通VPC里也是固定的,但如果你用的是临时云主机或者没买固定公网IP,那服务器重启后公网IP就可能变。
这里有个实操经验:在简米云或酷番云上,如果你不特意绑定弹性公网IP,服务器每次重启后公网IP就可能变,这对数据库连接来说是灾难,所以生产环境一定要用弹性公网IP,或者干脆用云数据库自带的内网地址。
用了域名访问,还需要记住IP吗
如果你是通过域名连接数据库的,比如db.example.com:3306,那IP对你来说只是排查问题时的辅助工具,你可以在本地用nslookup db.example.com来解析出数据库服务器当前的真实IP,这样做的意义在于:当域名解析正常但连接出错时,你能确认解析到的IP是否符合预期,从而判断是不是DNS被污染了。
Q&A:数据库服务器IP相关问题集中解答
问:用SQL命令查数据库服务器IP,有没有不依赖操作系统的办法?
有,在MySQL里执行SHOW VARIABLES LIKE 'hostname'能拿到服务器的机器名,再用机器名去解析IP,或者直接查information_schema.PROCESSLIST,里面HOST字段会显示当前连接来源,但那个是客户端IP,不是服务器IP,更推荐用SELECT SYSTEM_USER();和SELECT CURRENT_USER();配合来看,不过最直观的还是SELECT SUBSTRING_INDEX(USER(), '@', -1);。
问:为什么我查到的数据库服务器IP和网上说的不一样?
因为你可能看到的是内网IP,而网上的教程讲的是公网IP,很多云数据库默认只分配内网地址,你需要到控制台手动开启外网访问,才能得到一个可从互联网直连的IP,如果你用Docker部署数据库,容器内部的IP跟宿主机IP也不同,docker inspect输出的IP是容器的,不是给外部应用用的。
问:查数据库服务器IP时,被提示没有权限怎么办?
如果是云控制台查看,通常需要你是账号管理员或具备相关的RAM权限,如果是用ip addr命令查看,普通用户就能看到IP,不涉及数据库权限,真正出问题的是你用SQL语句想查performance_schema或sys库时,可能因为权限不足被拒绝,解决办法是让DBA单独授权SELECT权限,或者干脆放弃SQL方式,改用控制台和系统命令。
不管你是云数据库还是自建环境,我把核心结论再压一句话:数据库服务器IP先看部署类型,云数据库上控制台找,自建数据库跑一条ip addr,如果连不上就用telnet验证端口,别跟IP死磕。 这条链路走下来,90%的情况都能搞定。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/692843.html





