【问题标题】:Regaining access to lost MySQL password for PHPMyAdmin on WAMP重新获得对 WAMP 上 PHPMyAdmin 丢失的 MySQL 密码的访问权限
【发布时间】:2015-05-18 04:39:23
【问题描述】:

我在 PHPMyAdmin 中更改了我的 'root'@'localhost' 帐户的密码(this person asking here),并在我的浏览器上将自己锁定在 PHPMyAdmin 之外。我正在使用 WAMP 2.5。

针对该问题提供的解决方案对我不起作用,因为很遗憾,我丢失了重新分配 root 的密码。

一些解决方案要求通过命令行(including this source)重置密码,我通过 Windows 命令行尝试过但没有成功,因为我现在没有权限:

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

ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'

WAMP 带有一个 MySQL 控制台,但我无法使用它,因为它会提示我输入密码,正如我所说,它不再有。

This video explains how to change passwords,它与上面 StackExchange 答案中的答案一致,但显然,我现在需要另一种方法来执行此操作,因为我不知道我会像那个人警告的那样失去访问权限。

如果这是一个新手类型的问题,我将不胜感激任何建议并道歉。我刚刚掌握了使用堆栈进行 Web 开发的技巧,通过 WAMP 配置对 LAN 站点的访问非常冒险,所以如果可能的话,我更喜欢不需要重新安装所有东西的东西。

编辑 1:继续尝试@RiggsFolly 的解决方案。虽然我可以访问 my.ini 文件,毫无问题地进行更改,并通过 WAMP 或其他方式毫无问题地重新启动 MySQL,但 skip-grant-tables 行没有生效,给我留下密码提示或无权执行任何操作。 (我在这里写了一个新问题来解决这个问题,因为我觉得这是一个不同的问题。)

编辑 2:我在 cmets 中尝试了@t.niese 提供的链接中的说明,当我将控制台设置为返回有关说明的反馈时,它报告了这一点,但未能更改任何东西:

C:\wamp\bin\mysql\mysql5.6.17\bin>mysqld --skip-grant-tables --console
[Note] Plugin 'FEDERATED' is disabled.
[Note] InnoDB: Using atomics to ref count buffer pool pages
[Note] InnoDB: The InnoDB memory heap is disabled
[Note] InnoDB: Mutexes and rw_locks use Windows interlocked functions
[Note] InnoDB: Compressed tables use zlib 1.2.3
[Note] InnoDB: Not using CPU crc32 instructions
[Note] InnoDB: Initializing buffer pool, size = 128.0M
[Note] InnoDB: Completed initialization of buffer pool
[ERROR] InnoDB: .\ibdatai can't be opened in read-write mode
[ERROR] InnoDB: The system tablespace must be writabe!
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting
[Note] /* List of plugins shutting down */

【问题讨论】:

  • 所以你已经完成了将凭据存储在文本文件中然后通过 mysqld 调用它的技巧?
  • 您是否遵循此说明B.5.4.1 How to Reset the Root Password
  • 嗨@Strawberry,我承认我不知道你提到的那个技巧。
  • @t.niese,我会在尝试所有建议时报告并编辑问题详细信息。谢谢。
  • @Strawberry,我确实尝试过,但我没有授予访问权限。

标签: mysql phpmyadmin wamp


【解决方案1】:

这里有一种方法可以让您非常简单地重置 MYSQL 的“root”密码。

停止mysql服务

wampmanager -> MySQL -> Service -> Stop Service

编辑 my.ini 文件

wampmanager -> MySQL -> my.ini

在 ini 文件中找到 [wampmysqld](32bit) 或 [wampmysqld64](64bit) 部分

在该部分标题之后直接添加这一行

skip-grant-tables

重启mysql服务。

wampmanager -> MySQL -> Service -> Start/Resume Service

打开 MySQL 控制台

wampmanager -> MySQL -> MySQL Console

现在我们要重置root用户的密码,当然这可以用来重置任何用户的密码。

mysql>命令提示符处输入以下2条命令,每条命令在行尾加一个分号,每行后按回车,向mysql发出命令。

预 MYSQL 5.7 版

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

发布 MYSQL 5.7 版更改了列名

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

请注意,更新可能会报告它已更新多行,因为可能有多个用户帐户的用户 ID 为“root”,每个帐户具有不同的域,即 127.0.0.1、localhost 和::1

现在在mysql命令promt中输入'quit'以存在mysql。

停止mysql服务

wampmanager -> MySQL -> Service -> Stop Service

编辑 my.ini 文件

wampmanager -> MySQL -> my.ini

在 ini 文件中找到 [wampmysqld](32bit) 或 [wampmysqld64](64bit) 部分

移除我们之前添加的skip-grant-tables参数。

不要将此参数留在 ini 文件中,因为它是一个巨大的安全漏洞。

重启mysql服务。

wampmanager -> MySQL -> Service -> Start/Resume Service

现在,如果您愿意,您可以设置 root 用户帐户,使其密码不会自动过期

wampmanager -> MySQL -> MySQL Console

然后运行这个查询

ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;

您现在应该可以使用用户 ID 'root' 和您刚刚为该用户设置的新密码登录 phpmyadmin。

【讨论】:

  • WAMPServer 2.5 64bit 中有一个小错误。也许这是你的问题。如果您安装了 WAMPServer 2.5 64 位,请检查 my.ini 是否有部分标题 [wampmysqld64] 而不是 `[wampmysqld]' 一旦更正,MySQL 将响应该部分中的更改。
  • 这解决了我的问题。唯一的变化是 mysql.user 表中的列名是 authentication_string 而不是密码。否则它就像一个魅力!谢谢
  • @RiggsFolly 你更改了表名而不是列名,不是吗?
  • 很奇怪,当我单独离开 mysql.user 并将 password=... 更改为 authentication_string=... SQL 更新语法是 UPDATE table_name SET columns,... WHERE .. .;
  • 我试过这个,但它对我不起作用。我到达ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER; 行,当它说它不能通过设置跳过授予表来做到这一点时。所以我更改了 skip-grant-tables 设置,重新回到 MySQL 控制台并尝试完成,但它告诉我我需要设置我的密码。
【解决方案2】:

以前的答案对我不起作用,因为 MySQL 控制台在按介绍后将我拒之门外。试试这个:

使用以下内容创建一个文件C:\wamp64\mysql-init.txt

UPDATE mysql.user SET Password=PASSWORD('1234') WHERE User='root';
FLUSH PRIVILEGES;

这会将用户 root 的密码重置为 1234。然后,在 Windows 命令行上运行下一个命令:

C:\wamp64\bin\mysql\mysql5.7.21\bin\mysqld.exe wampmysqld --init-file=C:\\wamp64\\mysql-init.txt

根据文件系统上 WAMP 的安装位置更改路径。

最后,重启 WAMP 服务。

【讨论】:

  • 当单击WAMPServer icon > MySQL > MySQL console 并遇到"Enter a valid username" 时,输入root,然后点击确定。然后当在 MySQL 控制台中遇到"Enter password:" 时,点击CTRL+C 并进入 MySQL 监视器并可以关注@RiggsFolly 的帖子。
猜你喜欢
  • 2021-04-15
  • 2010-11-28
  • 2020-09-13
  • 2012-06-21
  • 2017-10-21
  • 2016-09-21
  • 1970-01-01
  • 2011-05-27
  • 2013-03-19
相关资源
最近更新 更多