7

即使密码失败,Mysqladmin ping 也会返回 0,而 mysqlclient 不会。这是Mysqladmin Developpers的错误吗?我不明白为什么 Mysqladmin 要求输入登录名/密码,因为即使您没有指定登录名,它也会返回 0。

如果我在没有任何登录名/密码的情况下尝试 Mysqladmin ping:

#mysqladmin ping ; 回声$?

mysqladmin:连接到“localhost”的服务器失败
错误:'用户'root'@'localhost'的访问被拒绝(使用密码:NO)'
0

Mysqladmin 给我一个登录错误并告诉我服务器当前正在运行(0 值),那么如果它仍然给我答案,为什么还要要求登录呢?


当我做这样的事情时:

#mysqladmin -uroot -pWrongPassword ping ; 回声$?

mysqladmin:连接到“localhost”的服务器失败
错误:'用户'root'@'localhost'的访问被拒绝(使用密码:YES)'
0

这返回我 0 而不是 1。


现在,如果我停止 mysql 服务器并重试:

# mysqladmin -uroot -pWrongPassword ping ; 回声$?

mysqladmin:连接到“localhost”的服务器失败
错误:'无法通过套接字'/var/run/mysqld/mysqld.sock'(2)连接到本地MySQL服务器'
检查 mysqld 是否正在运行并且套接字:'/var/run/mysqld/mysqld.sock' 存在!
1

它给了我正确的值,因为服务器已停止,我们不在乎密码错误。


最后我用 Mysqlclient 和一个错误的密码做了同样的测试:

# mysql -uroot -pWrongPassword mysql -sN -e "select * from user" ; 回声$?

错误 1045 (28000): 用户 'root'@'localhost' 的访问被拒绝(使用密码:是)
1

我知道这个命令的主要目的是测试 mysql 服务器的可用性,但是如果你仍然给出 0 值,那么询问登录名/密码没有任何意义。

你认为这是一个错误吗?

4

1 回答 1

10

这不是一个错误。此行为是设计使然。

ping
检查服务器是否可用。如果服务器正在运行,则 mysqladmin 的返回状态为 0,否则为 1。即使出现 Access denied 之类的错误,这也是 0 ,因为这意味着服务器正在运行但拒绝连接,这与服务器未运行不同。

于 2013-08-30T01:52:27.843 回答