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

Sib*_*ing 156 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
Run Code Online (Sandbox Code Playgroud)

然后我做

me@ubuntu:~/Desktop/iPDC-v1.3.1/DBServer-1.1$ mysql -uroot -proot <"Db.sql"
Run Code Online (Sandbox Code Playgroud)

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

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
Run Code Online (Sandbox Code Playgroud)

我该如何解决并继续?

Mik*_*ant 142

注意:对于MySQL 5.7+,请参阅@Lahiru对此问题的回答.这包含更多当前信息.

对于MySQL <5.7:

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

mysql -u root
Run Code Online (Sandbox Code Playgroud)

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

mysqladmin -u root password [newpassword]
Run Code Online (Sandbox Code Playgroud)

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

  • 我按照“mysqladmin -u root 密码 abc1234”进行了尝试,但是我得到了“mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'root'@'localhost' (using password: NO)''。非常感谢! (22认同)
  • 实际上对于mysql社区服务器5.7,安装时会随机生成默认的root密码.检查/var/log/mysqld.log中是否有关于"临时密码"的行.节省数小时的乱七八糟. (17认同)
  • @FarticlePilter `-p` 标志指定密码,因此在更改 root 密码后,您会像 `mysql -u root -p[newpassword]` 一样。`&lt; [filename]` 使用 std 输入在您提供的用户凭据给定的路径上执行 SQL 文件。 (4认同)
  • @Kanagaroo在这个问题中,OP表示他们第一次安装了MySQL,然后试图通过MySQL命令行客户端访问.这听起来像第一次访问我. (2认同)

小智 112

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

sudo dpkg-reconfigure mysql-server-5.5
Run Code Online (Sandbox Code Playgroud)

这将更改root密码.

  • 正是我需要的......**但不是每个人都有5.5版的服务器.使用`dpkg --get-selections | grep sql`来获取你的版本 (8认同)
  • @Divz 在 Rhel/centos 中重新配置 mysql 服务器的命令应该是什么 (2认同)
  • 当我在 Mac OS X 中运行此命令时,出现此错误:`sudo: dpkg-reconfigure: command not found`。有什么建议吗? (2认同)

tk_*_*tk_ 70

你必须重置密码!mac osx(测试和工作)和ubuntu的步骤

使用停止MySQL

sudo service mysql stop
Run Code Online (Sandbox Code Playgroud)

要么

$ sudo /usr/local/mysql/support-files/mysql.server stop
Run Code Online (Sandbox Code Playgroud)

以安全模式启动它:

$ sudo mysqld_safe --skip-grant-tables --skip-networking
Run Code Online (Sandbox Code Playgroud)

(上面的行是整个命令)

这将是一个持续的命令,直到该过程完成,因此打开另一个shell /终端窗口,无需密码登录:

$ mysql -u root

mysql> UPDATE mysql.user SET Password=PASSWORD('password') WHERE User='root';
Run Code Online (Sandbox Code Playgroud)

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

mysql> UPDATE mysql.user SET authentication_string =PASSWORD('password') WHERE User='root';
Run Code Online (Sandbox Code Playgroud)

启动MySQL使用:

sudo service mysql start
Run Code Online (Sandbox Code Playgroud)

要么

sudo /usr/local/mysql/support-files/mysql.server start
Run Code Online (Sandbox Code Playgroud)

您的新密码是"密码".

  • 更新用户集authentication_string = password('1111')其中user ='root'; (4认同)
  • 拜托,不是那样!@Divz的答案更安全._引用关于--skip-grant-tables的文档:_**这使得任何人都可以在没有密码和所有权限的情况下进行连接**[...]因为这是不安全的,所以使用`--skip- grant-tables`与`--skip-networking`结合使用,以防止远程客户端连接._oh,而且,这个对我不起作用.那就是我来这里的原因:p_ (3认同)
  • 这实际上有效...其他解决方案仍然给了我同样的错误. (2认同)
  • 我必须为 `sudo service mysql restart` 更改命令 `sudo mysql restart`,它就像一个魅力。我已经编辑了你的帖子。 (2认同)
  • 从MySQL 5.7.6开始,“密码”列被重命名为“ authentication_string”。在这里,您可以阅读有关它的更多信息:https://bugs.mysql.com/bug.php?id=76655 (2认同)

Yas*_*ien 31

如果问题仍然存在,请尝试强制更改通行证

/etc/init.d/mysql stop

mysqld_safe --skip-grant-tables &

mysql -u root
Run Code Online (Sandbox Code Playgroud)

设置新的MySQL root用户密码

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

停止MySQL服务器:

/etc/init.d/mysql stop
Run Code Online (Sandbox Code Playgroud)

启动MySQL服务器并测试它:

mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

  • 它给了我:ERROR 1054(42S22):'字段列表'中的未知列'密码' (2认同)

Lah*_*iru 29

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

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

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

shell> sudo grep 'temporary password' /var/log/mysqld.log
Run Code Online (Sandbox Code Playgroud)

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

shell> mysql -uroot -p 

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass5!'; 
Run Code Online (Sandbox Code Playgroud)

  • 我试过sudo grep'临时密码'/var/log/mysql/error.log但它什么也没有返回. (14认同)
  • 这看起来很有希望,但它对我不起作用.当我运行`sudo grep'临时密码'/ var/log/mysqld.log`时,我得到`/var/log/mysqld.log:没有这样的文件或目录` (11认同)
  • 尝试`sudo grep'临时密码'/ var/log/mysql/error.log`.@Lahiru解决方案为我工作. (4认同)
  • @EnginYilmaz 当问题是 mysql 甚至无法访问时,为什么你建议使用 mysql 命令? (4认同)
  • 试试 `shell&gt; sudo grep 'password' /var/log/mysql/error.log`。为我工作,但我得到:_root@localhost 是用空密码创建的!请考虑关闭 --initialize-insecure 选项。_我的 mysql 版本是:_Ver 8.0.13 for Linux on x86_64 (MySQL Community Server - GPL)_ (3认同)

小智 28

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

mysql -u root -p 
Run Code Online (Sandbox Code Playgroud)

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

Enter password: 
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您不知道密码怎么办? (8认同)

小智 24

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

忘记时更改密码的步骤:

  1. 停止MySQL服务器(在Linux上):

    sudo systemctl stop mysql
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在不加载授权表或启用网络的情况下启动数据库:

    sudo mysqld_safe --skip-grant-tables --skip-networking &
    
    Run Code Online (Sandbox Code Playgroud)

    此命令末尾的&符将使此进程在
    后台运行,因此您可以继续使用终端并运行#mysql -u root,它不会要求输入密码.

    如果您收到如下错误:

    2018-02-12T08:57:39.826071Z mysqld_safe UNIX
    套接字文件的目录'/ var/run/mysqld' 不存在.mysql -u root ERROR 2002(HY000):无法通过套接字
    '/var/run/mysqld/mysqld.sock' 连接到本地MySQL服务器(2)[1] +退出1

  3. 制作MySQL服务目录.

    sudo mkdir /var/run/mysqld
    
    Run Code Online (Sandbox Code Playgroud)

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

    sudo chown mysql: /var/run/mysqld
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在步骤2中运行相同的命令以在后台运行mysql.

  5. 运行mysql -u root你将获得mysql控制台而无需输入密码.

    运行这些命令

    FLUSH PRIVILEGES;
    
    Run Code Online (Sandbox Code Playgroud)

    适用于MySQL 5.7.6及更高版本

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
    
    Run Code Online (Sandbox Code Playgroud)

    适用于MySQL 5.7.5及更早版本

    SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
    
    Run Code Online (Sandbox Code Playgroud)

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

    UPDATE mysql.user SET authentication_string = PASSWORD('new_password')     WHERE User = 'root' AND Host = 'localhost';
    
    Run Code Online (Sandbox Code Playgroud)

现在退出

  1. 要手动停止实例启动

    sudo kill `cat /var/run/mysqld/mysqld.pid`
    
    Run Code Online (Sandbox Code Playgroud)
  2. 重启mysql

    sudo systemctl start mysql
    
    Run Code Online (Sandbox Code Playgroud)

  • 就我而言,我必须将第 6 步修改为 `sudo kill \`sudo cat /var/run/mysqld/mysqld.pid\` ` (4认同)
  • 这是对我有用的。在步骤 5 中,执行 1. 使用 USER 2. 要更改密码,请使用 --&gt; update user setauthentication_string = PASSWORD("password") where User='root'; (2认同)
  • 这是我能找到的最好的解决方案。在 MBP '15 型号的 macOS Mojave 上使用“5.7.26 MySQL 社区服务器 (GPL)”。我必须从系统偏好设置中停止 Mysql,然后执行步骤 2 和步骤 5。然后我必须通过使用 ps -ef | 查找 PID 来终止 MySQL 进程。grep mysql。 (2认同)

Meh*_*hdi 20

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

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
Run Code Online (Sandbox Code Playgroud)

逐步执行以下命令,直到您重置密码:

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

FLUSH PRIVILEGES;
EXIT;

#kill mysqld_safe process
sudo service mysql restart

#Now you can use your new password to login 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
Run Code Online (Sandbox Code Playgroud)

  • 对于所有远程地址: sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf -&gt; bind-address=0.0.0.0 (2认同)

小智 12

我遇到了这个非常烦人的问题,发现很多答案都没有用.我遇到的最佳解决方案是完全卸载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
Run Code Online (Sandbox Code Playgroud)

我在其他地方找到了这个代码,所以我不相信它.但它的确有效.要在卸载它之后安装mysql,我认为数字海洋有一个很好的教程.查看我的要点.
https://gist.github.com/JamesDaniel/c02ef210c17c1dec82fc973cac484096


小智 12

我使用的是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

没有-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;
Run Code Online (Sandbox Code Playgroud)

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

mysql -u <your_new_username> -p
Run Code Online (Sandbox Code Playgroud)

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


The*_*laa 9

对于那些当前答案不起作用的人可以尝试这个(在 macOS 上测试):

mysql -h localhost -u root -p --protocol=TCP
Run Code Online (Sandbox Code Playgroud)

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

select Host, User from mysql.user;
Run Code Online (Sandbox Code Playgroud)

你应该看到:

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

从这里您可以更改配置并编辑密码或修改授权。


小智 6

2021 年。

\n

Ubuntu\xc2\xa020.04 (Focal Fossa)的答案(也许还有其他发行版)。

\n

经过几天的徘徊......并且没有一个答案对我有用,我这样做了并且它起作用了!

\n

始终在 Bash shell 中:

\n
sudo systemctl disable mysql\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
sudo apt purge mysql-server\n
Run Code Online (Sandbox Code Playgroud)\n

\n
sudo apt purge mysql-community-server*\n
Run Code Online (Sandbox Code Playgroud)\n

在那里,它警告您将删除配置文件...所以它正在工作!因为那些人​​就是制造麻烦的人!

\n
sudo apt autoremove\n
Run Code Online (Sandbox Code Playgroud)\n

命令 sudo apt autoremove 删除所有留下的软件包。

\n

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

\n
sudo apt install mysql-server\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

最后:

\n
mysql -u root -p\n
Run Code Online (Sandbox Code Playgroud)\n

还有你之前输入的密码。

\n


d.d*_*lov 5

请阅读官方文档:Mysql:如何重置root密码

如果您有权访问终端:

MySQL 5.7.6及更高版本:

$ mysql
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
Run Code Online (Sandbox Code Playgroud)

MySQL 5.7.5及更早版本:

$ mysql
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
Run Code Online (Sandbox Code Playgroud)


小智 5

just enter the terminal

mysql -u root -p . than it will ask password to you


S.Y*_*dav 5

我安装了MySQL作为根用户$SUDO),并得到了同样的问题
这是我如何固定它-

  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. 现在exit从MySQL再次登录-

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

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


归档时间:

查看次数:

887845 次

最近记录:

5 年,9 月 前