考虑:

./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密码后重试。

啊,对我来说什么都没用!我有一台运行MariaDB 5.5.64的CentOS 7.4机器。

我必须这么做,在YUM安装MariaDB之后;

systemctl restart mariadb
mysql_secure_installation

mysql_secure_installation将带您完成许多步骤,包括“设置根密码?”[Y / n]”。只要输入“y”并输入密码。随你怎么回答其他问题。

然后你可以用你的密码,使用

mysql -u root -p

它会存活下来

systemctl restart mariadb

的关键

然后,我检查了/bin/mysql_secure_installation源代码,看看它是如何神奇地改变根密码的,而这里的其他答案都不能。导入位是:

do_query "UPDATE mysql.user SET Password=PASSWORD('$esc_pass') WHERE User='root';"

...上面写着SET Password=…而不是SET authentication_string = PASSWORD....因此,本版本(5.5.64)的正确步骤是:

使用mysql -u root -p登录,使用您已经设置的密码。

或者,停止数据库并启动它:

mysql_safe --skip-grant-tables --skip-networking &

从mysql>提示符:

use mysql;
select host,user,password from user where user = 'root';
(observe your existing passwords for root).
UPDATE mysql.user set Password = PASSWORD('your_new_cleartext_password') where user = 'root' AND host = 'localhost';
select host,user,password from user where user = 'root';
flush privileges;
quit;

停止运行mysqld_safe。重启MariaDB。以root用户登录:mysql -u -p。请使用新密码。

如果您愿意,您可以一次设置所有的根密码。我认为这是明智的:

mysql -u root -p

(login)
use mysql;
select host,user,password from user where user = 'root';
UPDATE mysql.user set Password = PASSWORD('your_new_cleartext_password') where user = 'root';
select host,user,password from user where user = 'root';
flush privileges;
quit;

这将执行更新所有的根密码:即,“localhost”,“127.0.0.1”,和“::1”

将来,当我去RHEL 8或其他什么时候,我会试着记得检查/bin/mysql_secure_installation,看看那些家伙是怎么做的,谁是为这个操作系统配置MariaDB的人。

修复macOS

Install MySQL from https://downloads.mysql.com/archives/community/ (8.x is the latest as on date, but ensure that the version is compatible with the macOS version) Give password for root (let <root-password> be the password) during installation (don't forget to remember the password!) Select Use Legacy Password Encryption option (that is what I had used and did not try for Use Strong Password Encryption option) Search and open MySQL.prefPane (use search tool) Select Configuration tab Click Select option of Configuration File Select /private/etc/my.cnf From terminal open a new or existing file with name /etc/my.cnf (vi /etc/my.cnf) add the following content: [mysqld] skip-grant-tables Restart mysqld as follows: ps aux | grep mysql kill -9 <pid1> <pid2> ... (grab pids of all MySQL related processes) mysqld gets restarted automatically Verify that the option is set by running the following from terminal: ps aux | grep mysql > mysql/bin/mysqld ... --defaults-file=/private/etc/my.cnf ... (output) Run the following command to connect (let mysql-<version>-macos<version>-x86_64 be the folder where MySQL is installed. To grab the actual folder, run ls /usr/local/ and copy the folder name): /usr/local/mysql-<version>-macos<version>-x86_64/bin/mysql -uroot -p<root-password>

我尝试了很多步骤来纠正这个问题。这个问题有很多可能的解决方案,很难从废话中筛选出有意义的东西。我终于在这里找到了一个很好的解决方案:

步骤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服务器的管理访问。确保你选择的新根密码是强大和安全的,并把它放在安全的地方。

我这样做是为了在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