更改 MySQL root 用户密码

我一直在尝试重置我的 MySQL root 密码。我已经运行了 mysqld_safe --skip-grant-tables,更新了 root 密码,并检查了用户表以确保它在那里。

重新启动 MySQL 守护进程后,我尝试使用刚刚设置的新 root 密码登录,但仍然得到用户 “root” 错误的 Access denied。我还尝试完全删除和重新安装 MySQL (包括删除 my.cnf文件) ,但仍然不起作用。我应该如何解决这个问题?

459586 次浏览

我经常遇到的一个常见错误是,我忘记了 -p选项,所以一定要使用:

mysql -u root -p

我找到了!我改密码的时候忘记破解了。我使用这个查询来解决我的问题:

update user set password=PASSWORD('NEW PASSWORD') where user='root';

我忘记了 PASSWORD('NEW PASSWORD'),只是用纯文本输入了新密码。

看看 MySQL 参考手册:

首先登录 MySQL:

mysql -u root -p

然后在 Mysql提示符下运行:

UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';

然后

FLUSH PRIVILEGES;

更多信息请查看此页: 重设根密码: Unix 系统

更新:

对于 mysql 的某些版本,password 列不再可用,您将看到以下错误:

ERROR 1054 (42S22): Unknown column 'Password' in 'field list'

在这种情况下,使用 ALTER USER,如 下面的答案所示。

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mypass');
FLUSH PRIVILEGES;

你必须重新设置密码! Mac OS X (测试和工作)和 Ubuntu 的步骤:

停止 MySQL

sudo /usr/local/mysql/support-files/mysql.server stop

在安全模式下启动:

sudo mysqld_safe --skip-grant-tables

(上面一行是整个命令。)

这将是一个持续的命令,直到进程完成,所以打开另一个 shell/终端窗口并且不使用密码登录:

mysql -u root


mysql> UPDATE mysql.user SET Password=PASSWORD('password') WHERE User='root';

启动 MySQL

sudo /usr/local/mysql/support-files/mysql.server start

你的新密码是“ password”。

退出 WAMP 并停止所有 WAMP 服务。

打开 记事本,然后键入:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('');

然后将其保存到具有任意名称的 C: 驱动器中,如“ c:/example.txt”

现在进入你的“ wamp”文件夹: 湿地垃圾箱MysqlMysql(你的版本)→ 垃圾箱

在我的示例中,路径是“ C: wamp bin mysql mysql5.6.17 bin”。

现在复制路径,用(Ctrl + R)运行 CMD,然后键入“ CMD”(Enter)。

键入 cd,右键单击 CMD,然后粘贴路径(Enter)。

现在输入(mysqld --init-file=C:\\example.txt)没有括号和(Enter)。

然后重新启动电脑或打开 任务管理器并关闭 Mysqld.exe

启动 WAMP,您的密码将被删除..。

在 Ubuntu 上,

sudo dpkg-reconfigure mysql-server-5.5

用当前版本替换 5.5,您将被要求输入新的 root 密码。

请按照以下步骤操作。

  1. sudo service mysql stop
  2. sudo mysqld_safe --skip-grant-tables
  3. sudo service mysql start
  4. sudo mysql -u root
  5. use mysql;
  6. show tables;
  7. describe user;
  8. update user set authentication_string=password('1111') where user='root';
  9. FLUSH PRIVILEGES;

用密码 “1111”登录。

这是 WAMP v3.0.6及以上版本的最新答案。

在 MySQL 命令行客户端中,PhpMyAdmin或任何 MySQL GUI:

UPDATE mysql.user
SET authentication_string=PASSWORD('MyNewPass')
WHERE user='root';


FLUSH PRIVILEGES;

在 MySQL 版本5.7. x 中,MySQL 表中没有更多的密码字段。取而代之的是 认证 _ 字符串。(这是针对终端/CLI 的)

在 MySQL 命令行客户端中,PhpMyAdmin或任何 MySQL GUI:

UPDATE mysql.user SET authentication_string=PASSWORD('MyNewPass') WHERE user='root';


FLUSH PRIVILEGES;

对于 macOS 用户来说,如果忘记了 root 用户的密码,这就是我的回答是个不错的选择,但是还有一些小技巧:

如果您使用系统首选项来启动 MySQL 服务器端,只需

sudo mysqld_safe --skip-grant-tables

可能对你不起作用。

必须确保命令行参数与系统启动配置相同。

以下命令适用于我:

/usr/local/mysql/bin/mysqld --user=_mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --log-error=/usr/local/mysql/data/mysqld.local.err --pid-file=/usr/local/mysql/data/mysqld.local.pid --keyring-file-data=/usr/local/mysql/keyring/keyring --early-plugin-load=keyring_file=keyring_file.so --skip-grant-tables

你可以用

ps aux | grep mysql

检查你自己的。

在 MySQL 5.7中,密码被替换 使用‘ entication _ string’

update user set authentication_string=password('myfavpassword') where user='root';

对于 MySQL 5.7.6及更高版本:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

对于 MySQL 5.7.5及更早版本:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

使用 Mysqladmin命令行实用程序更改 MySQL 密码:

mysqladmin --user=root --password=oldpassword password "newpassword"

来源

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

您可以在 MySQL 文档中找到 重设根密码

我试过 KTA 的答案,但没用。

我正在使用 MySQL 8.0。

这在 MySQL 命令行客户端(可执行 mysql)中对我有效:

SET PASSWORD FOR 'root'@'localhost' = 'yourpassword'

我也搜索了一下也许有些答案确实适合某些情况,

我的情况是在 Ubuntu 18.04.2 LTS 系统上使用 Mysql 5.7:

(获得 root 权限)

$ sudo bash

(为 root db 用户设置密码 + 分步实现安全性)

# mysql_secure_installation

(通过密码而不是套接字访问 root 用户)

(+ 编辑: 显然你需要重新设置密码?)

(不要设置为“我的秘密密码”! ! !)

# mysql -u root


mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> set password for 'root'@'localhost' = PASSWORD('mySecretPassword');
mysql> FLUSH PRIVILEGES;
mysql> exit;


# service mysql restart

非常感谢 Zetacu(和 埃里克)的 这个绝妙的答案(经过几个小时的搜索...)

享受:-D

是的。

编辑(2020) :

这种方法不再工作了,见 这个问题为将来的参考..。

对于当前最新的 MySQL 版本(8.0.16) ,这些答案都不适合我。

在看了几个不同的答案并把它们结合在一起之后,我最终使用了这个有效的方法:

update user set authentication_string='test' where user='root';

这么多的评论,但是这个方法对我很有帮助:

sudo mysqladmin -u root password 'my password'

在我的例子中,安装后我得到的 MySQL 服务没有 root 用户的密码,我需要为我的安全设置密码。

在 MySQL 8.0.4 + 上

更新当前根用户:

select current_user();
set password = 'new_password';

更新其他用户:

set password for 'otherUser'@'localhost' = 'new_password';

在更新密码之前设置密码策略:

set global validate_password.policy = 0;
set password = 'new_password';
set password for 'otherUser'@'localhost' = 'new_password';

更新 root 密码的另一种/更好的方法:

mysql_secure_installation

您是否想坚持使用5.x 身份验证,以便仍然可以使用遗留应用程序?

my.cnf文件中

default_authentication_plugin = mysql_native_password

更新 :

set global validate_password.policy = 0;
alter user 'root'@'localhost' identified with mysql_native_password by 'new_password';

这对我很管用

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

第四章重置根密码: Windows 系统

  1. 在 Mac 上的开放系统首选项 MySQL

  2. 在 MySQL 的配置部分,检查 “初始化数据库”

  3. 更改提示中的密码。

    Initialize database

或者使用交互式配置:

sudo mysql_secure_installation

这是为 Mac 用户准备的。


在8.0.15(可能在那个版本之前) ,PASSWORD ()函数无法工作:

确保您已经先停止了 MySQL (以上)。 在安全模式下使用权限旁路运行服务器:

sudo mysqld_safe --skip-grant-tables

用 MySQL 路径替换 mysqld _ safe,就像我的情况一样

sudo /usr/local/mysql/bin/mysqld_safe –skip-grant-tables

那么你必须执行以下步骤。

mysql -u root


UPDATE mysql.user SET authentication_string=null WHERE User='root';
FLUSH PRIVILEGES;
exit;

然后

mysql -u root


ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';

在 MySQL8上,您需要指定密码哈希方法:

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'new-password';

对我来说,只有这些步骤才能帮助我在8.0.19版本上设置 root 密码:

mysql
SELECT user,authentication_string FROM mysql.user;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_pass_here';
FLUSH PRIVILEGES;
SELECT user,authentication_string FROM mysql.user;

如果您可以看到根用户的更改,那么它就可以工作。 无法设置 root 密码 MySQL Server

现在只要使用:

SET PASSWORD FOR <user> = '<plaintext_password>'

因为 'SET PASSWORD FOR <user> = PASSWORD('<plaintext_password>')'已被废弃,将在未来的版本中删除 请改用 SET PASSWORD FOR <user> = '<plaintext_password>'

更新于2021年4月12日上午2:22:07 UTC/GMT -5小时。

使用以下语句直接在 mysql 命令行中进行修改:

mysql> SET PASSWORD FOR'root'@'localhost' = PASSWORD('newpass');

终端进入 MySQL 的 bin 目录

cd /usr/local/mysql/bin

2. 打开 MySQL

mysql -u root -p

这时你可以使用你的默认密码

4. 此时在 MySQL 中执行操作

show databases;

5. 系统将提示您重置 root 用户密码。

那么如何重置根密码呢? 我检查了很多信息,但它没有生效。

包括使用 mysqladmin 命令在安全模式下输入以修改数据库: “ Mysqladmin -u root password"your-new-password"” 等等, 没用的。

正确的步骤如下:

1. 它仍然在 cd /usr/local/mysql/bin/目录中

2. sudo su

输入后,您将被要求输入您的计算机密码。

输入后,不会显示任何内容。输入后,请按 Enter

然后按回车键

3. 交叉授权验证

sh-3.2# ./mysqld_safe --skip-grant-tables &

如果命令的执行已停止,并且此时已完成执行,

直接按 Enter,然后退出到退出:

sh-3.2# exit

此时重新输入 MySQL,no-p 参数,没有密码

./mysql -u root

选择数据库 MySQL (这里 MySQL 指的是 MySQL 中的数据库,

MySQL 中还有其他数据库,可以通过 show 数据库查看;)

use mysql;

6. 更新数据库表中根用户的密码:

update user set authentication_string=‘123456’ where User='root';

注意: 这里的 password 字段是 authentication_string,

而不是互联网上流传的 password

据估计,MySQL 是后来更新的。

重新输入 MySQL 并使用刚才设置的密码,可以吗?

因为您刚刚设置绕过了授权身份验证,

你可以不用密码直接登录 MySQL。

我愚蠢的方法是重新启动计算机,再次用密码登录到 MySQL,看看修改是否有效;

2022年更新

我已经尝试了一些答案,但对我有效的是下面这个

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

强力 DM提供

注意: 我正在使用用于 Windows10的 MySql 客户端,并且作为 root用户登录。

重置 root 密码。

  1. sudo mysql --defaults-file=/etc/mysql/debian.cnf

  2. alter user 'root'@'localhost' identified with mysql_native_password by 'new_password';