从.zip安装MySQL for Windows并重置root密码


8

我想在我的PC(使用Windows 8.1 x64)上仅安装MySQL服务器,而没有Workbench或其他工具。所以我.zipdev.mysql.com/downloads下载了归档文件。它是x86_64版本5.7.9(MySQL Community Server(GPL))上Win64的下载。

我将其安装为Windows服务,但没有mysql数据库information_schema。所以我执行了这个:

mysql_upgrade.exe --upgrade-system-tables

mysql创建了数据库。但是与此同时,root用户也发生了一些事情,因为我无法再访问mysql了。

因此,我决定重设此突然出现的密码(因为在此之前我没有密码)。我在官方手册中建立了以下解决方案,我像这样启动了服务器:

mysqld.exe --skip-grant-tables --console

然后我mysql没有密码就打开了:

mysql.exe u root

然后尝试重置根密码:

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

但是我得到了这个错误:

错误1131(42000):您将MySQL作为匿名用户使用,不允许匿名用户更改密码”。

这是什么?我如何匿名?所有命令均在cmd.exe管理员下执行。

在这种情况下,我应该怎么做才能重置根密码?

更新1:我尝试检查当前用户:

SELECT USER(), CURRENT_USER();

这给出了:

+--------+----------------+
| USER() | CURRENT_USER() |
+--------+----------------+
| root@  | @              |
+--------+----------------+

太奇怪了,因为我这样开始mysql.exe -u root

然后我检查了用户表:

SELECT user FROM mysql.user;

这给出了:

+-----------+
| user      |
+-----------+
| mysql.sys |
+-----------+

那就更奇怪了。也没有密码字段:

SELECT user, password FROM mysql.user;

错误1054(42S22):“字段列表”中的未知列“密码”

因此,我无法更改其密码。

而且我无法创建新用户:

CREATE USER 'root'@'localhost' IDENTIFIED BY 'passhere';

错误1290(HY000):MySQL服务器正在使用该--skip-grant-tables选项运行,因此它无法执行此语句

现在我迷路了。

更新2:我想,我从一开始就做错了一切。显然,我mysqld.exe --initialize以某种方式错过了一个命令。

因此,这就是我通过.zip-archive安装MySQL的方法,这要感谢@RolandoMySQLDBA

  1. 解压缩存档,准备my.ini
  2. 执行mysqld.exe --initialize,从.err文件中获取临时密码。
  3. 将MySQL作为服务安装并运行

    mysqld --install MySQL --defaults-file="d:/path/to/mysql/my.ini"
  4. mysql -u root -p使用临时密码连接到它。

  5. 更改临时密码:

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

Answers:


6

既然你开始mysqld--skip-赠款表,你不能执行任何标准的GRANTREVOKESET PASSWORD命令。尽管如此,您可以更改密码,root@localhost如下所示:

UPDATE mysql.user SET password=PASSWORD(‘passhere') WHERE user='root' and host='localhost';

然后,重新启动mysqld,您又恢复了业务。

至于您是匿名的,如果您现在登录并运行

SELECT USER() HowYouAttemptedToLogin,CURRENT_USER() HowYouWereAllowedToLogin;

您会注意到,HowYouWereAllowedToLogin用户名和主机将为空。

试试看 !!!

更新2015-11-17 16:24 EST

MySQL 5.7中不再存在称为passwordin 的列mysql.user

它已重命名authentication_string

正确的方法

您应该做的是运行

mysqld --initialize

那将为您创建数据文件夹。

已为root @ localhost分配了一个临时密码,该密码在错误文件中以以下日期时间和字符串开头

2015-11-17T20:56:02.175980Z 1 [Note] A temporary password is generated for root@localhost:

您可以登录并运行 ALTER USER

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

请参阅SET PASSWORD上的MySQL 5.7文档


感谢您的回复。是的,我知道有这样的限制。但是这些是MySQL手册中的步骤。并且我尝试按照您的指示进行操作,请参阅我的修改后问题。
retif

mysql.user中不再有密码列,因此该方法将不再起作用。但是,当前其他方法(通过--skip-grant-tables和--init-file)也已损坏,因此无法在5.7.9 atm中重置密码。
Mike Lischke,2015年

@MikeLischke谢谢。我需要删除此答案
RolandoMySQLDBA 2015年

@MikeLischke我刚刚意识到该password列已重命名authentication_string
RolandoMySQLDBA 2015年

好吧,实际上直接修改用户表已经成为过去,并且会消失,但是即使使用标准命令(例如alter user)也无法使用,因为当前它们被拒绝,因为您被认为是匿名用户,这是不允许的发出这些命令(如果您使用--skip-grant-tables或--init-file启动服务器)。但是,--initialize选项是重置根pw的正确方法。
Mike Lischke 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.