我正在使用以下DBD::MySQL语句连接到MySQL数据库:

use DBI;
 
# Connect to the database.
my $dbh = DBI->connect("DBI:mysql:database=test;host=localhost",
                       "usr", "usr's password",
                       {'RaiseError' => 1});

在try 连接到数据库之前,有没有办法判断MySQL服务是否正在运行?如果数据库在远程服务器上运行,该怎么办?

推荐答案

如果您想要一个解决方案来判断服务是否正在运行而不try 连接到它,您可以使用某个Perl包来判断process table(仅在本地工作),或者判断MySQL port (3306 by default) has a process listening to it.

我不确定这个判断的目的是什么,因为即使服务正在运行,您可能想要做的下一件事是打开一个数据库连接.打开数据库连接是一件快速而简单的事情,如果它不工作,它会有很好的错误报告.因此,您判断服务是否首先运行的意图是不必要的开销.

我只会试着像你一样建立联系.这是判断服务是否正在运行的最直接方式,它既可以在本地工作,也可以远程工作.

如果出现错误,则捕获错误并解释错误消息.它将是Error 2002(对于本地主机)或2003(对于TCP/IP,无论它是同一主机还是远程主机).

这些错误是百分百可靠的.但也可能会出现一些转移注意力的问题,例如,如果服务在远程主机上运行,但您的客户端主机由于防火墙或路由问题而无法访问它.

如果您收到错误1045(拒绝访问),至少您知道服务正在运行,您可以访问它,问题只是您的用户和密码不正确,或者您试图访问您无权使用的架构.

Mysql相关问答推荐

了解查询中ORDER BY的行为

多列分组并进行求和

根据 JOIN 结果计算列中的值?

我在 mysql 查询中需要帮助,我想在年龄之间按年龄过滤器分组,并显示 0 计数之间找不到的数据

如何让连续 3 周或以上的用户有订单?

为什么 MySQL 不使用索引进行简单的SELECT * FROM Table WHERE field='value'查询?

如何在更新语句中使用多个子字符串函数?

如何创建一个判断行是否存在的mysql查询-如果存在我想插入一条新记录,否则增加一个值

MySQL表中给定字段的每个不同值的连续记录形成对

如何从将分钟、天、月和年存储在不同列中的表中查询数据

在 SQL 中将列添加为 End_date,间隔为 +100 天

在 MySQL 中 Select COUNT of MAX

具有别名主机的 ssh 反向 mysql tunel

按长度过滤 varbinary 字段

如何过滤表格,以便它显示最新的数据?

终止空闲的mysql连接

在 MySQL 的存储过程中调用存储过程

从终端访问 MAMP 的 MySQL

MySQL术语约束与外键的区别?

如何将 mysqldump 的输出拆分为较小的文件?