Mysqladmin ping returns 0 even with a password failure, a thing that mysqlclient doesn't. Is this a mistake from Mysqladmin Developpers? I don't understand why Mysqladmin is asking for a login/password because it returns 0 even if you don't specify a login.
If I try a Mysqladmin ping without any login/password :
# mysqladmin ping ; echo $? mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'root'@'localhost' (using password: NO)' 0
Mysqladmin give me a login error and tells me that the server is currently running (0 value) so why asking for a login if it still gives me the answer?
When I do something like this :
#mysqladmin -uroot -pWrongPassword ping ; echo $? mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'root'@'localhost' (using password: YES)' 0
This return me 0 instead of 1.
Now if I stop mysql server and try again :
# mysqladmin -uroot -pWrongPassword ping ; echo $? mysqladmin: connect to server at 'localhost' failed error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)' Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists! 1
It gives me the proper value because the server is stopped, we dont care about the wrong password.
Finally i did the same test with Mysqlclient and a wrongpassword :
# mysql -uroot -pWrongPassword mysql -sN -e "select * from user" ; echo $? ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 1
I know that the main purpose of this command is to test the availability of the mysql server but ask for a login/password doesn't make any sense if you still give the 0 value.
Do you think it is a bug?
It's not a bug. This behavior is by design.
ping
Check whether the server is available. The return status from mysqladmin is 0 if the server is running, 1 if it is not. This is 0 even in case of an error such as Access denied, because this means that the server is running but refused the connection, which is different from the server not running.