我正在安装一个新服务器,并一直遇到这个问题
当我尝试使用root用户登录MySQL数据库时,我得到错误:
错误1698(28000):拒绝用户“root”@“localhost”的访问
无论我是通过终端(SSH)、phpMyAdmin还是MySQL客户端(例如Navicat)进行连接。他们都失败了
我查看了mysql.user表,得到了以下内容:
+------------------+-------------------+
|用户|主机|
+------------------+-------------------+
|根|%|
|根数| 127.0.0.1|
|amavisd |本地主机|
|debian系统维护|本地主机|
|iredadmin |本地主机|
|iredapd | localhost|
|mysql.sys | localhost|
|phpmyadmin |本地主机|
|根|本地主机|
|roundcube |本地主机|
|vmail | localhost|
|vmailadmin | localhost|
|amavisd | test4.folkmann.it|
|iredadmin | test4.folkmann.it|
|我适应了测试4.folkmann.it|
|roundcube | test4.folkmann.it|
|vmail | test4.folkmann.it|
|vmailadmin | test4.folkmann.it|
+------------------+-------------------+
如您所见,用户root应该具有访问权限
服务器非常简单,因为我已经尝试解决这个问题一段时间了
它使用Apache、MySQL和PHP运行Ubuntu16.04.1LTS(Xenial Xerus),这样它就可以托管网站,而iRedMail 0.9.5-1则可以托管邮件
在安装iRedMail之前,登录MySQL数据库工作正常。我还试着安装了iRedMail,但是root也不起作用
如何修复MySQL登录问题,或者如何在现有MySQL安装上安装iRedMail?是的,我尝试了安装技巧,但在配置文件中找不到这些变量
有些系统,如Ubuntu、MySQL,默认情况下使用UNIX auth_socket插件
基本上,这意味着:db_使用它的用户将;“认证”;通过系统用户凭据。您可以通过执行以下操作查看您的root用户是否设置为这样:
sudo mysql-u root#我不得不使用;sudo“;因为这是一个新的装置
mysql>;使用mysql;
mysql>;从mysql.User中选择用户、主机、插件;
+------------------+-----------------------+
|用户|插件|
+------------------+-----------------------+
|root | auth_套接字|
|mysql.sys | mysql_本机_密码|
|debian系统维护| mysql(本地)密码|
+------------------+-----------------------+
如您在查询中所见,root用户正在使用auth\u socket插件
有两种方法可以解决此问题:
- 您可以将root用户设置为使用
mysql\u native\u密码插件 - 您可以使用系统用户创建新的
db\u用户(推荐)
选项1:
sudo mysql-u root#我不得不使用;sudo“;因为它是新安装的
mysql>;使用mysql;
mysql>;更新用户集plugin='mysql\u native\u password'WHERE user='root';
mysql>;同花顺特权;
mysql>;出口
sudo服务mysql重启
选项2:(用您的用户名替换您的系统用户)
sudo mysql-u root#我不得不使用;sudo“;因为是新安装的
mysql>;使用mysql;
mysql>;创建由“您的密码”标识的用户“您的系统用户”@“本地主机”;
mysql>;将**上的所有权限授予“您的系统用户”@“本地主机”;
mysql>;更新用户集plugin='auth_socket'WHERE user='YOUR_SYSTEM'u user';
mysql>;同花顺特权;
mysql>;出口
sudo服务mysql重启
请记住,如果使用选项2,则必须连接到MySQL作为系统用户名(MySQL-u您的系统用户)
注意:在某些系统(例如Debian 9(Stretch))上,“auth_socket”插件称为“unix_socket”,因此相应的SQL命令应该是:UPDATE user SET plugin='unix_socket'WHERE user='YOUR_SYSTEM_user'
从@andy的评论来看,MySQL 8.x.x似乎更新/替换了缓存\u sha2\u密码的auth\u socket。我没有MySQL 8.x.x的系统设置来测试这一点。但是,上述步骤应该有助于您理解问题。答复如下:
MySQL 8.0.4的一个变化是新的默认身份验证插件是“缓存\u sha2\u密码”。新的“您的系统用户”将具有此身份验证插件,您现在可以使用“登录”从bashshell登录;mysql-u您的“u系统”u用户-p;并在提示符处提供此用户的密码。没有任何必要使用;更新用户设置插件";步骤。
有关8.0.4默认身份验证插件更新,请参阅https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/