我正在设置一个新的服务器,但一直遇到这个问题。
当我尝试登录MySQL数据库与根用户,我得到的错误:
错误1698(28000):用户“root”@“localhost”被拒绝访问
不管我是通过终端(SSH)连接,还是通过phpMyAdmin或MySQL客户端(例如Navicat)连接。他们都失败了。
我看了mysql。用户表,得到如下:
+------------------+-------------------+
| 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用户应该具有访问权限。
服务器非常简单,因为我已经尝试了一段时间来解决这个问题。
它运行Ubuntu 16.04.1 LTS (Xenial Xerus)和Apache, MySQL和PHP,这样它就可以托管网站,iRedMail 0.9.5-1,这样它就可以托管邮件。
在安装iRedMail之前,登录MySQL数据库工作正常。我也试过只安装iRedMail,但根也不能用。
如何解决MySQL登录问题,或者如何在现有的MySQL安装上安装iRedMail ?是的,我尝试了安装提示,我在配置文件中找不到这些变量。
在一些系统上,比如Ubuntu, MySQL默认使用Unix auth_socket插件。
基本上,这意味着:db_users使用它,将由系统用户凭证“验证”。您可以通过执行以下操作查看您的根用户是否像这样设置:
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 |
+------------------+-----------------------+
正如您在查询中看到的,根用户正在使用auth_socket插件。
有两种方法可以解决这个问题:
您可以设置root用户使用mysql_native_password插件
您可以使用system_user创建一个新的db_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作为你的系统用户名(MySQL -u YOUR_SYSTEM_USER)。
注意:在某些系统上(例如Debian 9 (Stretch)), 'auth_socket'插件被称为'unix_socket',因此相应的SQL命令应该是:
从andy的评论来看,MySQL 8.x。X更新/替换了caching_sha2_password的auth_socket。我没有MySQL 8.x的系统设置。X来检验这个。但是,上面的步骤应该可以帮助您理解这个问题。下面是回答:
MySQL 8.0.4的一个变化是新的默认认证插件是'caching_sha2_password'。新的“YOUR_SYSTEM_USER”将有这个身份验证插件,你可以从Bash shell登录,现在使用“mysql -u YOUR_SYSTEM_USER -p”,并在提示符上提供该用户的密码。不需要执行“UPDATE user SET plugin”步骤。
关于8.0.4默认认证插件的更新,请参见MySQL 8.0.4: New default authentication plugin: caching_sha2_password。
我也是第一次遇到同样的问题。
现在它是固定的:
首先,复制/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控制台中。
然后让我们写一些查询来重置我们的根密码:
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
最后输入新创建的密码。