不能从命令行使用空密码的mysqld

首先,我创build一个数据库目录:

$ mysql_install_db --datadir=./foo 

然后,我启动mysql守护进程:

 $ mysqld --port=5555 --datadir=./foo & 

它开始很好,我可以连接到它,例如,Navicat。 我正在尝试从shell连接:

 $ mysql --user=root --port=5555 --password= ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 

该怎么办? 我也尝试先为root用户更改密码:

 $ mysqladmin -u root -P 5555 password foo mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'root'@'localhost' (using password: NO)' 

同样,从独立的SQL应用程序,如Navicat,连接工作得很好。

在MySQL中,用户帐户包含您要连接的主机。 因此, root@localhost[email protected]是不同的用户,可以有不同的密码。 他们中的任何一个都不可能存在。

试试这个查询,并检查你的root用户是否有不同的密码。

 SELECT user, host, password FROM mysql.user WHERE user = 'root'; 

如果他们这样做,请使用任何方法login并将root@localhost用户的密码更改为您想要的密码。 (一个空string将是没有密码,但是没有密码,特别是特权用户,通常被认为是一个坏主意。)

诀窍是:

 $ mysqld --port=5555 --datadir=./foo --socket=./sock & 

再后来:

 $ mysql --socket=./sock --user=root --port=5555 

工作正常。