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

时间:2014-02-21 20:52:48

标签: mysql linux ubuntu

我是一名电气工程师,主要负责电力系统而不是编程。最近,我一直在按照手册在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

然后我做

me@ubuntu:~/Desktop/iPDC-v1.3.1/DBServer-1.1$ mysql -uroot -proot <"Db.sql"

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

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

我该如何解决并继续?

33 个答案:

答案 0 :(得分:123)

注意:对于 MySQL 5.7 + ,请参阅answer from @Lahiru此问题。这包含更多当前信息。

对于MySQL&lt; 5.7:

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

mysql -u root

显然,您应该在安装后更改root密码

mysqladmin -u root password [newpassword]

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

答案 1 :(得分:111)

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

sudo dpkg-reconfigure mysql-server-5.5

这将更改root密码。

答案 2 :(得分:62)

您必须重置密码! mac osx(测试和工作)和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

您的新密码是&#39;密码&#39;。

答案 3 :(得分:30)

如果问题仍然存在,请尝试强制更改传递

/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

答案 4 :(得分:22)

在服务器初次启动时,如果服务器的数据目录为空,则会发生以下情况:

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

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

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

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

shell> mysql -uroot -p 

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass5!'; 

答案 5 :(得分:20)

我知道这是一个古老的问题,但我觉得这可能对某人有所帮助。我最近遇到了同样的问题但在我的情况下,我记得我的密码很好,但它一直给我同样的错误。我尝试了很多解决方案,但仍然没有帮助,然后我尝试了这个

mysql -u root -p 

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

Enter password: 

然后我输入我使用的密码。那就是

答案 6 :(得分:19)

当您的密码丢失时会发生。

忘记密码后更改密码的步骤:

  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目录'/ var / run / mysqld'for UNIX
    套接字文件不存在。 mysql -u root ERROR 2002(HY000):无法通过套接字连接到本地MySQL服务器
    '/var/run/mysqld/mysqld.sock'(2) [1] +退出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. 现在退出

    1. 停止手动启动实例

      sudo kill `cat /var/run/mysqld/mysqld.pid`
      
    2. 重启mysql

      sudo systemctl start mysql
      

答案 7 :(得分:11)

使用Ubuntu-16.04:安装了mysql - 5.7。 我有同样的问题:root用户登录被拒绝。

尝试以下步骤:

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

  2. dpkg-reconfigure mysql-server-5.7

  3. mysql -u root -p

  4. 如果没有-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;
    

    退出root并从上面给出的登录。

    mysql -u <your_new_username> -p
    

    由于某些原因仍然只是键入mysql不起作用。在所有。我建议养成使用mysql -u <name> -p的习惯。

答案 8 :(得分:7)

我遇到了这个非常烦人的问题,发现很多答案都没有用。我遇到的最佳解决方案是完全卸载mysql并重新安装它。在重新安装时,您设置了root密码,这解决了问题。


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,我认为数字海洋有一个很好的教程。查看我的要点。
https://gist.github.com/JamesDaniel/c02ef210c17c1dec82fc973cac484096

答案 9 :(得分:5)

  

我以 root用户$SUDO)的身份安装了MySQL,并遇到了同样的问题
  这是我的解决方法-

  1. $ 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

在上方,我们将看到密码,我们将在提示中使用(GUx0RblkD3sPhHL5) -

  1. mysql -u debian-sys-maint -p Enter password:
    现在提供密码( GUx0RblkD3sPhHL5 )。

  2. 现在从MySQL exit并重新登录为-

    mysql -u root -p Enter password:
    现在提供新密码。就是这样,我们有了新的密码以备将来使用。

它对我有用,希望也能帮到您!

答案 10 :(得分:5)

请阅读官方文档:Mysql: How to Reset the Root Password

如果您有权访问终端:

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');

答案 11 :(得分:3)

答案可能听起来很愚蠢,但在浪费了几个小时之后,这就是我开始工作的方式

mysql -u root -p

我收到了错误消息

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

即使我输入了正确的密码(第一次安装mysql时获得的临时密码)

当我在密码提示符闪烁时输入密码时,我说对了

答案 12 :(得分:3)

我在Mac OSX中使用mysql-5.7.12-osx10.11-x86_64.dmg

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

按照说明

  1. 转到cd /usr/local/mysql/bin/
  2. 输入临时密码(类似于&#34; tsO07JF1 =&gt; 3&#34;)
  3. 你应该得到mysql&gt;提示。
  4. 运行,SET PASSWORD FOR 'root'@'localhost' = PASSWORD('{YOUR_PASSWORD}');如果您想设置密码:&#34; root&#34;那么命令就是SET PASSWORD FOR 'root'@'localhost' = PASSWORD('root');
  5. 运行ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
  6. 运行exit
  7. 运行./mysql -u root -p
  8. 输入您的密码。在我的情况下,我会输入,&#34; root&#34; (没有引用)
  9. 这就是全部。
  10. 为方便起见,您应将"/usr/local/mysql/bin"添加到路径

    现在,您可以从任何地方输入./mysql -u root -p,然后输入密码,您将获得mysql&gt;提示。

    希望它有所帮助。

答案 13 :(得分:2)

如果问题仍然存在,请尝试强制更改传递

停止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

答案 14 :(得分:1)

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

  1. 按照B.5.3.2.2重置root密码:Unix和Unix类系统中的说明进行操作 MySQL 5.7 reference manual

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

    2016-08-10T11:41:20.421946Z 0 [注意]启动执行init_file'/ home / me / mysql / mysql-init'。 2016-08-10T11:41:20.422070Z 0 [错误] / usr / sbin / mysqld:找不到文件'/ home / me / mysql / mysql-init'(错误代码:13 - 权限被拒绝) 2016-08-10T11:41:20.422096Z 0 [错误]中止

  3. 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. #sudo /etc/init.d/apparmor reload

    3. 再次启动mysqld_safe尝试上面的步骤2。检查/var/log/mysql/error.log确保没有错误并且mysqld已成功启动

    4. 运行#mysql -u root -p

      输入密码:

    5. 输入您在mysql-init中指定的密码。您现在应该能够以root用户身份登录。

      1. #sudo mysqladmin -u root -p shutdown

      2. 关闭mysqld_safe
      3. #sudo systemctl start mysql启动mysqld正常方式

答案 15 :(得分:1)

只有一行,它解决了我的问题。

sudo dpkg-reconfigure mysql-server-5.5

答案 16 :(得分:1)

对于那些当前答案不起作用的人,可以尝试以下操作:(在Mac OS上测试)

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             |
+-----------+------------------+

,然后您可以在此处更改配置,编辑密码或修改授权。

答案 17 :(得分:1)

如果您输入其他答案中所述的命令,但仍然会出现此错误,这将起作用:

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 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 -uroot 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 pass regardless of its host

FLUSH PRIVILEGES;
EXIT;

#Now you can use your new password to login to your Server
mysql -uroot -p

答案 18 :(得分:0)

link复制

,我遇到了同样的问题,并解决了这个问题,在为数据库添加密码后,我们需要添加-p(基于密码的登录名),然后输入密码,否则将返回此密码错误。

mysql -u root -p

答案 19 :(得分:0)

我遇到的错误是

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

端口正在运行是一个问题。

默认情况下,mysql在port 3306上运行。

您可以通过运行来检查

  • 在32位系统中:

    sudo /opt/lampp/manager-linux.run

  • 在64位系统中:

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

并点击configure按钮

xampp control panel

在我的情况下,端口运行在3307上,我使用的命令是

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

答案 20 :(得分:0)

尽管最高答案(w / mysqladmin)在Mac 10.15上有效,但在ubuntu上却无效。然后尝试了许多其他选项,包括mysql的安全启动,没有一个起作用。因此添加了新的响应。

至少对于我得到5.7.28-0ubuntu0.18.04.4的版本缺少IDENTIFIED WITH mysql_native_password。 5.7.28是当前LTS的默认设置,因此应该是大多数新系统的默认设置(直到20.04 LTS推出)。

发现:https://www.digitalocean.com/community/questions/can-t-set-root-password-mysql-server,现在已应用

  

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

有效。

答案 21 :(得分:0)

如果您将MySQL作为Docker映像的一部分(例如在端口6606上)和Ubuntu安装(在端口3306上),则指定该端口是不够的:

mysql -u root -p -P 6606

将抛出:

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

默认情况下尝试连接到本地主机时,指定您的本地IP可解决此问题:

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

答案 22 :(得分:0)

我也遇到了同样的问题,我当时所做的是

1)打开您的cmd

2)导航到C:\ Program Files \ MySQL \ MySQL Server 8.0 \ bin> (根据您安装的服务器,MySQL Server 8.0可能有所不同)

3)然后将以下命令mysql -u root -p

4)我将提示您输入密码...只需按Enter键,因为有时您在安装时输入的密码被更改为空白。

现在您可以轻松访问数据库

此解决方案在Windows平台上对我有效

答案 23 :(得分:0)

2021 年。

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

经过几天的徘徊......并且这些答案都不适合我,我做到了,并且奏效了!

始终在 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

它正在工作的一个信号是,当您输入上述命令时,系统会要求您输入 root 密码。

最后:

$ mysql -u root -p

还有你之前输入的密码。

答案 24 :(得分:0)

我在使用Ubuntu 18.04 LTS和Mysql Server版本5.7.27-0ubuntu0.18.04.1(Ubuntu)时遇到了这个问题。

我的解决方案是(使用sudo -i作为 root 运行)

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

mysqladmin -u root password new_pw

答案 25 :(得分:0)

只需输入终端

mysql -u root -p。 比它会询问密码

答案 26 :(得分:0)

我尝试使用@Lahiru的正确答案,但不适用于macOS Mojave上的MySQL服务器版本8.0.16(社区)。

按照上面Sameer Choudhary的说明进行了一些调整之后,我能够更改root密码并启用从本地主机的root访问。

更新:如果要使用Homebrew在Mac OS上安装,则不需要所有这些:“ brew install mysql”

答案 27 :(得分:0)

我有一个类似的问题:

  

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

但就我而言,原因确实很愚蠢。 我从Word文档中复制了命令,问题是连字符没有ASCII 2D代码,但有Unicode E28093。

错误的方式:

mysql -u root –pxxxx

正确的方法:

mysql -u root -pxxxx

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

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

答案 28 :(得分:0)

在Mac上,如果您在使用安装时输入的第一个密码登录时遇到问题,也许您可​​以简单地终止mysql进程,然后尝试。

所以: 1-运行以下命令找到mysql的PID:

ps -aef | grep mysql | grep -v grep

2-终止进程:

kill -15 [process id] 

然后您可以使用以下命令以初始密码登录:

mysql -uroot -p

要求您输入密码。只需输入初始密码即可。

答案 29 :(得分:0)

如果您尚未设置密码,请运行mysql -uroot,它对我有用。

答案 30 :(得分:0)

默认密码为空,因此您必须通过执行以下步骤来更改密码。

连接到mysql

root#mysql

使用mysql

的MySQL&GT;更新用户设置密码=密码(&#39; root&#39;)其中User =&#39; root&#39 ;; 最后,重新加载权限:

的MySQL&GT;冲洗特权; MySQL的&GT;退出

答案 31 :(得分:0)

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

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

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

并将其作为初始文件(以root用户或mysql用户身份)执行

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

需要停止MySQL服务器才能启动mysqld_safe

此外,apparmor权限可能存在加载此init文件的问题。在这里阅读更多 https://blogs.oracle.com/jsmyth/entry/apparmor_and_mysql

答案 32 :(得分:-1)

就我而言,我试图将命令传递给容器。在这种情况下,只会解释第一个单词。确保您没有运行:

mysql

相对于:

mysql -uroot -ppassword schemaname

也许尝试引用:

'mysql -uroot -ppassword schemaname'