ret*_*tif 8 mysql windows password-recovery mysql-5.7
我只想在我的 PC(使用 Windows 8.1 x64)上安装 MySQL 服务器,没有 Workbench 或其他东西。所以我.zip从dev.mysql.com/downloads下载了存档。这是 x86_64 版本 5.7.9 (MySQL Community Server (GPL)) 上的 Win64 下载。
我将它安装为 Windows 服务,但没有mysql数据库,只有information_schema. 所以我执行了这个:
mysql_upgrade.exe --upgrade-system-tables
Run Code Online (Sandbox Code Playgroud)
并mysql创建了数据库。但是随之而来的是root用户发生了一些事情,因为我无法再访问mysql了。
所以我决定重置这个突然出现的密码(因为我之前没有它)。我在官方手册中建立了以下解决方案,我是这样启动服务器的:
mysqld.exe --skip-grant-tables --console
Run Code Online (Sandbox Code Playgroud)
然后我mysql没有密码打开:
mysql.exe –u root
Run Code Online (Sandbox Code Playgroud)
然后尝试重置root密码:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD(‘passhere');
Run Code Online (Sandbox Code Playgroud)
但我收到了这个错误:
错误 1131 (42000):您以匿名用户身份使用 MySQL,不允许匿名用户更改密码”。
这是什么?我怎么匿名了?所有命令都在cmd.exe管理员下执行。
在这种情况下,我应该怎么做才能重置 root 密码?
更新 1:我试图检查当前用户:
SELECT USER(), CURRENT_USER();
Run Code Online (Sandbox Code Playgroud)
这给出了:
+--------+----------------+
| USER() | CURRENT_USER() |
+--------+----------------+
| root@ | @ |
+--------+----------------+
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为我是这样开始的mysql.exe -u root。
然后我检查了用户表:
SELECT user FROM mysql.user;
Run Code Online (Sandbox Code Playgroud)
这给出了:
+-----------+
| user |
+-----------+
| mysql.sys |
+-----------+
Run Code Online (Sandbox Code Playgroud)
这就更奇怪了。也没有密码字段:
SELECT user, password FROM mysql.user;
Run Code Online (Sandbox Code Playgroud)
错误 1054 (42S22):“字段列表”中的“密码”列未知
所以我不能更改它的密码。
而且我无法创建新用户:
CREATE USER 'root'@'localhost' IDENTIFIED BY 'passhere';
Run Code Online (Sandbox Code Playgroud)
ERROR 1290 (HY000): MySQL 服务器正在使用该
--skip-grant-tables选项运行,因此无法执行此语句
现在我迷路了。
更新 2:我想,我从一开始就做错了一切。显然,我mysqld.exe --initialize以某种方式错过了一个命令。
所以,这就是我从 .zip-archive 安装 MySQL 的方式,感谢@RolandoMySQLDBA:
my.ini.mysqld.exe --initialize,从.err文件中获取临时密码。将 MySQL 安装为服务并运行它
mysqld --install MySQL --defaults-file="d:/path/to/mysql/my.ini"
Run Code Online (Sandbox Code Playgroud)mysql -u root -p使用临时密码连接到它。
更改临时密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NEWPASSWORD';
Run Code Online (Sandbox Code Playgroud)既然你开始mysqld用--skip-赠款表,你不能执行任何标准的GRANT,REVOKE或SET PASSWORD命令。尽管如此,您可以root@localhost按如下方式更改密码:
UPDATE mysql.user SET password=PASSWORD(‘passhere') WHERE user='root' and host='localhost';
Run Code Online (Sandbox Code Playgroud)
然后,重新启动 mysqld,您就可以重新开始工作了。
至于你是匿名的,如果你现在登录并运行
SELECT USER() HowYouAttemptedToLogin,CURRENT_USER() HowYouWereAllowedToLogin;
Run Code Online (Sandbox Code Playgroud)
您会注意到HowYouWereAllowedToLogin将有一个空白的用户名和一些主机。
试一试 !!!
MySQL 5.7 中不再存在称为passwordin的列mysql.user。
它被重命名authentication_string。
你应该做的是运行
mysqld --initialize
Run Code Online (Sandbox Code Playgroud)
这将为您创建数据文件夹。
root@localhost 被分配了一个临时密码,该密码在以以下日期时间和字符串开头的错误文件中可见
2015-11-17T20:56:02.175980Z 1 [Note] A temporary password is generated for root@localhost:
Run Code Online (Sandbox Code Playgroud)
你可以用它登录然后运行 ALTER USER
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
Run Code Online (Sandbox Code Playgroud)
请参阅有关SET PASSWORD的 MySQL 5.7 文档
| 归档时间: |
|
| 查看次数: |
4669 次 |
| 最近记录: |