ChatGPT解决这个技术问题 Extra ChatGPT

如何在 MySQL 8.0.11 中重置 root 密码?

我实际上丢失了我的 root 密码,我需要更改它。我按照以下步骤操作:

步骤#1:停止 MySQL 服务器进程。步骤#2:使用--skip-grant-tables选项启动MySQL(mysqld)服务器/守护进程,这样它就不会提示输入密码。第 3 步:以 root 用户身份连接到 MySQL 服务器。

我们可以在这些网站上找到:https://www.howtoforge.com/setting-changing-resetting-mysql-root-passwords#recover-mysql-root-password

mysql> use mysql;
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD("TOOR");
mysql> flush privileges;
mysql> quit

第一个错误,所以我尝试了:

mysql> use mysql;
mysql> update user set password=PASSWORD("TOOR") where User='root';
mysql> flush privileges;
mysql> quit

总是同样的错误说:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near '("TOO
R") WHERE User='root'' at line 1

我该如何解决这个问题?

关键字 TOOR 似乎有问题,但我看不到您在哪里使用过它。您能向我们展示您正在运行的实际 SQL 吗?
第一个错误是什么?
我按照视频中的步骤更改了我的一台服务器中的密码 youtu.be/gFo5DV_pSg8

J
Jack Chern

正如 here 所说:

这个函数在 MySQL 8.0.11 中被移除

1.如果您在 mysqld_safe 中处于 skip-grant-tables 模式:

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

然后,在终端:

mysql -u root

在mysql中:

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

2.不在mysql中的skip-grant-tables模式:

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

对于在 SKIP-GRANT-TABLES 模式下 - sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables 。适用于 8.0.1
我得到了 ERROR 1146 (42S02): Table 'mysql.role_edges' doesn't exist,所以在我将 root 密码设置为 null 之后,我必须执行 mysql_upgrade -u root 才能使其正常工作。
我必须使用 mysql_native_password 而不是 caching_sha2_password 才能工作:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpasswd';。不过不知道为什么。
@dvlcube 在 Mysql 8.0.21-0ubuntu0.20.04.4 中为我工作
我在命令的顺序上遇到了问题,但在 ubuntu 20 中对我有用:sudo service mysql stop sudo mysqld_safe --skip-grant-tables & 然后用 mysql -u root UPDATE mysql.user SET authentication_string=null WHERE User='root'; flush_privileges; ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd'; exit; ps -fea | grep mysqld sudo kill -9 [pid from previous command] 打开 mysql 控制台,最后是 sudo service mysql stop
M
Mahdi Raad

只需使用 sudo 登录 mysql

Sudo mysql

然后

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

测试一下

mysql -u root -p

这就像一个魅力!谢谢,我不需要刷新或重新启动
请注意,使用此密码算法会破坏 Java 应用程序并出现错误“不允许检索公钥”。最好使用好的 ol' 本机密码算法 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password;或者您可能会被迫更改应用程序设置
其他地方有很多令人困惑的答案。这是一个效果最好的。
我按照实际的官方 MySQL 8 说明浪费了很多时间,这就是有效的......谢谢
节省了我很多时间!
W
William Desportes

尝试这个:

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

此语句在添加 skip-grant-tables 之前和该用户获取之后不可用:错误 1290 (HY000):MySQL 服务器正在使用 --skip-grant-tables 选项运行,因此无法执行此语句
A
Ashit

第 1 步:在您的根目录中创建一个新文件(例如 C:) 第 2 步:写入此 ALTER USER 'root'@'localhost' IDENTIFIED BY 'abc' 并保存第 3 步:如果您的 Mysql 服务已经在运行,请停止这个并打开你的 CMD 第 4 步:转到你的 Mysql 安装目录(例如 C:\Program Files\MySQL\MySQL Server 8.0\bin)并输入这个命令

mysql --init-file=C:/init.sql

第 5 步:执行此命令,一切顺利 :)

有关更多说明,请参阅此视频:https://www.youtube.com/watch?v=LsdV-7dFOhk


G
Greg Long

我正在使用 8.0.23 但有多个问题。以下是问题和解决方案。尽管我遇到了问题,但我遵循了 mysql 文档并能够进行重置。我提供了我的解决方案和一个示例重置脚本。

问题

以下其他人概述的步骤有各种失败用户运行守护进程是 mysql,我无法 su 到 mysql id 得到错误无法创建锁定文件 /var/run/mysqld/mysqlx.sock.lock,mysqld 文件夹被 mysql 服务删除.运行后不得不杀死-9 mysql进程,非常丑陋

解决方案

使用 https://dev.mysql.com/doc/refman/8.0/en/resetting-permissions.html 中的步骤运行 mysql 命令时使用 --user=mysql 创建文件夹 /var/run/mysqld 和 chown 为 mysql:mysql在运行 comamnds 之前使用 mysqladmin shutdown 在启动 sql 后停止它以进行重置

在脚本中,我将 root 重置为 New%Password

# create password reset file
cat << EOF >/tmp/deleteme
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'New%Password';
EOF
# create /var/run/mysqld
mkdir /var/run/mysqld
chown mysql:mysql /var/run/mysqld
# start mysqld and run the command
mysqld --init-file=/tmp/deleteme --user=mysql &
# wait for sql to start
while [ ! -f /var/run/mysqld/mysqlx.sock.lock ]; do sleep 1; done
sleep 3
# stop sql
mysqladmin -u root -pNew%Password shutdown
while [ -f /var/run/mysqld/mysqlx.sock.lock ]; do sleep 1; done
#clean up temp file
rm /tmp/deleteme

P
Pishang Ujeniya

如果您在 Windows 上,您可以尝试以下步骤

在 Windows 中重置 MySQL 8.0 root 密码

从服务中停止 MySQL 8.0 服务转到路径 C:\Program Files\MySQL\MySQL Server 8.0\bin 并打开 cmd 运行 mysqld --console --skip-grant-tables --shared-memory 在同一路径中打开新的 cmd运行以下命令 mysql -u root select authentication_string,host from mysql.user where user='root'; UPDATE mysql.user SET authentication_string='' WHERE user='root';现在关闭两个cmd。尝试启动 MySQL 8.0 服务。使用用户名作为 root 和密码作为空白连接。从用户管理中更改密码。

https://gist.github.com/pishangujeniya/0f839d11a7e692dadc49821c274a2394 找到这个


M
Mark Rotteveel

使用 SQLYog 你可以执行命令

用户创建 CREATE USER 'tester'@'localhost' IDENTIFIED BY 'Pass123#d'

授权 GRANT ALL PRIVILEGES ON sakila.* TO 'tester'@'localhost'

在 MySQL 8.0 中更改密码 ALTER USER 'tester'@'localhost' IDENTIFIED BY 'Pass123#d';或者如果你知道 authentication_string 直接将其设置为更新 UPDATE mysql.user SET authentication_string='*F9B62579F38BE95639ACB009D79427F2D617158F' WHERE USER='root'

在较低版本的 mysql 中更改密码 GRANT USAGE ON *.\* TO 'tester'@'localhost' IDENTIFIED BY 'Pass123#d' SET PASSWORD FOR 'tester'@'localhost' = PASSWORD('Pass123#d');


你能进一步解释一下吗?什么是“SQLYog”?如果无法以 root 身份登录,这一切如何运作?