所以...我正在设置一个新的服务器并继续遇到这个问题。
当我尝试使用root用户登录MySQL数据库时,我收到“ERROR 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,因此可以托管网站和iRedMail 0.9.5-1,以便它可以托管邮件。
在安装iRedMail之前,登录MySQL数据库工作正常。我也试过,只是安装iRedMail,但是然后root,也行不通......
如果有人可以告诉我如何解决我的MySQL登录问题或如何安装iRedMail,在现有的MySQL安装之上。是的,我尝试了Installation Tips,我无法在配置文件中找到这些变量。
非常感谢任何帮助:)
答案 0 :(得分:709)
某些系统如Ubuntu,mysql默认使用UNIX auth_socket plugin。
基本上意味着: db_users使用它,将是" auth"通过系统用户凭据。 您可以通过执行以下操作来查看您的root
用户是否设置如下:
$ sudo mysql -u root # I had to use "sudo" since is 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
插件
有两种方法可以解决这个问题:
mysql_native_password
插件db_user
(推荐)system_user
醇>
选项1:
$ sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
$ service mysql restart
选项2:(将YOUR_SYSTEM_USER替换为您拥有的用户名)
$ 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 '';
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;
$ service mysql restart
请记住,如果您使用选项#2,则必须以系统用户名(mysql -u YOUR_SYSTEM_USER
)
注意:在某些系统上(例如,Debian延伸)' auth_socket'插件名为'unix_socket',因此相应的SQL命令应为:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';
<强>更新强>
来自@ andy的评论似乎mysql 8.xx已更新/替换auth_socket
caching_sha2_password
我没有系统设置mysql 8.xx来测试这个,但是上述步骤应该可以帮助您了解问题。这是回复:
MySQL 8.0.4的一个变化是新的默认身份验证插件是&#39; caching_sha2_password&#39;。新的&#39; YOUR_SYSTEM_USER&#39;将有这个auth插件,您现在可以使用&#34; mysql -u YOUR_SYSTEM_USER -p&#34;从bash shell登录并在提示符下提供此用户的密码。不需要&#34; UPDATE用户SET插件&#34;步。对于8.0.4默认的auth插件更新,请参阅https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/
答案 1 :(得分: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
请参阅this video link以获得更好的理解
答案 2 :(得分:7)
我建议删除Mysql连接 -
UPDATE-这适用于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
答案 3 :(得分:7)
不需要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
答案 4 :(得分:6)
我在我的Windows 10桌面上通过Putty与Debian 8 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帖子(zetacu)中列出的步骤操作,然后按照我的步骤操作。
现在您应该能够使用远程终端客户端并使用以下命令安全地登录到mysql:
mysql -u your_user_name -p
*在提示时输入密码
答案 5 :(得分:3)
关于如何为最新的MySQL设置新密码,有一份良好且定期更新的指南。
https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-20-04
最好从上面的链接中阅读整个主题,但总而言之,这可能会有所帮助,
运行安全脚本:
sudo mysql_secure_installation
Detailed Info for "mysql_secure_installation"
之后,您可以按照以下步骤更改密码
sudo mysql
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
Detailed Info for changin root user password
如果遇到问题,可能需要重新安装MySql。
答案 6 :(得分:2)
经过数小时的研究,我找到了解决方案。
停止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
答案 7 :(得分:1)
您希望以root用户身份访问MySQL,但您没有提供root用户正确的密码。
如果您需要为root 设置新密码,MySQL的网站上有关于如何执行此操作的精彩文档:http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html
我不会在此处显示该过程,因为 MySql文档在上面的链接它清晰简洁。
答案 8 :(得分:1)
步骤1。sudo mysql -u root -p
第2步。USE mysql;
第3步。ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';
“ admin”是您的新密码,可以更改。
第4步。exit
谢谢。完成了。
答案 9 :(得分:1)
That为我工作:
mysql --user=root mysql
CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
答案 10 :(得分: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 |
+--------------------------------------+--------+
我们需要更改这些行
<块引用>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
现在您只能输入 4 个或更多字母的密码。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';
exit;
sudo mysql -u root -p
您的新密码在用户“root”的数据库中;
答案 11 :(得分:0)
对于尝试过这里的解决方案但没有任何效果的任何人,请确保您使用的是正确的命令,sudo sudo mysql -u root -p
而不是 mysql mysql -u root -p
,您需要输入两个密码,即当前密码之一用户和根用户。
答案 12 :(得分:0)
我已执行以下步骤来解决此问题。 使用 (sudo mysql -p -u root) 登录到您机器中的 MySQL 并点击以下查询。
1. CREATE USER 'jack'@'localhost' IDENTIFIED WITH mysql_native_password BY '<<any password>>';
2. GRANT ALL PRIVILEGES ON *.* TO 'jack'@'localhost';
3. SELECT user,plugin,host FROM mysql.user WHERE user = 'root';
+------+-------------+-----------+
| user | plugin | host |
+------+-------------+-----------+
| root | auth_socket | localhost |
+------+-------------+-----------+
4. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<<any password>>';
5. FLUSH PRIVILEGES;
如果您仍然遇到错误,请尝试一次。我希望这段代码对你有很大帮助!!
答案 13 :(得分:0)
就我而言,
dev@Dev-007:~$ mysql -u root -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
我确定我的密码正确,否则错误代码将为ERROR 1045 (28000): Access denied for user
所以我使用sudo重新登录,
dev@Dev-007:~$ sudo mysql -u root -p
这次它对我有用。参见docs
然后更改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
答案 14 :(得分:0)
我也是第一次遇到同样的问题。
现在已解决:
首先,您将/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
最后输入您新创建的密码。
答案 15 :(得分:0)
os:Ubuntu18.04
mysql:5.7
将skip-grant-tables
添加到mysqld.cnf文件的末尾
cp my.cnf
sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
(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
skip-grant-tables
(base) ➜ ~ sudo emacs /etc/mysql/mysql.conf.d/mysqld.cnf
(base) ➜ ~ sudo emacs /etc/mysql/my.cnf
(base) ➜ ~ sudo service mysql restart
(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>
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)!
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)
注释 您应该知道您的错误是由什么引起的? validate_password_policy?
您应该决定重设密码以填写政策或更改政策。
答案 16 :(得分:0)
这也发生在我身上。问题是Linux发行版随附的mysql仓库。因此,当您简单地做:
$ sudo apt install mysql-server
它从默认仓库中安装了mysql,这给了这个问题。因此,要克服这一点,您需要卸载已安装的mysql
$ sudo apt remove mysql* --purge --auto-remove
然后从官方mysql网站MySQL APT Repo下载mysql repo 遵循他们的文档,了解如何添加和安装仓库。 这没有问题。 就像@zetacu回答的那样,您可以验证mysql root现在确实使用了mysql_native_password插件
答案 17 :(得分:0)
第一步:转到/etc/phpmyadmin/config.inc.php,然后取消注释找到AllowNoPassword的行。 第二步:登录您的mysql默认帐户
mysql -u root -p
use mysql;
update user set plugin="" where user='root';
flush privilege;
就是这样!
答案 18 :(得分:-1)
让我为你解决。
SET GLOBAL validate_password.length = 4;
SET GLOBAL validate_password.mixed_case_count = 0;
SET GLOBAL validate_password.number_count = 0;
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.special_char_count = 0;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';
仅用于测试目的。