$ ./mysqladminü根- P " 绝密 "
输入密码:
mysqladmin:在'localhost'连接到服务器失败错误:
'访问被拒绝用户'root'@'localhost'(使用密码:YES)'
我怎样才能解决这个问题?
我发现的所有解决方案都比必要的复杂得多,而且没有一个对我有用.这是解决我的问题的解决方案.无需重启mysqld或以特殊权限启动它.
sudo mysql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
使用单个查询,我们将auth_plugin更改为mysql_native_password并将root密码设置为root (随意在查询中更改它)
现在您应该可以使用root登录.更多信息可以在mysql文档中找到
(使用Ctrl + D或键入exit退出mysql控制台)
打开和编辑,/etc/my.cnf
或/etc/mysql/my.cnf
根据您的发行版.
添加skip-grant-tables
下[mysqld]
重启Mysql
您现在应该可以使用以下命令登录mysql mysql -u root -p
跑 mysql> flush privileges;
设置新密码 ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
返回/etc/my.cnf并删除/注释 skip-grant-tables
重启Mysql
现在您可以使用新密码登录 mysql -u root -p
我尝试了很多步骤来纠正这个问题.对于这个问题有很多可能解决方案的来源很难从废话中过滤出来.我终于找到了一个很好的解决方案在这里:
第1步:确定数据库版本
$ mysql --version
你会看到MySQL的一些输出:
$ mysql Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper
或者为MariaDB输出如下:
mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
记下您正在运行的数据库和版本,稍后您将使用它们.接下来,您需要停止数据库,以便手动访问它.
第2步:停止数据库服务器
要更改root密码,必须事先关闭数据库服务器.
你可以用MySQL做到这一点:
$ sudo systemctl stop mysql
对于MariaDB:
$ sudo systemctl stop mariadb
步骤3:在没有权限检查的情况下重新启动数据库服务器
如果在不加载有关用户权限的信息的情况下运行MySQL和MariaDB,则可以使用root权限访问数据库命令行而无需提供密码.这将允许您在不知情的情况下访问数据库.
为此,您需要停止数据库加载存储用户权限信息的授权表.因为这有一点安全风险,所以您也应该跳过网络以防止其他客户端连接.
在不加载授权表或启用网络的情况下启动数据库:
$ sudo mysqld_safe --skip-grant-tables --skip-networking &
此命令末尾的&符号将使此进程在后台运行,以便您可以继续使用终端.
现在,您可以以root用户身份连接到数据库,root用户不应该要求输入密码.
$ mysql -u root
您将立即看到数据库shell提示符.
MySQL提示
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
MariaDB提示
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
现在您具有root访问权限,您可以更改root密码.
第4步:更改Root密码
mysql> FLUSH PRIVILEGES;
现在我们可以实际更改root密码.
对于MySQL 5.7.6及更高版本以及MariaDB 10.1.20及更高版本,请使用以下命令:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
对于MySQL 5.7.5及更早版本以及MariaDB 10.1.20及更早版本,请使用:
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
请务必new_password
使用您选择的新密码进行更换.
注意:如果ALTER USER
命令不起作用,则通常表示更大的问题.但是,您可以尝试UPDATE ... SET
重置root密码.
[重要]这是修复我的特定问题的具体行:
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';
请记住在此之后重新加载授权表.
在任何一种情况下,您都应该看到命令已成功执行的确认.
Query OK, 0 rows affected (0.00 sec)
密码已更改,因此您现在可以停止数据库服务器的手动实例并按原样重新启动它.
步骤5:正常重启数据库服务器
本教程进入了一些重新启动数据库的步骤,但我使用的唯一部分是:
对于MySQL,使用: $ sudo systemctl start mysql
对于MariaDB,请使用:
$ sudo systemctl start mariadb
现在,您可以通过运行以下命令确认已正确应用新密码:
$ mysql -u root -p
该命令现在应该提示新分配的密码.输入它,您应该按预期访问数据库提示.
结论
您现在可以恢复对MySQL或MariaDB服务器的管理访问权限.确保您选择的新root密码强大且安全,并将其保存在安全的地方.
运行以下命令以root身份连接(没有任何密码)
sudo /usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf
对于新的Linux用户来说,这可能是一项艰巨的任务.让我用mysql 8更新这个(现在最新版本是8.0.12,截至2018年9月12日)
在"/etc/mysql/mysql.conf.d/"打开"mysqld.cnf"配置文件.
将skip-grant-tables添加到[mysql]文本的下一行并保存.
重启mysql服务为"sudo service mysql restart".现在你的mysql没有任何身份验证.
连接到mysql客户端(也称为mysql-shell)作为mysql -u root -p.截至目前,没有密码可以输入.
运行sql命令刷新权限;
现在将密码重置为ALTER USER'root'@'localhost'ENFENTIFIED BY'MyNewPassword';
现在让我们回到正常状态; 从"mysqld.cnf"中删除该行"skip-grant-tables"并重新启动服务.
而已.
在尝试了所有其他答案之后,这终于对我有用
sudo mysql -- It does not ask me for any password -- Then in MariaDB/MySQL console: update mysql.user set plugin = 'mysql_native_password' where User='root'; FLUSH PRIVILEGES; exit;
我在这篇文章中找到了答案:https : //medium.com/@chiragpatel_52497/solved-error-access-denied-for-user-root-localhost-of-mysql-programming-school-6e3611838d06
None of the above answers helped me with this problem, so here's the solution I found.
The relevant part:
In Ubuntu systems running MySQL 5.7 (and later versions), the root MySQL user is set to authenticate using the auth_socket plugin by default rather than with a password. This allows for some greater security and usability in many cases, but it can also complicate things when you need to allow an external program (e.g., phpMyAdmin) to access the user.
In order to use a password to connect to MySQL as root, you will need to switch its authentication method from auth_socket to mysql_native_password. To do this, open up the MySQL prompt from your terminal:
sudo mysql
Next, check which authentication method each of your MySQL user accounts use with the following command:
SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)In this example, you can see that the root user does in fact authenticate using the auth_socket plugin. To configure the root account to authenticate with a password, run the following ALTER USER command. Be sure to change password to a strong password of your choosing, and note that this command will change the root password you set in Step 2:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Then, run FLUSH PRIVILEGES which tells the server to reload the grant tables and put your new changes into effect:
FLUSH PRIVILEGES;
Check the authentication methods employed by each of your users again to confirm that root no longer authenticates using the auth_socket plugin:
SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)You can see in this example output that the root MySQL user now authenticates using a password. Once you confirm this on your own server, you can exit the MySQL shell:
exit