MySQL命令行中root用户被拒绝访问

42

我刚刚安装了xampp,并使用命令行编写mySQL。 我使用没有密码的'root'进行连接mysql,但无法CREATE DATABASE,因为我收到错误信息1044 access denied for user '' @ 'localhost'。我作为 -uroot 登录。

虽然我在phpMyadmin中有权限做任何想做的事情,但在命令行中似乎没有写入权限。我已经查看了所有其他相关主题的帖子,但都没有用。由于我本身没有任何权限,所以我无法授予权限。


在MySQL命令行工具中,当您单击它时,它会打开并要求输入密码,您能成功登录吗? - jsist
嗨。我没有收到任何提示,只是导航到C:\xampp\mysql\bin\mysql -u root; - gavin stanley
这将返回“欢迎来到mySQL监视器”等内容。然后,如果我输入“SHOW DATABASES”,我会得到+--------------------+|数据库|+----------------+|信息模式|+-------------------+|测试||+----------------+,因此我已连接到MySQL。 - gavin stanley
但是当我尝试创建数据库时,会出现“访问被拒绝”的错误。 - gavin stanley
1
我投票关闭此问题,因为它与编程无关,仅涉及软件。 - Evan Carroll
9个回答

73

你是以root用户身份登录MySQL吗?在以MySQL root用户身份登录时,您必须显式授予权限给您的“普通”MySQL用户帐户。

首先为您的MySQL数据库设置一个root帐户。

在终端中键入:

mysqladmin -u root password 'password'

要登录MySQL,请使用以下内容:

mysql -u root -p

要手动设置权限,可以使用skip-grant-tables选项启动服务器,打开mysql客户端并手动更新mysql.user表和/或mysql.db表。然而,这可能是一项繁琐的任务,所以如果您需要一个具有所有权限的帐户,可以按照以下步骤操作:

使用skip-grant-tables选项启动服务器

启动mysql客户端(不需要用户名/密码)

发出命令:

flush privileges;

这会强制加载授权表。

使用GRANT命令创建一个新帐户,类似于以下内容(但使用您想要使用的用户名和密码进行替换)。

GRANT ALL on *.* to 'username'@'localhost' identified by 'password';

以正常模式重新启动服务器(不使用skip-grant-tables选项),并使用新创建的帐户登录。

参考这个MySQL文档。


谢谢,Jacob。实际上我重新安装了ODBC连接器msi并直接重新安装了mySQL(除了xampp),现在它可以工作了。我认为这是一个连接器问题,因为“SHOW DATABASES”根本没有显示我的数据库。我的“root”登录没有访问数据库,这使得它看起来像是有限的权限,但实际上它没有正确连接。这对今后很有用 - 谢谢。 - gavin stanley
我的一个朋友(他对mysql还很陌生)遇到了同样的问题,之后他“创建了用户root”...这只是另一个有创意的情景供参考。 - Ben

13

导航到 C:\xampp\mysql\bin\ 并确保 mysql.exe 文件在该文件夹中。

mysql -uroot -p

如果没有密码,只需按回车键即可。

提示会更改为

mysql>

执行您的 MySQL 命令


顺便提一下,我之前用的是Windows命令行,现在改用MySQL命令行了。不管怎样,它们都是一样的东西。 - gavin stanley
你需要使用以下命令以root身份登录: "mysql -uroot -p" ... -u和root之间没有空格。 - Paulo Pinto
如果您在执行SELECT USER(),CURRENT_USER()时得到ODBC@localhost,CURRENT_USER:@localhost,则说明您不是root用户。而对于root用户,您会得到类似USER: root@localhost, CURRENT_USER:root@localhost的结果。 - Paulo Pinto
@gavin 如果提示符是mysql>,则输入exit并按回车键...然后如果提示符是c:\xampp...bin\,则输入mysql -uroot -p并按回车键...然后提示符将变为mysql>。 - Paulo Pinto
如果我直接运行mysql.exe并选择用户,我会得到ODBC@localhost。如果我运行Windows命令行并进入mysql,然后选择用户,我会得到'root@localhost'。但是,当我输入CREATE DATABASE时,仍然会出现访问被拒绝的错误。我已经在phpMyAdmin中检查了root的权限,并且所有内容都已选中。完全被卡住了! - gavin stanley
显示剩余5条评论

5
默认情况下,XAMPP的root用户没有设置密码。
您可以为MySQL的root用户设置密码。
转到以下地址: localhost:80/security/index.php 并设置root用户的密码。
注意:如果您的Apache位于不同的端口上,请更改以上URL中的端口号。
打开XAMPP控制面板,点击“Shell”按钮。
现在会打开一个命令提示窗口,在该窗口中输入以下内容:
mysql -u root -p;

它将要求输入密码,输入您为root用户设置的密码。

现在您已经以root用户身份登录了:D,现在可以按照自己的意愿进行操作:P


4

访问MariaDB 10数据库服务器

在停止数据库服务器之后,下一步是通过启动数据库服务器并跳过网络和权限表来通过后门访问服务器。可以通过运行以下命令来完成此操作。

sudo mysqld_safe --skip-grant-tables --skip-networking &

重置MariaDB的root密码

现在,数据库服务器已经在安全模式下启动,请运行以下命令以无需密码提示登录为root。要执行此操作,请运行以下命令:

sudo mysql -u root

然后运行以下命令来使用MySQL数据库。

use mysql;

最后,运行以下命令以重置root密码。

update user set password=PASSWORD("new_password_here") where User='root';

请将new_password_here替换为您想要为根账户创建的新密码,然后按Enter键。

之后,请运行下面的命令更新权限并保存您的更改到磁盘中。

flush privileges;

按下CTRL + D退出,完成操作。

接下来正常启动MariaDB,并测试您刚创建的新密码。

sudo systemctl stop mariadb.service
sudo systemctl start mariadb.service

通过运行以下命令登录数据库。

sudo mysql -u root -p

来源: https://websiteforstudents.com/reset-mariadb-root-password-ubuntu-17-04-17-10/

在Ubuntu 17.04 / 17.10上,如果您忘记了MariaDB数据库的root密码,那么可以通过以下步骤重置:

  1. 停止MariaDB服务。
  2. 使用跳过授权表的选项启动MariaDB。
  3. 更新root用户的密码。
  4. 重新启动MariaDB服务。

请按照上述步骤操作即可成功重置MariaDB root密码。


1
我遇到了同样的问题,原来是MariaDB设置为只允许root通过unix_socket插件本地登录,因此清除该设置后,只要输入正确的密码,就可以成功使用命令行指定的用户登录。 请参见Ask Ubuntu上的答案

自MariaDB 10.4版本开始,可以设置用户帐户以便他们可以使用多种身份验证方法之一进行登录。请参阅https://dev59.com/41gR5IYBdhLWcg3wBpZT#65544967/。 - A. Gh.

0

服务器文件只需更改文件夹名称

etc/mysql
rename
mysql-

请问您能否澄清一下,您的意思是什么? - rubo77

0

我重新安装了ODBC连接器msi并直接重新安装了mySQL(除了xampp之外),现在它可以正常工作了。我认为这是一个连接器问题,因为“SHOW DATABASES”实际上根本没有显示我的数据库。

我的“root”登录无法访问数据库,这使得它似乎具有有限的权限,但实际上它没有正确连接。


-1

这可能对Ubuntu有所帮助:

进入/etc/mysql/my.cnf并注释掉这一行:

bind-address           = 127.0.0.1

希望这对某个人有所帮助,我也找了很长时间。
干杯

-2

在使用-u和用户名之间不应该有空格:

mysql -uroot -p
# or
mysql --user=root --password

嗨,我刚刚尝试了一下,仍然出现相同的错误。它应该说:“拒绝访问'root'@'localhost'”而不是用户:''吗? 我不确定是否已登录为'root'。 - gavin stanley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接