无法从命令行使用带有空密码的 mysqld

无法从命令行使用带有空密码的 mysqld

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

$ 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)连接工作非常顺利。

答案1

我知道有两种方法可以使用空密码登录帐户。第一种方法是直接省略密码选项。

$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 163714
Server version: 5.6.38 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

另一种方法是指定-p选项,然后在出现提示时按回车键。

$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 163719
Server version: 5.6.38 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

答案2

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

尝试此查询并检查您的根用户是否有不同的密码。

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

如果他们这样做了,请使用任何可行的方法登录并将用户密码更改root@localhost为您想要的密码。(空字符串表示没有密码,但是没有密码,特别是对于特权用户,通常被认为是一个坏主意。)

答案3

诀窍如下:

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

然后后来:

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

工作正常。

相关内容