使用MySQL查询获取IP地址

12

在 MySQL 查询中:

SELECT host
FROM information_schema.processlist
WHERE ID = connection_id( )
LIMIT 0 , 30

这个查询的结果是:localhost

SELECT @@hostname;

这个查询的结果是:localhost

但我需要获取像192.168.1.2这样的 IP 地址。

问题:如何使用 MySQL 查询获得此结果?


如果您的名称解析正在工作,那么您无法使用mysql完成此操作。 - user986959
1
@c vijila,你已经成功获取了IP地址而不是“localhost”吗?如果有什么进展,请更新我们。谢谢。 - unknown
请查看此解决方案:http://stackoverflow.com/questions/26712867/how-to-get-the-ip-address-mysql/26713089#26713089 - photocurio
5个回答

11
仅获取IP地址而不包括端口号。
 Select SUBSTRING_INDEX(host,':',1) as 'ip' 
 From information_schema.processlist 
 WHERE ID=connection_id();

如果您正在本地机器上运行,则这也将解析名称“localhost”。有获取IP的任何想法吗? - unknown

0

查询语句为:
select host from information_schema.processlist WHERE ID=connection_id();

此查询将返回主机名。如果未启用名称解析,则通常会获得IP地址(例如 192.168.1.2.)。


0

通过这个文章和它强大的分割函数,你可以像这样重写它:

Select user,CONCAT(Split_fn(host, "-", 2),'.',Split_fn(host, "-", 3),'.',Split_fn(host, "-", 4),'.',Split_fn(Split_fn(host, "-", 5),".",1)) as Ip_Address from information_schema.PROCESSLIST where ID = CONNECTION_ID()

这总是给我一个错误。Split_fn不是默认的MySQL函数... 在我的情况下,主机是localhost:52321,因此不能在任何“-”或“.”字符处拆分。 - Philipp

-1

我发现许多MySQL服务器使用BIND_ADDRESS全局变量。该变量返回服务器侦听的IP地址。然而,在我的测试中,这个值通常是“127.0.0.1”。

SHOW VARIABLES LIKE 'HOSTNAME';     -- Returns: MyHostName
SHOW VARIABLES LIKE 'BIND_ADDRESS'; -- Returns: 127.0.0.1

替代语法:

SELECT @@hostname, @@bind_address;  -- Returns: MyHostName, 127.0.0.1

注意:

这并不是一个万无一失的解决方案。根据服务器配置,关键字BIND_ADDRESS(或@@bind_address)也可能返回值*


根据服务器配置,“bind_address”键的值可能为“*”。 - immobiluser
@immobiluser 谢谢你提供的信息。我已经在上面的答案中添加了关于这个行为的注释。 - Philipp

-7
请告诉我您是否需要获取访问者的IP地址,或者其他信息。如果您只需要访问者的IP地址,您可以使用PHP remote_addr函数。
$_SERVER['REMOTE_ADDR'];

这是一种存储 IP 地址的表格吗?我认为你的查询是寻找主机,而不是 IP。但我不确定是否正确理解了你的意思。


1
PHP与MySQL的客户端IP有什么关系?为什么是PHP? - Alma Do
过去我使用php来获取IP地址。我没有正确理解问题。 - user3162968
也许从这个表中选择 * ,看看哪一列包含 IP 地址? - user3162968
除了使用错误的技术之外,这还会提供给您用户浏览器的IP地址,而不是服务器地址。 - Philipp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接