问答中心分类: MYSQL错误 1045 (28000): 用户 'root'@'localhost' 的访问被拒绝(使用密码:是)
0
Rizwan Basheer 提问 20分钟 前

我一直在按照手册在 Ubuntu 上安装软件套件。我对MySQL一无所知。我在我的 Ubuntu 上完成了以下安装。

sudo apt-get update
sudo apt-get install mysql-server-5.5
sudo apt-get install mysql-client-5.5
sudo apt-get install mysql-common
sudo apt-get install glade
sudo apt-get install ntp

然后我做

cd ~/Desktop/iPDC-v1.3.1/DBServer-1.1
mysql -uroot -proot

我最终得到以下错误消息。

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

我该如何修复它并继续?

aderchox 回复 20分钟 前

未来的访客,也不要忘记检查这里解释的几个原因:dev.mysql.com/doc/refman/8.0/en/problems-connecting.html

29 Answers
0
Divz 回答 20分钟 前

我能够通过执行这个语句来解决这个问题

sudo dpkg-reconfigure mysql-server-5.5

这将更改root密码。

Balmipour 回复 20分钟 前

正是我需要的…不是每个人都有 5.5 版的服务器。利用dpkg --get-selections | grep sql获取您的版本

PrathamN 回复 20分钟 前

@Balmipour 在 Rhel 6.x 中检查 sql 版本的等效命令应该是什么

PrathamN 回复 20分钟 前

@Divz 在 Rhel/centos 中重新配置 mysql 服务器的命令应该是什么

Balmipour 回复 20分钟 前

@PrathamN 我从未使用过 red had,但是在谷歌上搜索“red hat check packages versions”会给我这样的命令:yum list installed添加| grep sql仅过滤 SQL 包。

mOna 回复 20分钟 前

当我在 Mac OS X 中运行这个命令时,我得到这个错误:sudo: dpkg-reconfigure: command not found.有什么建议吗?

Mugoma J. Okomba 回复 20分钟 前

对于发行版独立的方式检查@Anshu 的答案

Sylvain 回复 20分钟 前

如前所述这里,它似乎不适用于 5.7 版…

doug65536 回复 20分钟 前

这不要求输入新密码。改成什么?

0
tk_ 回答 20分钟 前

你必须重设密码! Mac OS X(经过测试和工作)和 Ubuntu 的步骤:
停止 MySQL 使用

sudo service mysql stop

或者

sudo /usr/local/mysql/support-files/mysql.server stop

以安全模式启动它:

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

(上面一行是整个命令)
这将是一个持续的命令,直到进程完成,所以打开另一个 shell/终端窗口,不使用密码登录:

mysql -u root

mysql> UPDATE mysql.user SET Password=PASSWORD('password') WHERE User='root';

根据@IberoMedia 的评论,对于较新版本的 MySQL,该字段称为authentication_string

mysql> UPDATE mysql.user SET authentication_string =PASSWORD('password') WHERE User='root';

使用以下命令启动 MySQL:

sudo service mysql start

或者

sudo /usr/local/mysql/support-files/mysql.server start

您的新密码是“密码”。
笔记:对于版本MySQL > 5.7尝试这个:

update mysql.user set authentication_string='password' where user='root';
Balmipour 回复 20分钟 前

请不要那样做! @Divz 的答案更安全。引用关于 –skip-grant-tables 的文档: 这使任何人都可以在没有密码和所有权限的情况下进行连接[…] 因为这是不安全的,所以 […] 使用--skip-grant-tables和这个结合--skip-networking以防止远程客户端连接。哦,而且,这个对我不起作用。这就是我来这里的原因:p

tk_ 回复 20分钟 前

所以你说使用这个’sudo mysqld_safe –skip-grant-tables –skip-networking’

Balmipour 回复 20分钟 前

如果你走那条路, 是的。它对我不起作用,无论如何,按照@Divz的回答对我来说似乎更容易--我建议使用dpkg --get-selections | grep mysql-server-要获得您的确切 MySQL 版本,然后使用 sudo dpkg-reconfigure mysql-server-5.x (将 5.x 替换为您的服务器版本,顺便说一句)。我以这种精确度评论了@Divz 的答案,但它被几个“感谢”评论所掩盖。

MD. Mohiuddin Ahmed 回复 20分钟 前

给出:错误 1054(42S22):“字段列表”中的未知列“密码”

Dejell 回复 20分钟 前

更新用户集 authentication_string=password(‘1111′) where user=’root’;

PositiveGuy 回复 20分钟 前

当我尝试这样做时,我得到 ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO)。如果我添加 -p: ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)

eifersucht 回复 20分钟 前

我必须更改命令sudo mysql restart为了sudo service mysql restart,它就像一个魅力。’我已经编辑了你的帖子。

IberoMedia 回复 20分钟 前

自 MySQL 5.7.6 起,Password 列被重命名为“authentication_string”在这里你可以阅读更多关于它的信息:bugs.mysql.com/bug.php?id=76655

Yacine Rouizi 回复 20分钟 前

注意:对于 mysql > 5.7 的版本,试试这个:update mysql.user set authentication_string='password' where user='root';;

ttoshiro 回复 20分钟 前

当我尝试这个时,我收到以下错误:Failed to stop mysql.service: Unit mysql.service not loaded.我究竟做错了什么?

tk_ 回复 20分钟 前

你的Mysql在运行吗?

GuilleW 回复 20分钟 前

+1K 该死的 authentication_string 列绝对是我的脚本崩溃的原因!!!非常感谢@IberoMedia!

0
XY-JOE 回答 20分钟 前

我最近遇到了同样的问题,但就我而言,我记得我的密码很好,但它一直给我同样的错误。我尝试了很多解决方案,但仍然没有帮助。然后我尝试了这个:

mysql -u root -p

之后它会要求您输入这样的密码

Enter password:

然后我输入了我使用的密码。就这样。

kaspiotr 回复 20分钟 前

为我工作!我的 mysql-server 版本是:服务器版本:8.0.13 MySQL 社区服务器 – GPL

Getek99 回复 20分钟 前

如果您不知道密码怎么办?

0
Sameer Kumar Choudhary 回答 20分钟 前

当您的密码丢失时会发生这种情况。
忘记密码时更改密码的步骤:

  1. 停止 MySQL 服务器(在 Linux 上):
    sudo systemctl stop mysql
  2. 在不加载授权表或启用网络的情况下启动数据库:
    sudo mysqld_safe --skip-grant-tables --skip-networking &

    此命令末尾的 & 符号将使此进程在后台运行,因此您可以继续使用终端并运行mysql -u root(作为根)。它不会要求输入密码。
    如果您收到如下错误:

    2018-02-12T08:57:39.826071Z mysqld_safe Directory '/var/run/mysqld' for UNIX
    socket file don't exists.
    mysql -u root
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket
    '/var/run/mysqld/mysqld.sock' (2)
    [1]+  Exit 1
  3. 制作 MySQL 服务目录。
    sudo mkdir /var/run/mysqld

    授予 MySQL 用户写入服务目录的权限。

    sudo chown mysql: /var/run/mysqld
  4. 在步骤 2 中运行相同的命令以在后台运行 MySQL。
  5. mysql -u root.您无需输入密码即可获得 MySQL 控制台。
    运行这些命令

    FLUSH PRIVILEGES;

    对于 MySQL 5.7.6 和更新版本

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

    对于 MySQL 5.7.5 及更早版本

    SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');

    如果 ALTER USER 命令不起作用,请使用:

    UPDATE mysql.user SET authentication_string = PASSWORD('new_password')     WHERE User = 'root' AND Host = 'localhost';

    现在退出

  6. 要停止手动启动的实例:
    sudo kill `cat /var/run/mysqld/mysqld.pid`
  7. 重启 MySQL
    sudo systemctl start mysql
Aung Myo Linn 回复 20分钟 前

就我而言,我必须将第 6 步修改为sudo kill `sudo cat /var/run/mysqld/mysqld.pid`

Jivan Bhandari 回复 20分钟 前

这是对我有用的。在第 5 步中,执行 1. 使用 USER 2. 更改密码使用 –> update user set authentication_string = PASSWORD(“password”) where User=’root’;

cspider 回复 20分钟 前

这是最好的解决方案,我能找到。在 MBP ’15 型号的 macOS Mojave 上使用“5.7.26 MySQL 社区服务器 (GPL)”。我不得不从 System Preference 中停止 Mysql,然后执行第 2 步和第 5 步。然后我必须通过使用 ps -ef | 查找 PID 来终止 MySQL 进程。 grep mysql。

Urvah Shabbir 回复 20分钟 前

经过数小时和数天的努力,我懒得在步骤 2 中找到错误原因。非常感谢您的回答。终于可以看到了mysql -u root -p使用我的新密码

0
Lahiru 回答 20分钟 前

在服务器的初始启动时,假设服务器的数据目录为空,会发生以下情况:

  • 服务器已初始化。
  • SSL 证书和密钥文件在数据目录中生成。
  • validate_password 插件已安装并启用。
  • 超级用户帐户 ‘root’@’localhost’ 已创建。超级用户的密码已设置并存储在错误日志文件中。

要显示它,请使用以下命令:

shell> sudo grep 'temporary password' /var/log/mysqld.log

通过使用生成的临时密码登录并为超级用户帐户设置自定义密码,尽快更改 root 密码:

shell> mysql -u root -p

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass5!';
Eric Hepperle - CodeSlayer2010 回复 20分钟 前

这看起来很有希望,但它对我不起作用。当我跑sudo grep 'temporary password' /var/log/mysqld.log我明白了/var/log/mysqld.log: No such file or directory

artemisian 回复 20分钟 前

尝试sudo grep 'temporary password' /var/log/mysql/error.log. @Lahiru 解决方案对我有用。

learner 回复 20分钟 前

我试过 sudo grep ‘temporary password’ /var/log/mysql/error.log 但它什么也没返回。

kaspiotr 回复 20分钟 前

尝试shell> sudo grep 'password' /var/log/mysql/error.log.为我工作,但我得到:root@localhost 是使用空密码创建的!请考虑关闭 –initialize-insecure 选项。我的mysql版本是:版本 8.0.13 for Linux on x86_64(MySQL 社区服务器 – GPL)

Engin Yilmaz 回复 20分钟 前

根据本教程digitalocean.com/community/tutorials/…对于 MySQL 5.7.6 和更新版本以及 MariaDB 10.1.20 和更新版本,使用ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';对于旧系统SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');.就我而言,Alter 已经完成了这项工作。

R-obert 回复 20分钟 前

@EnginYilmaz 当问题是 mysql 甚至无法访问时,您为什么建议使用 mysql 命令?

Engin Yilmaz 回复 20分钟 前

对不起,@R-obert。我提到要忘记完整的教程是关于使用系统 root 权限在没有密码的情况下访问 mysql。无需密码即可轻松以root身份登录后,可以设置其他密码。

Abhilash Singh Chauhan 回复 20分钟 前

@learner 使用grep 'A temporary password' /var/log/mysqld.log |tail -1