错误1045(28000):拒绝访问用户'root'@'(使用密码:YES)

我一直在按照手册在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 <"Db.sql"

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

错误1045(28000):拒绝访问用户'root'@'localhost'(使用密码:YES)

我该如何修复它并继续?

1628198 次浏览

注意:对于MySQL 5.7 +,请参见这个问题的Lahiru的回答。这包含了更多的最新信息。

MySQL <5.7:

默认root密码为空(即空字符串),而不是root。所以你可以登录为:

mysql -u root

安装完成后,您显然应该更改root密码:

mysqladmin -u root password [newpassword]

在大多数情况下,您还应该在广泛使用数据库之前设置个人用户帐户。

我可以通过执行这条语句来解决这个问题

sudo dpkg-reconfigure mysql-server-5.5

这将改变根密码。

如果问题仍然存在,请尝试强制修改密码:

/etc/init.d/mysql stop


mysqld_safe --skip-grant-tables &


mysql -u root

设置新的MySQL root用户密码:

use mysql;
update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
flush privileges;
quit;

停止MySQL服务器:

/etc/init.d/mysql stop

启动MySQL服务器并测试它:

mysql -u root -p

默认情况下,密码为空,因此您必须按照以下步骤修改密码。

连接MySQL

root# mysql


Use mysql


mysql> update user set password=PASSWORD('root') where User='root';

最后,重新加载特权:

mysql> flush privileges;
mysql> quit

你必须重设密码!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

你的新密码是“password”。

对于MySQL祝辞5.7版本的注意:尝试这样做:

update mysql.user set authentication_string='password' where user='root';

请阅读官方文档:MySQL:如何重置Root密码

如果您可以访问终端:

MySQL 5.7.6及以上版本:

mysql


mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

MySQL 5.7.5及以前版本:

mysql


mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

一句话就解决了我的问题。

sudo dpkg-reconfigure mysql-server-5.5

我使用的是mysql-5.7.12-osx10.11-x86_64。dmg在Mac OS X上。

安装过程会自动为root用户设置一个临时密码。你应该保存密码。密码不可恢复。

按照说明操作:

  1. cd /usr/local/mysql/bin/
  2. 输入临时密码(看起来像,&;tsO07JF1=>3")
  3. 你应该得到mysql>提示符。
  4. 运行,SET PASSWORD FOR 'root'@'localhost' = PASSWORD('{YOUR_PASSWORD}');如果你想设置你的密码:"root"那么命令将是,SET PASSWORD FOR 'root'@'localhost' = PASSWORD('root');
  5. 运行ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
  6. 运行exit
  7. 运行./mysql -u root -p
  8. 输入密码。在我的例子中,我会输入“根”;(不含报价)
  9. 这是所有。

为了方便起见,你应该在PATH环境变量中添加"/usr/local/mysql/bin"

现在你可以在任何地方输入./mysql -u root -p,然后输入密码,你会得到mysql>提示。

在最近的MySQL版本中,mysql.user表中没有任何password

所以你需要执行ALTER USER。将这一行命令放入文件中。

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

并作为init文件执行它(作为mysql用户):

mysqld_safe --init-file=/home/me/mysql-init &

MySQL服务器需要停止来启动mysqld_safe

另外,加载这个init文件的AppArmor权限可能也有问题。在AppArmor and MySQL中阅读更多。

Ubuntu 16.04 (Xenial Xerus)和MySQL版本5.7.13中,我能够通过以下步骤解决问题:

  1. 请参考B.5.3.2.2重置Root用户密码:Unix和类Unix系统 MySQL 5.7参考手册 < / p >

  2. 当我尝试#sudo mysqld_safe --init-file=/home/me/mysql-init &失败。错误发生在/var/log/mysql/error.log:

    2016-08-10T11:41:20.421946Z 0 [Note] Execution of init_file '/home/me/mysql/mysql-init' started.
    2016-08-10T11:41:20.422070Z 0 [ERROR] /usr/sbin/mysqld: File '/home/me/mysql/mysql-init' not found (Errcode: 13 - Permission denied)
    2016-08-10T11:41:20.422096Z 0 [ERROR] Aborting
    

mysql-init的文件权限不是问题。我们需要编辑AppArmor权限。

  1. sudo vi /etc/apparmor.d/usr.sbin.mysqld编辑

     ....
    /var/log/mysql/ r,
    /var/log/mysql/** rw,
    
    
    
    
    # Allow user init file
    /home/pranab/mysql/* r,
    
    
    # Site-specific additions and overrides. See local/README for details.
    #include <local/usr.sbin.mysqld>
    }
    
  2. < p > sudo /etc/init.d/apparmor reload

  3. 重新启动mysqld_safe。试试上面的第二步。检查文件/var/log/mysql/error.log。确保没有错误,并且mysqld已经成功启动。

  4. < p > mysql -u root -p运行

    输入密码:

    输入在mysql-init中指定的密码。您现在应该可以以根用户身份登录了。

  5. 通过sudo mysqladmin -u root -p shutdown关闭mysqld_safe

  6. 通过sudo systemctl start mysql正常方式启动mysqld

我遇到了这个非常烦人的问题,并且找到了许多不管用的答案。我遇到的最好的解决方案是完全卸载MySQL并重新安装。重新安装时,您设置了根密码,这就解决了这个问题。

sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean

这段代码是我在其他地方找到的,所以我没有任何功劳。但它确实有效。要在卸载MySQL后安装它,我认为DigitalOcean有一个很好的教程。看看我的要点。

如何在Ubuntu上安装MySQL(正常工作)

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

  • 完成服务器的初始化。
  • 在data目录下生成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!';

我使用Ubuntu 16.04 (Xenial Xerus)和安装MySQL 5.7。

我也有同样的问题

禁止root用户登录。

我尝试了以下步骤:

  1. dpkg --get-selections | grep mysql(获取MySQL的版本)。

  2. < p > dpkg-reconfigure mysql-server-5.7

  3. < p > mysql -u root -p

如果没有-p,则不会提示您询问密码。进入后,您可以按照以下步骤创建一个带有密码的用户:

CREATE USER 'your_new_username'@'your-hostname' IDENTIFIED BY 'your-password';


GRANT ALL PRIVILEGES ON *.* to 'your_new_username'@'your-hostname' WITH GRANT OPTION;

从根目录退出,从<名称>你给了上面。

mysql -u <your_new_username> -p

由于某种原因,仍然不能输入MySQL。在所有。我建议养成使用mysql -u <name> -p的习惯。

如果问题仍然存在,请尝试强制修改密码。

停止MySQL服务器(Linux):

/etc/init.d/mysql stop

停止MySQL服务器(Mac OS X):

mysql.server stop

使用——skip-grant-tables启动mysqld_safe守护进程:

mysqld_safe --skip-grant-tables &
mysql -u root

设置新的MySQL root用户密码:

use mysql;
update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
flush privileges;
quit;

停止MySQL服务器(Linux):

/etc/init.d/mysql stop

停止MySQL服务器(Mac OS X):

mysql.server stop

启动MySQL服务器服务,测试以root用户登录:

mysql -u root -p

答案可能听起来很傻,但在浪费了几个小时的时间后,我是这样做到的:

mysql -u root -p

我收到了错误信息

错误1045(28000):拒绝访问用户'root'@'localhost'(使用密码:YES)

尽管我输入了正确的密码(你第一次安装MySQL时得到的临时密码)。

当我密码提示闪烁时输入密码时,我得到了它。

当您的密码丢失时就会发生这种情况。

忘记密码时的修改步骤:

  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. < p > 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. < p >启动MySQL

    sudo systemctl start mysql
    

我最近也遇到了同样的问题,但就我而言,我记得我的密码很好,但它一直给我同样的错误。我尝试了很多方法,但是没有一个有用。然后我试了一下:

mysql -u root -p

然后它会要求你输入密码,就像这样

Enter password:

然后我输入了我用的密码。这是所有。

如果你还没有设置密码,那么运行mysql -uroot。这对我很管用。

在Mac上,如果你在使用安装时提供的第一个密码登录时遇到问题,也许你可以简单地关闭MySQL进程,然后再尝试。

所以:

  1. 执行如下命令查找MySQL的PID:

    ps -aef | grep mysql | grep -v grep
    
  2. 杀死进程:

    kill -15 [process id]
    

可以使用初始密码登录:

mysql -uroot -p

它要求你输入密码。只需输入初始密码。

我也遇到过类似的问题:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using 密码:没有)< / p >

但在我的情况下,这个原因真的很愚蠢。 我从Word文档中复制了该命令,问题是连字符没有ASCII 0x2D代码,而是Unicode 0xE2 0x80 0x93 UTF-8序列(代码点U+2013 短破折号)

错误的方式:

mysql -u root –pxxxx

正确的方式:

mysql -u root -pxxxx

两者看起来一样,但并不相同(尝试一下,复制和粘贴替换密码)。

面对这种类型的错误,建议尝试输入命令,而不是复制和粘贴。

如果其他答案都不适合您,并且您收到了以下错误:

mysqld_safe Logging to '/var/log/mysql/error.log'.
mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
[1]+  Exit 1                  sudo mysqld_safe --skip-grant-tables

按照以下命令依次执行,直到重置密码:

# Stop your server first
sudo service mysql stop


# Make the MySQL service directory.
sudo mkdir /var/run/mysqld


# Give MySQL permission to work with the created directory
sudo chown mysql: /var/run/mysqld


# Start MySQL, without permission and network checking
sudo mysqld_safe --skip-grant-tables --skip-networking &


# Log in to your server without any password.
mysql -u root mysql




# Update the password for the root user:
UPDATE mysql.user SET authentication_string=PASSWORD('YourNewPasswordBuddy'), plugin='mysql_native_password' WHERE User='root' AND Host='localhost';


# If you omit (AND Host='localhost') section, it updates
# the root password regardless of its host


FLUSH PRIVILEGES;
EXIT;


# Kill the mysqld_safe process
sudo service mysql restart


# Now you can use your new password to log in to your server
mysql -u root -p


# Take note for remote access. You should create a remote
# user and then grant all privileges to that remote user

我尝试了正确的Lahiru回答,但它在macOS v10.14 (Mojave)上无法与MySQL服务器8.0.16 (Community)版本一起工作。

我遵循萨米尔·乔杜里的指示和一些调整,我能够改变根密码,并从本地主机启用根访问。

所有这些都不是必需的。如果你正在使用家酿在Mac OS上安装:

brew install mysql

在终端输入:

mysql -u root -p

然后它会问你密码。

我安装MySQL作为根用户 ($SUDO),得到了同样的问题

以下是我的解决方法:

  1. < p > sudo cat /etc/mysql/debian.cnf

    这将显示细节如下:

    # Automatically generated for Debian scripts. DO NOT TOUCH! [client] host = localhost user = debian-sys-maint password = GUx0RblkD3sPhHL5 socket = /var/run/mysqld/mysqld.sock [mysql_upgrade] host = localhost user = debian-sys-maint password = GUx0RblkD3sPhHL5 socket = /var/run/mysqld/mysqld.sock

    上面我们可以看到密码。但是我们将在提示符中调用use(GUx0RblkD3sPhHL5)

  2. ' mysql -u debian-sys-maint -p

    输入密码:'

    现在提供密码(GUx0RblkD3sPhHL5)。

  3. 现在exit从MySQL和登录再次:

    mysql -u root -p

    输入密码:'

现在提供新密码。这是所有。我们有新密码供以后使用。

这对我很管用。

我在Ubuntu 18.04 (Bionic Beaver) LTS和MySQL服务器版本5.7.27-0ubuntu0.18.04.1 (Ubuntu)时遇到了这个问题。

我的解决方案是(运行为sudo -i):

mysql <<-EOSQL
use mysql;
update user set plugin="mysql_native_password" where User='root';
FLUSH PRIVILEGES;
EOSQL


mysqladmin -u root password new_pw

我也遇到了同样的问题。我做了:

  1. 打开cmd

  2. 登录C:\Program Files\MySQL\MySQL Server 8.0\bin> (MySQL Server 8.0可能不同,取决于你安装的服务器)

  3. 然后输入以下命令mysql -u root -p

  4. 将提示输入密码…简单地按输入,因为有时你在安装时输入的密码会被更改为空白。

现在您可以简单地访问数据库。

这个解决方案在Windows平台上很适合我。

如果你把MySQL作为Docker镜像的一部分(比如在6606端口上),而Ubuntu安装(在3306端口上),指定端口是不够的:

mysql -u root -p -P 6606

将把:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

因为默认情况下它试图连接到localhost,指定您的本地IP地址可以修复这个问题:

mysql -u root -p -P 6606 -h 127.0.0.1

虽然上面的答案(带有mysqladmin)在macOS v10.15 (Catalina)上有效,但在Ubuntu上无效。然后我尝试了许多其他的选项,包括MySQL的安全启动,但都不起作用。

下面是一个例子:

至少对于我得到的5.7.28-0ubuntu0.18.04.4版本,答案缺乏IDENTIFIED WITH mysql_native_password。5.7.28是当前LTS的默认值,因此应该是大多数新系统的默认值(直到Ubuntu 20.04 (Focal Fossa) LTS出来)。

我找到无法设置MySQL服务器的root密码 . sh . sh,现在应用

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_pass_here';

这是可行的。

我所面临的错误是:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

这是一个端口运行的问题。

默认情况下,MySQL运行在端口3306上。

你可以通过运行来检查

  • 在32位系统中

    :

    sudo /opt/lampp/manager-linux.run

  • 在64位系统中

    :

    sudo /opt/lampp/manager-linux-x64.run

并单击配置按钮。

XAMPP控制面板

在我的示例中,端口运行在3307上,我使用了该命令

mysql -u root -p -P 3307 -h 127.0.0.1

在我的例子中,我试图将命令传递给容器。在这种情况下,只有第一个词被解释。确保你没有在运行:

mysql

相对于:

mysql -uroot -ppassword schemaname

也许可以试着引用:

'mysql -uroot -ppassword schemaname'

这个链接复制,我有同样的问题,这解决了问题。在我们为数据库添加密码后,我们需要添加-p(基于密码的登录),然后输入密码。否则,它将返回以下错误:

mysql -u root -p

对于那些目前的答案不工作的人,可以试试这个(在macOS上测试):

mysql -h localhost -u root -p --protocol=TCP

在此之后,将要求您输入密码,您应该使用您的操作系统用户密码。然后当你进入MySQL时,你可以运行:

select Host, User from mysql.user;

你应该看到:

MySQL [(none)]> select Host, User from mysql.user;
+-----------+------------------+
| Host      | User             |
+-----------+------------------+
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+

从这里你可以改变配置,编辑密码或修改拨款。

2021年。

回答Ubuntu 20.04 (Focal Fossa)(也可能是其他发行版)。

在四处游荡了几天之后…这些答案对我都没用,我就这么做了,而且成功了!

始终在Bash shell中:

sudo systemctl disable mysql

为了阻止守护进程在启动时启动。

sudo apt purge mysql-server

而且

sudo apt purge mysql-community-server*

在那里,它警告你,你将删除配置文件…所以它起作用了!因为他们就是捣乱的人!

sudo autoremove

删除所有遗留的包。

然后(也许这是可选的,但我做到了)重新启动。 另外,我从MySQL官方网页下载了MySQL -server-8.0:

sudo apt install mysql-server

它正在工作的信号是,当您输入上面的命令时,系统要求您输入根密码。

最后:

mysql -u root -p

还有你之前输入的密码。

在我的情况下,我发现我的根密码在日志文件“mysqld.log”,路径“/var/log”。

在我运行命令&;mysql -u root -p"然后输入我在/var/log/mysqld.log中找到的根密码。

对于WSL2,我输入以下命令

sudo mysql -u root -p
它提示我输入密码,我假设这一步是设置密码。我输入了一个随机字符串,然后就可以访问MySQL提示符了。 这可能不是正确的答案,但至少它会帮助你开始

在my.cnf文件的底部添加以下两行代码:

[mysqld]
skip-grant-tables

这应该有用。

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

服务器初始化。 在data目录下生成SSL证书和密钥文件。 安装并启用validate_password插件。 创建超级用户帐户“root”@“localhost”。超级用户的密码被设置并存储在错误日志文件中。 要显示它,使用以下命令:

shell>Sudo grep '临时密码' /var/log/mysqld.log

请使用临时密码登录,并自定义超级用户密码,尽快修改root用户密码:

shell>Mysql -u root -p

mysql>ALTER USER 'root'@'localhost' MyNewPass5!

因为你的错误信息显示“PASSWORD: yes”;这意味着您使用了错误的密码。这种事也发生在我身上。幸运的是,我记得我的正确密码,并能够使数据库连接工作。

我想在建议重新安装MySql的答案中再添加一个提示:在我的情况下,重新安装还不够,我还必须删除/etc/mysql文件夹(MySql 8, Ubuntu 20)。