544

我正在设置一个新服务器并不断遇到这个问题。

当我尝试使用 root 用户登录 MySQL 数据库时,出现错误:

错误 1698 (28000): 拒绝用户 'root'@'localhost' 的访问

不管我是通过终端(SSH)、phpMyAdmin还是 MySQL 客户端(例如Navicat )连接。他们都失败了。

我查看了mysql.user表并得到以下信息:

+------------------+-------------------+
| user             | host              |
+------------------+-------------------+
| root             | %                 |
| root             | 127.0.0.1         |
| amavisd          | localhost         |
| debian-sys-maint | localhost         |
| iredadmin        | localhost         |
| iredapd          | localhost         |
| mysql.sys        | localhost         |
| phpmyadmin       | localhost         |
| root             | localhost         |
| roundcube        | localhost         |
| vmail            | localhost         |
| vmailadmin       | localhost         |
| amavisd          | test4.folkmann.it |
| iredadmin        | test4.folkmann.it |
| iredapd          | test4.folkmann.it |
| roundcube        | test4.folkmann.it |
| vmail            | test4.folkmann.it |
| vmailadmin       | test4.folkmann.it |
+------------------+-------------------+

如您所见,用户root应该具有访问权限。

服务器非常简单,因为我已经尝试对此进行故障排除一段时间了。

它运行带有 Apache、MySQL 和 PHP 的Ubuntu 16.04.1 LTS (Xenial Xerus),以便它可以托管网站,以及 iRedMail 0.9.5-1,以便它可以托管邮件。

在我安装 iRedMail 之前登录 MySQL 数据库工作正常。我也试过只安装 iRedMail,但 root 也不起作用。

如何解决我的 MySQL 登录问题或如何在现有 MySQL 安装上安装 iRedMail?是的,我尝试了安装提示,但在配置文件中找不到这些变量。

4

21 回答 21

1552

在某些系统上,例如Ubuntu,MySQL 默认使用Unix auth_socket 插件

基本上这意味着:使用它的 db_users 将通过系统用户凭据进行“身份验证” 。您可以通过执行以下操作来查看您的root用户是否设置为这样:

sudo mysql -u root # I had to use "sudo" since it was a new installation

mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;

+------------------+-----------------------+
| User             | plugin                |
+------------------+-----------------------+
| root             | auth_socket           |
| mysql.sys        | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+

正如您在查询中看到的,root用户正在使用该auth_socket插件。

有两种方法可以解决这个问题:

  1. 可以设置root用户使用mysql_native_password插件
  2. db_user你可以和你一起创造一个新的system_user(推荐)

选项1:

sudo mysql -u root # I had to use "sudo" since it was a new installation

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

sudo service mysql restart

选项 2:(将 YOUR_SYSTEM_USER 替换为您拥有的用户名)

sudo mysql -u root # I had to use "sudo" since it was a new installation

mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY 'YOUR_PASSWD';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;

sudo service mysql restart

请记住,如果您使用选项 #2,您必须以系统用户名 ( mysql -u YOUR_SYSTEM_USER) 连接到 MySQL。

注意:在某些系统(例如,Debian 9 (Stretch))上,'auth_socket' 插件被称为'unix_socket',因此对应的 SQL 命令应该是:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

andy 的评论来看,MySQL 8.xx 似乎更新/替换了auth_socketfor caching_sha2_password. 我没有使用 MySQL 8.xx 的系统设置来测试它。但是,上述步骤应该可以帮助您理解问题。这是回复:

MySQL 8.0.4 的一个变化是新的默认身份验证插件是“caching_sha2_password”。新的“YOUR_SYSTEM_USER”将具有此身份验证插件,您现在可以使用“mysql -u YOUR_SYSTEM_USER -p”从 Bash shell 登录,并在提示符下提供该用户的密码。不需要“更新用户设置插件”步骤。

有关 8.0.4 默认身份验证插件更新,请参阅 MySQL 8.0.4:新的默认身份验证插件:caching_sha2_password

于 2017-03-12T01:17:59.197 回答
317

新版本MySQL 就是这样做的

在新的 MySQL 客户端中,如果安装时密码为空,则基于auth_socket插件。

sudo正确的方法是使用权限登录 MySQL 。

sudo mysql -u root -p

然后使用以下命令更新密码:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';

完成后,停止并启动MySQL 服务器。

sudo service mysql stop
sudo service mysql start

有关完整的详细信息,您可以参考此链接

于 2018-09-14T16:17:47.720 回答
23

不需要 sudo

数据库使用 2 个全权限帐户进行初始化:第一个是“root”,无法访问,第二个是您的用户名(使用命令检查whoami)。

要启用对 root 帐户的访问,您需要使用您的用户名登录

mysql -u $(whoami)

并手动更改root密码

use mysql;
set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
flush privileges;
quit

以“root”身份登录

mysql -u root -p
于 2020-01-10T18:31:38.177 回答
14

我在通过Windows 10 桌面上的PuTTY与之交互的Debian 8 (Jessie) VM上遇到了这个问题。

我在这里尝试了各种建议,但都没有奏效,我正在 Debian 主机上运行MariaDB。最后我发现我无法在安全模式下启动数据库服务器,但我不需要,以下命令实际上对我有用,即允许新创建的 MySQL 用户登录 MySQL/MariaDB 服务器:

sudo service mysql restart
sudo mysql # Logs in automatically into MariaDB
use mysql;
update user set plugin='' where user='your_user_name';
flush privileges;
exit;
sudo service mysql restart # Restarts the MySQL service

如果上述方法对您不太有效,请按照zetacu 帖子中概述的步骤操作,然后按照我的步骤操作。

现在您应该能够使用远程终端客户端并使用以下命令安全地登录 MySQL:

mysql -u your_user_name -p

*出现提示时输入密码

于 2017-11-11T14:03:55.293 回答
11

步骤1。sudo mysql -u root -p

第2步。USE mysql;

步骤 3。ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';

这里的“admin”是您的新密码,但您可以更改它。

第4步。exit

你完成了。

于 2018-12-01T11:04:02.257 回答
9

经过数小时在这里没有任何解决方案的挣扎,这对我有用。我发现了一个 YouTube视频,其中说密码列现在称为authentication_string

所以我能够按如下方式更改我的密码:

首先从终端进入 MySQL 客户端:

sudo mysql

然后在mysql中,键入以下内容mysql>

mysql> use mysql
mysql> update user set authentication_string=PASSWORD("mypass") where user='root';
mysql> flush privileges;
mysql> quit;

此时你已经退出了 MySQL 客户端,回到你正常的终端位置。您需要重新启动 MySQL 客户端才能使其生效。对于该类型,以下内容:

sudo service mysql restart

请参阅此视频链接以获得更好的理解。

于 2020-01-29T17:09:07.117 回答
8

我建议删除 MySQL 连接 -

这适用于 MySQL 5.5 版。如果您的版本不同,请相应更改第一行。

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

并再次安装,但这次自己设置一个 root 密码。这样会省很多力气。

sudo apt-get update
sudo apt-get install mysql-server
于 2017-03-10T12:25:10.463 回答
5

经过数小时的研究,我找到了我的解决方案。

停止 MySQL

sudo service mysql stop

制作 MySQL 服务目录。

sudo mkdir /var/run/mysqld

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

sudo chown mysql: /var/run/mysqld

手动启动 MySQL,无需权限检查或联网。

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

无需密码即可登录。

mysql -uroot mysql

更新密码

UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='%';
EXIT;

关闭 MySQL。

sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown

正常启动MySQL服务。

sudo service mysql start
于 2019-09-03T06:41:06.667 回答
5

有一个关于如何为最新的 MySQL 设置新密码的良好且定期更新的指南:

如何在 Ubuntu 20.04 上安装 MySQL

最好从上面的页面阅读整个主题,但简而言之,这可能会有所帮助。

运行安全脚本:

sudo mysql_secure_installation

详细信息mysql_secure_installation

之后,您可以按照以下步骤更改密码:

sudo mysql

mysql>ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

更改root用户密码的详细信息

如果遇到问题,可能需要重新安装 MySQL。

于 2020-07-23T13:01:06.310 回答
4

对我有用:

mysql --user=root mysql
CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
于 2018-12-30T21:19:12.917 回答
4

我第一次也遇到了同样的问题。

现在它是固定的:

首先,复制/etc/mysql/mysql.conf.d/mysqld.cnf文件并粘贴到/etc/mysql/my.cnf.

您可以通过以下命令执行此操作:

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf

现在让我们重置密码:

在终端中使用以下命令:

sudo service mysql stop
sudo service mysql start
sudo mysql -u root

现在您在 MySQL 控制台中。

然后让我们编写一些查询来重置我们的 root 密码:

USE mysql
update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
update user set plugin="mysql_native_password";
flush privileges;
quit

现在我们可以清理了/etc/mysql/my.cng

在编辑器中打开上述文件并删除文件中的整行。

之后让我们重新启动 MySQL:

sudo mysql service restart

现在让我们使用新创建的密码来使用 MySQL:

sudo mysql -u root -p

最后输入您新创建的密码。

于 2019-07-18T11:42:50.537 回答
4

就我而言,

mysql -u root -p

Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

我确定我的密码是正确的。否则,错误代码将是ERROR 1045 (28000): Access denied for user

所以我使用sudo重新登录,

sudo mysql -u root -p

这次它对我有用。请参阅文档

然后修改root密码,

mysql> alter user 'root'@'%' identified with mysql_native_password by 'me123';
Query OK, 0 rows affected (0.14 sec)

mysql>

然后使用 重新启动服务器sudo /etc/init.d/mysql restart

于 2019-12-03T13:16:42.957 回答
3

第一步:转到文件/etc/phpmyadmin/config.inc.php,然后取消注释您找到"AllowNoPassword"的行。

第二步:登录你的MySQL默认账户

mysql -u root -p

use mysql;
update user set plugin="" where user='root';
flush privilege;

就这样!

于 2018-04-17T20:00:10.270 回答
3

操作系统:Ubuntu 18.04(仿生海狸)

MySQL:5.7

  1. 添加skip-grant-tables到文件mysqld.cnf的末尾

  2. 复制my.cnf文件

    sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
    
  3. 重置密码

    (base) ➜  ~ sudo service mysql stop
    (base) ➜  ~ sudo service mysql start
    (base) ➜  ~ mysql -uroot
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 2
    Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)
    
    Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> use mysql
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed, 3 warnings
    mysql> update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
    Query OK, 1 row affected, 1 warning (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 1
    
    mysql> update user set plugin="mysql_native_password";
    Query OK, 0 rows affected (0.00 sec)
    Rows matched: 4  Changed: 0  Warnings: 0
    
    mysql>  flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> quit
    Bye
    
  4. skip-grant-tables从 my.cnf中删除

    (base) ➜  ~ sudo emacs /etc/mysql/mysql.conf.d/mysqld.cnf
    (base) ➜  ~ sudo emacs /etc/mysql/my.cnf
    (base) ➜  ~ sudo service mysql restart
    
  5. 打开 MySQL 客户端

    (base) ➜  ~ mysql -uroot -ppassword
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 3
    Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)
    
    Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql>
    
  6. 检查密码策略

    mysql> select @@validate_password_policy;
    +----------------------------+
    | @@validate_password_policy |
    +----------------------------+
    | MEDIUM                     |
    +----------------------------+
    1 row in set (0.00 sec)
    
    
    mysql> SHOW VARIABLES LIKE 'validate_password%';
    +--------------------------------------+--------+
    | Variable_name                        | Value  |
    +--------------------------------------+--------+
    | validate_password_dictionary_file    |        |
    | validate_password_length             | 8      |
    | validate_password_mixed_case_count   | 1      |
    | validate_password_number_count       | 1      |
    | validate_password_policy             | MEDIUM |
    | validate_password_special_char_count | 1      |
    +--------------------------------------+--------+
    6 rows in set (0.08 sec)!
    
  7. 更改配置validate_password

    mysql> set global validate_password_policy=0;
    Query OK, 0 rows affected (0.05 sec)
    
    mysql> set global validate_password_mixed_case_count=0;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> set global validate_password_number_count=3;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> set global validate_password_special_char_count=0;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> set global validate_password_length=3;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> SHOW VARIABLES LIKE 'validate_password%';
    +--------------------------------------+-------+
    | Variable_name                        | Value |
    +--------------------------------------+-------+
    | validate_password_dictionary_file    |       |
    | validate_password_length             | 3     |
    | validate_password_mixed_case_count   | 0     |
    | validate_password_number_count       | 3     |
    | validate_password_policy             | LOW   |
    | validate_password_special_char_count | 0     |
    +--------------------------------------+-------+
    6 rows in set (0.00 sec)
    

笔记

你应该知道你的错误是由什么引起的?验证密码策略?

您应该已经决定重置密码以填写政策或更改政策。

于 2019-03-23T04:36:58.217 回答
1

为了第一

sudo mysql -u root -p

SHOW VARIABLES LIKE 'validate_password%';

我们会看到这样的东西:

+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+

我们需要更改这些行:

  1. validate_password.length
  2. validate_password.number_count
  3. validate_password.policy
  4. validate_password.special_char_count
SET GLOBAL validate_password.policy=LOW;
SET GLOBAL validate_password.length=4;
SET GLOBAL validate_password.number_count=0;
SET GLOBAL validate_password.special_char_count=0;

SHOW VARIABLES LIKE 'validate_password%';

我们会看到:

+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password.check_user_name    | ON    |
| validate_password.dictionary_file    |       |
| validate_password.length             | 4     |
| validate_password.mixed_case_count   | 1     |
| validate_password.number_count       | 0     |
| validate_password.policy             | LOW   |
| validate_password.special_char_count | 0     |
+--------------------------------------+-------+

现在退出 MySQL 客户端:

exit;
sudo mysql -u root -p

现在你可以写你的密码了,只有四个或更多的字母。

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';

exit;

sudo mysql -u root -p

您的新密码在用户“root”的数据库中;

于 2021-01-14T20:16:10.890 回答
1

这适用于 MySQL 版本 8.0.26 和Ubuntu 20.04 (Focal Fossa)。

sudo mysql -u root

mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;

+------------------+-----------+-----------------------+
| User             | Host      | plugin                |
+------------------+-----------+-----------------------+
| debian-sys-maint | localhost | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | auth_socket           |
+------------------+-----------+-----------------------+

mysql> UPDATE user SET

plugin='caching_sha2_password' WHERE User='root';

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'you_mysql_password';
mysql> FLUSH PRIVILEGES;
mysql> exit;

sudo service mysql restart
于 2021-09-03T09:48:30.400 回答
1

对于那些在 macOS 上安装最新 MariaDB 并遵循MariaDB 文档中的本教程的人,运行:

sudo mariadb-secure-installation

而不仅仅是mariadb-secure-installation给出的命令。否则,尽管出现错误提示,但没有运气:

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Enter current password for root (enter for none):
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Enter current password for root (enter for none):
Aborting!
于 2022-01-28T22:25:07.713 回答
0

您想使用 root 用户访问 MySQL,但您没有提供 root 的正确密码。

如果您需要为 root 设置新密码,MySQL 的网站上有很好的文档说明如何设置:B.3.3.2 How to Reset the Root Password

不会在这里展示这个过程,因为上面链接上的 MySQL 文档清晰简洁。

于 2016-09-02T00:36:53.577 回答
0

这也发生在我身上。问题在于 Linux 发行版已经附带的 MySQL 存储库。因此,当您简单地执行以下操作时:

sudo apt install mysql-server

它从他们的默认存储库安装 MySQL,这会产生这个问题。因此,要克服这个问题,您需要卸载已安装的 MySQL:

sudo apt remove mysql* --purge --auto-remove

然后从官方 MySQL 网站MySQL APT 存储库下载 MySQL 存储库

按照他们的文档了解如何添加存储库并安装它。这没有问题。

正如zetacu所回答的那样,您可以验证 MySQL root用户现在确实使用了 mysql_native_password 插件。

于 2019-01-13T11:03:39.093 回答
0

我已经完成了以下步骤来解决这个问题。

使用( sudo mysql -p -u root )登录到您机器中的 MySQL并点击以下查询。

  1. CREATE USER 'jack'@'localhost' IDENTIFIED WITH mysql_native_password BY '<>';

  2. 授予所有特权TO 'jack'@'localhost';

  3. 从 mysql.user WHERE user = 'root' 中选择用户、插件、主机;

    +------+-------------+-----------+
    | user | plugin      | host      |
    +------+-------------+-----------+
    | root | auth_socket | localhost |
    +------+-------------+-----------+
    
  4. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<>';

  5. 同花顺特权;

如果您仍然收到错误,请尝试一次。我希望这段代码对你有很大帮助!!

于 2020-12-31T05:20:10.227 回答
0

对于在此处尝试解决方案但没有任何效果的任何人,请确保您使用的是正确的命令, sudosudo mysql -u root -p而不是mysql mysql -u root -p

您需要输入两个密码,一个是当前用户,一个是 root 用户。

于 2021-05-21T01:47:51.513 回答