ChatGPT解决这个技术问题 Extra ChatGPT

MySQL root 密码更改

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

重新启动 MySQL 守护程序后,我尝试使用刚刚设置的新 root 密码登录,但仍因用户“root”错误而获得 Access denied。我还尝试完全删除并重新安装 MySQL(包括删除 my.cnf 文件),但仍然没有运气。接下来我能做什么?

请发布您的实际错误
如果您未锁定 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somepassword'); 是最安全的。
服务器版本:8.0.20-0ubuntu0.20.04.1 (Ubuntu) ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'PASSWORD("1")' 附近使用正确的语法 SET PASSWORD FOR 'root'@'localhost' = PASSWORD("somepassword");
Ubuntu 20.04 具有 root 用户的身份验证插件为:auth_socket。该插件不支持密码。下面有一个答案是关于它的。解决方案是在一个语句中更改插件和密码:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Password'; “WITH mysql_native_password”部分更改了插件。

T
T.J. Crowder
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mypass');
FLUSH PRIVILEGES;

这在 5.7 中对我有用,而接受的答案不是。
如果您的 MySQL 根密码设置为空白,这是正确的解决方案。
> 更新 mysql.user SET authentication_string=PASSWORD('MyNewPass') WHERE user='root'; >冲洗特权;在 MySQL 5.7.x 版本中,mysql 表中不再有密码字段。它已替换为 authentication_string。
这给了我一个确定,但实际上什么都不做
它需要一个额外的命令 FLUSH PRIVILEGES 才能使更改生效,而无需重新启动数据库服务器。
M
Matthijs
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

您可以在 MySQL 文档中找到 Resetting the Root Password


此查询对我有用,但新密码无效(访问被拒绝)。它只是在我重新创建 root 用户 askubuntu.com/a/784347/160368 后才开始工作。
在 MySQL 8.0.20 上为我工作,并在使用此命令初始化数据文件夹后 mysqld --initialize --console
a
andromeda

从 MySQL 参考手册中查看:

首先登录MySQL:

mysql -u root -p

然后在 mysql 提示符下,运行:

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

然后

FLUSH PRIVILEGES;

查看此页面了解更多信息:Resetting the Root Password: Unix Systems

更新:

对于某些版本的 mysql,密码列不再可用,您将收到此错误:

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

在这种情况下,请使用 ALTER USER,如 the answer below 所示。


更新用户密码时,出现错误“您正在使用安全更新模式,并且您尝试更新没有 WHERE 使用 KEY 列的表...”。有关如何解决此错误的信息,请参阅 stackoverflow.com/questions/11448068/…
ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '('MyNewPass') WHERE User='root'' 附近使用正确的语法
PASSWORD 功能似乎已被删除。有关替代方案,请参阅此线程stackoverflow.com/questions/52320576/…
P
Peter Mortensen

请按照以下步骤操作。

sudo service mysql stop sudo mysqld_safe --skip-grant-tables sudo service mysql start sudo mysql -u root use mysql;显示表格;描述用户;更新用户集 authentication_string=password('1111') where user='root';同花顺特权;

使用密码“1111”登录。


flush privileges 作为最后一步很重要。
这真的是用屁股完成的。我做了所有的教程来重置密码。一切正常,除了我用新密码登录时,它不起作用。
如果 mysqld 没有启动并且像这样的消息 mysqld 守护进程与来自 /var/lib/mysql 的数据库 来自 pid 文件 /var/run/mysqld/mysqld.pid 的 mysqld_safe mysqld 结束,请执行以下操作: mkdir /var/run/mysqld chomod 777 /var /run/mysqld 一切从乞讨开始
第 2 步 - 我建议使用:sudo mysqld_safe --skip-grant-tables --skip-networking & 运行以 & 结尾的命令很重要,以便它在后台运行。传递 –skip-networking 选项以跳过阻止其他客户端连接到 MySQL 服务器的网络。 Source
chmod 777 = "设置权限,(U)ser / owner 可以读,可以写,可以执行。(G)roup 可以读,可以写,可以执行。(O)thers 可以读,可以写并且可以执行。”.那有多安全?
P
Peter Mortensen

这是 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 表中不再有密码字段。它已替换为 authentication_string。 (这适用于终端/CLI。)

在 MySQL 命令行客户端、phpMyAdmin 或任何 MySQL GUI 中:

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

FLUSH PRIVILEGES;

这个答案是少数说应该更新 mysql.user 表的人之一。请注意,如果您使用任何其他数据库(由 use 命令设置),您将收到表 user 不存在的错误。谢谢你,先生!
为我工作。我正在使用 5.7.x ,没有 mysql.user 表。其他答案已过时
乐意效劳!!
在 MySQL 8.0+ 中,函数 PASSWORD 不能存在。请参阅stackoverflow.com/questions/52320576/…。因此,您可以使用 CONCAT('*', UPPER(SHA1(UNHEX(SHA1('mypass'))))) 而不是 PASSWORD('mypass'),它与旧的 PASSWORD 功能一样有效。
@FlameStorm 这可以节省一天的时间。我认为你应该写一个答案。
M
MadBoomy

我也四处搜索,可能有些答案适合某些情况,

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

(获取root权限)

$ sudo bash

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

# mysql_secure_installation

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

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

(不要将其设置为“mySecretPassword”!!!)

# 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(和 erich)对 this excellent answer(搜索几个小时后...)

享受:-D

S。

编辑(2020):

此方法不再有效,请参阅 this question 以供将来参考...


这是迄今为止最好的答案,至少对于 mysql server 5.7 是这样。
最好的答案。谢谢你。
mysql_secure_installation 在全新安装后为我工作。
P
Peter Mortensen

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

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

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


确保您回来并接受您的答案,以便其他人看到解决方案
如果您注意的话,dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html 显示了如何使用 --init-file= 执行此操作。
知道为什么当我使用相同的命令时,会返回以下错误吗?错误 1054 (42S22):“字段列表”中的未知列“密码”
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '('NEW PASSWORD') where user='root'' 附近使用正确的语法
我也得到这个错误。语法错误。请添加解决方案。
P
Peter Mortensen

在 MySQL 8.0.4+ 上

要更新当前的 root 用户:

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';

H
Hokascha

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

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

P
Peter Mortensen

这对我有用 -

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

Chapter 4 Resetting the Root Password: Windows Systems


ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“IDENTIFIED BY 'MyNewPass'”附近使用正确的语法
刚刚通过 CLI 在 sql 中复制了准确的内容:o
当然,sshed到我的服务器+ mysql -u root -p 到mysql cli
E
Eagle_Eye

对于 MySQL 5.7.6 及更高版本:

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

对于 MySQL 5.7.5 及更早版本:

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

P
Peter Mortensen

对我来说,只有这些步骤可以帮助我在 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 用户的更改,那么它可以工作。来源:Can't set root password MySQL Server


我不知道为什么要为 MySQL root 用户设置密码必须如此晦涩难懂,但这适用于 Ubuntu 21、MySQL 8。谢谢 Sergey。
这是对 mysql 8 的许多问题的许多答案的唯一答案
P
Peter Mortensen

你必须重设密码! 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

您的新密码是“密码”。


我收到一条消息:未选择数据库
P
Peter Mortensen

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

在查看了几个不同的答案并将它们组合在一起之后,这就是我最终使用的方法:

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

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 然后 [Warning] [MY-010319] [Server] Found invalid password for user: 'root@localhost'; Ignoring user
D
Darush

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

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

Source


P
Peter Mortensen

我尝试了 the answer from kta,但它对我不起作用。

我正在使用 MySQL 8.0。

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

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


请为您的代码添加一些解释 - 这究竟如何解决一个七年前的问题?
看起来语法在七年里发生了变化。它不是用 PASSWORD() dev.mysql.com/doc/refman/8.0/en/set-password.html 包装密码
密码哈希应该是一个 41 位的十六进制数
P
Peter Mortensen

这适用于 Mac 用户。

在 8.0.15(可能已经在该版本之前)上,PASSWORD() 函数不起作用。你所要做的:

确保您首先停止了 MySQL(上图)。以绕过权限的安全模式运行服务器:

sudo mysqld_safe --skip-grant-tables

将此 mysqld_safe 替换为您的 MySQL 路径,就像在我的情况下一样

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';

这在 Ubuntu 21.04、MySQL 8 上对我有用
P
Peter Mortensen

在 MySQL 5.7 中,密码被替换为“authentication_string”。利用

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

P
Peter Mortensen

这么多评论,但我得到了这种方法的帮助:

sudo mysqladmin -u root password 'my password'

在我的情况下,安装后我得到了没有 root 用户密码的 MySQL 服务,我需要为我的安全设置密码。


它可用于在不知道旧密码的情况下重置 mysql root 用户密码。但请确保没有人可以访问您的系统日志,因为此密码已记录:Aug 07 16:21:55 ubuntupc sudo[93250]: user : TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/usr/bin/mysqladmin -u root password 'my password'
P
Peter Mortensen

我不时遇到的一个常见错误是我忘记了 -p 选项,因此请务必使用:

mysql -u root -p

V
Vittore Marcas

现在只需使用:

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

因为 'SET PASSWORD FOR <user> = PASSWORD('<plaintext_password>')' 已弃用并将在未来版本中删除。(2021 年 4 月 12 日警告)请改用 SET PASSWORD FOR <user> = '<plaintext_password>'

更新 04/12 2021 AM 2:22:07 UTC/GMT -5 小时。

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

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

或者1.终端进入MySQL的bin目录

cd /usr/local/mysql/bin

2.打开MySQL

mysql -u root -p

3.此时您可以使用您的默认密码

4.此时在MySQL中执行操作

show databases;

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

那么如何重置root密码呢?我查了很多资料,但没有生效。

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

正确的步骤如下:

1.它还在cd /usr/local/mysql/bin/目录下

2.sudo su

输入后,系统会要求您输入计算机密码。

当你输入它时,什么都没有显示。输入后按回车

然后按回车

3.通过授权验证

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

如果命令的执行被停止,此时执行已经完成,

直接回车,然后exit退出:

sh-3.2# exit

4.此时重新进入MySQL,无-p参数,无密码

./mysql -u root

5.选择数据库MySQL(这里的MySQL是指MySQL中的一个数据库,

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

use mysql;

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

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

注意:这里的密码字段是authentication_string

不是在 Internet 上流传的 password

估计是MySQL后来更新了。

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

因为你刚刚设置了绕过授权认证,

无需密码即可直接登录MySQL。

我的笨办法是重启电脑,再次用密码登录MySQL,看看修改是否生效;


A
Andy K

2022 年更新

我已经尝试了一些答案,但对我有用的是以下

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

StrongDM 提供

注意:我正在使用适用于 Windows 10 的 MySql 客户端,并且还以 root 用户身份登录。


s
shilovk

或者只是使用交互式配置:

sudo mysql_secure_installation

P
Peter Mortensen

对于 macOS 用户,如果您忘记了 root 密码,thusharaK's answer 很好,但还有一些技巧:

如果您使用系统偏好来启动 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

检查你自己的。


M
MohitGhodasara

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

打开 Notepad,然后键入:

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

然后用任何名称将其保存到 C: 驱动器... 像这样 "c:/example.txt"

现在转到您的“wamp”文件夹:wamp → bin → mysql → mysql (your version) → bin

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

现在复制您的路径,使用 (Ctrl + R) 运行 CMD,然后键入“cmd”(回车)。

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

现在键入不带大括号的 (mysqld --init-file=C:\\example.txt) 和 (Enter)。

然后重新启动 PC 或打开 Task Manager 并杀死 mysqld.exe

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


在 Windows 上,我认为(未说明)。
P
Patel Pratik

重置根密码。

sudo mysql --defaults-file=/etc/mysql/debian.cnf alter user 'root'@'localhost' 标识为 mysql_native_password by 'new_password';


P
Peter Mortensen

在 Ubuntu 上,

sudo dpkg-reconfigure mysql-server-5.5

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


在什么操作系统中?这是没有意义的。
P
Peter Mortensen

在 Mac 上打开系统首选项 MySQL。在 MySQL 的配置部分,检查“初始化数据库”。在提示中更改密码。