我实际上丢失了我的 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 吗?
正如 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';
只需使用 sudo 登录 mysql
Sudo mysql
然后
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';
exit;
测试一下
mysql -u root -p
尝试这个:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newPasswd';
第 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
我正在使用 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
如果您在 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 找到这个
使用 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');
不定期副业成功案例分享
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';
。不过不知道为什么。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