考虑:
./mysqladmin -u root -p** '_redacted_'
输出(包括输入密码):
输入密码: Mysqladmin: connect to server at 'localhost' failed错误 '用户'root'@'localhost'(使用密码:YES)拒绝访问'
我该如何解决这个问题?
考虑:
./mysqladmin -u root -p** '_redacted_'
输出(包括输入密码):
输入密码: Mysqladmin: connect to server at 'localhost' failed错误 '用户'root'@'localhost'(使用密码:YES)拒绝访问'
我该如何解决这个问题?
当前回答
我尝试了很多步骤来纠正这个问题。这个问题有很多可能的解决方案,很难从废话中筛选出有意义的东西。我终于在这里找到了一个很好的解决方案:
步骤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而不加载用户权限信息,它将允许您使用根权限访问数据库命令行,而无需提供密码。这将允许您在不知情的情况下访问数据库。
为此,您需要停止数据库加载授权表,授权表存储用户特权信息。因为这有一点安全风险,所以您也应该跳过网络连接,以防止其他客户端连接。
启动数据库而不加载授权表或启用网络:
sudo mysqld_safe --skip-grant-tables --skip-networking &
此命令末尾的&号将使此进程在后台运行,以便您可以继续使用您的终端。
现在您可以作为根用户连接到数据库,不需要输入密码。
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)]>
现在您拥有了根访问权限,您可以更改根密码。
步骤4:修改root用户密码
mysql> FLUSH PRIVILEGES;
现在我们可以修改根密码了。
对于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重置根密码。
[重要]这句话解决了我的问题:
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服务器的管理访问。确保你选择的新根密码是强大和安全的,并把它放在安全的地方。
其他回答
如果你没有足够的特权,就会发生这种情况。
输入su,输入root密码后重试。
我找到的所有解决方案都比必要的要复杂得多,没有一个适合我。这是解决我问题的办法。不需要重新启动mysqld或使用特殊权限启动它。
sudo mysql
-- for MySQL
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
-- for MariaDB
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('root');
通过一个查询,我们将auth_plugin更改为mysql_native_password,并将根密码设置为root(可以在查询中随意更改)。
现在您应该可以使用root登录了。更多信息可以在MySQL文档或MariaDB文档中找到。
(使用Ctrl + D或输入Exit退出MySQL控制台。)
我试图利用Mac上的Docker桌面来运行5.7.35和这个Docker -compose。Yml配置允许它工作:
特别是这一行…
命令:default-authentication-plugin = mysql_native_password
...这招奏效了
version: '3.3'
services:
mysql_db:
image: mysql:5.7
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: 'your_password'
ports:
- '3306:3306'
expose:
- '3306'
volumes:
- ~/your/volume/path:/var/lib/mysql
'-p'参数不要求参数名和值之间有空格。
而不是
./mysqladmin -u root -p 'redacted'
Use
./mysqladmin -u root -p'redacted'
或者只是
./mysqladmin -u root -p
这将提示您输入密码。
我这样做是为了在OS x中MySQL的初始设置中设置我的根密码。
sudo sh -c 'echo /usr/local/mysql/bin > /etc/paths.d/mysql'
关闭终端并打开一个新终端。
在Linux中,可以使用以下方法设置根密码。
sudo /usr/local/mysql/support-files/mysql.server stop
sudo mysqld_safe --skip-grant-tables
(sudo mysqld_safe——skip-grant-tables:第一次对我不起作用。但在第二次尝试时,成功了。)
然后登录MySQL:
mysql -u root
FLUSH PRIVILEGES;
现在修改密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
重新启动MySQL:
sudo /usr/local/mysql/support-files/mysql.server stop
sudo /usr/local/mysql/support-files/mysql.server start