我正在安装一台新服务器,但一直遇到这个问题.

当我try 使用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应该具有访问权限.

服务器非常简单,因为我已经try 了一段时间来解决这个问题.

它在Apache、MySQL和PHP上运行Ubuntu 16.04.1个LTS(Xenial Xerus),这样就可以托管网站,而iRedMail 0.9.5-1则可以托管邮件.

在安装iRedMail之前,登录MySQL数据库工作正常.我还试着安装了iRedMail,但是root也不起作用.

如何修复MySQL登录问题,或者如何在现有MySQL安装上安装iRedMail?是的,我试过Installation Tips,但在配置文件中找不到这些变量.

推荐答案

有些系统,比如Ubuntu,MySQL默认使用UNIX auth_socket plugin.

基本上,这意味着:db_users using it, will be "authenticated" by 101您可以通过执行以下操作来查看您的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. 你可以用system_user创建一个新的db_user(推荐)

Option 1:

sudo mysql -u root # I had to use "sudo" since it was 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

Option 2:(用你的用户名替换你的系统用户)

sudo mysql -u root # I had to use "sudo" since is 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.

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

从@andy的 comments 来看,MySQL 8.x、 x更新/替换了caching_sha2_passwordauth_socket.我没有MySQL 8的系统设置.x、 x来测试这个.然而,以上步骤应该有助于您理解这个问题.答复如下:

One change as of MySQL 8.0.4 is that the new default authentication plugin is 'caching_sha2_password'. The new 'YOUR_SYSTEM_USER' will have this authentication plugin and you can log in from the Bash shell now with "mysql -u YOUR_SYSTEM_USER -p" and provide the password for this user on the prompt. There isn’t any need for the "UPDATE user SET plugin" step.

For the 8.0.4 default authentication plugin update, see 100

Mysql相关问答推荐

如何重新采样SQL数据库

我如何才能从MySQL过程中获取LARAVEL端的数据?

SQL/Pyspark -判断条件

在MySQL中查找包含无效正则表达式的行

PythonAnywhere中SSH到MySQL数据库无限期挂起,SSH正确,workbench可以完美连接

如何对 varchar() 数据值使用聚合窗口函数?

多列分组并进行求和

模拟Mysql Cursor类的fetchone()方法,并将其返回值设置为None

MySQL,递归 CTE.它如何以这种句法形式工作?

如何从具有第一行列值的表中 Select 客户的最新记录

Django中的MYSQL查询等效

我将如何构建一个 SQL 查询来从交易表中 Select 第一次存款、第二次存款和额外存款

如何按给定开始日期和结束日期的月份汇总?

MySQL 工作台与 phpMyAdmin

使用 MySQL 流式传输大型结果集

Spring Boot:Jdbc javax.net.ssl.SSLException:在接收对等方的 close_notify 之前关闭入站

使用 mysql 处理非常大的数据

在mysql中复制没有数据的数据库 struct (带有空表)

将 Blob 转换为字节数组的最简单方法

为什么在 MySQL 中使用外键约束?