我丢失了我的 MySQL 的用户名和密码。如何检索出来?

2008-08-07 03:54:14
问题评论:

回答:

停止 MySQL 进程。

--授予的跳过表选项处理 MySQL 的开始。

使用-u 根选项启动 MySQL 控制台客户端。

列出所有用户;

SELECT * FROM mysql.user;

重置密码;

UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';

请不要忘记

停止 MySQL 进程

正常启动 MySQL 进程 (即不带--跳过授权表格选项)

当您已完成。否则,数据库的安全可能会受到威胁。

认为无需重新启动该守护进程重置普通用户。只是"刷新权限;"之后更新的用户密码。-跳过授予的表格只有根用户密码重置的需要 !这将通常不被推荐为标准用户重置。

使用dpkg-reconfigure mysql-server-5.5命令重置根 MySQL 密码的意义是什么?

@Xenph,为什么说"启动 MySQL 控制台客户端根-u 选项与"?没有没有必要做,根本当启动服务器时,将忽略-u --skip-grant-tables.

在 MySQL 5.7。 *, mysql.userpassword没有列,改为使用authentication_string

遗憾的是,您的用户密码是有史以来。它如果不知道是不可逆的单向哈希值与散列。我建议转到与上面的 Xenph Yan,只需创建一个新。

此外可用于下面的过程从手动重置 Windows 上所有 MySQL帐户的密码︰

  1. 以管理员身份登录到您的系统。
  2. 如果它正在运行,请停止 MySQL 服务器。作为 Windows 服务运行的服务器,请转到服务管理器中︰

「 开始 」 菜单-> 控件面板-> 管理工具-> 服务

然后在列表中,找到 MySQL 的服务并将其停止。如果您的服务器不作为服务运行,您可能需要使用任务管理器强制其停止。

  1. 创建一个文本文件,并将以下语句放在它。替换为要使用的密码密码。

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

    更新刷新语句每个必须写在一行上。UPDATE语句将所有现有根帐户,密码重置和刷新语句告诉服务器重新授予表加载到内存。

  2. 保存该文件。对于此示例,该文件将被命名为C:mysql-init.txt。
  3. 打开一个控制台窗口以进入命令提示符︰

    「 开始 」 菜单-> 运行 cmd->

  4. 使用特殊— init 文件选项启动 MySQL 服务器︰

    C:> C:mysqlinmysqld-nt --init-file = C:mysql-init.txt
    

    如果您安装 MySQL C:mysql以外的位置,据此调整命令。

    服务器将执行由启动时更改每个帐户密码— init 文件选项指定的文件的内容。

    您还可以添加-控制台如果您希望显示在控制台窗口中,而不是在日志文件服务器输出到命令选项。

    如果安装 MySQL 使用 MySQL 安装向导时,您可能需要指定-默认值文件选项︰

    C:> "C:Program FilesMySQLMySQL Server 5.0inmysqld-nt.exe" --defaults-file="C:Program FilesMySQLMySQL Server 5.0my.ini" --init-file=C:mysql-init.txt
    

    相应的-默认值文件可以使用服务管理器查找设置︰

    「 开始 」 菜单-> 控件面板-> 管理工具-> 服务

    列表中找到 MySQL 服务,右键单击它,然后选择属性选项。给字段的可执行文件的路径包含-默认值文件设置。

  5. 服务器已成功启动后,请删除C:mysql-init.txt.
  6. 停止 MySQL 服务器,然后再次重新启动它以正常模式。作为服务运行的服务器时,请从 Windows 服务窗口中启动它。如果手动启动服务器,请使用您通常使用的任何命令。

您现在应该能够连接到 MySQL root 使用新密码。

@Jake 的回答,谢谢。我想要放弃它的拇指,但对于某些原因 stackoverflow 不允许我这样做因为声誉点。解释"遗憾的是您的用户密码是有史以来。它如果不知道是不可逆的单向哈希值与散列"是我理解为什么一切我在 google 上读取只给了我方向更改的关键密码。很好的说明是比单独的说明更为精辟。

+ 1 的实际应答问题。

@ 杰克我找不到 mysql 在服务列表中请告诉我怎么办?

为什么是您而不是mysqld mysqld-nt?

顺便说一下,有一个非文件选项: --init-file吗?(类似于 mysql.exe 的--execute命令。)

改进的最有用的答案︰

1] 无需重新启动 mysql 服务器
MySQL 服务器连接到网络的 2] 的安全问题

没有必要重新启动 MySQL 服务器。

密码更新 mysql.user 语句更改后,请使用FLUSH PRIVILEGES;

刷新报表指示服务器重新授予表加载到内存,以便它通知更改的密码。

--skip-grant-options允许连接不使用密码和使用所有权限的任何人。因为这是不安全的您可能希望

使用-授予的跳过表-跳过网络以阻止远程客户端连接。

从︰ 参考︰重置权限一般

重大改进。

@trusktr 感谢您

@ThinkingMonkey,不这假定当前登录的用户有权修改mysql.user虽然通常不是这样。

虽然您无法直接恢复 MySQL 密码暴力破解没有,可能有另一种方法-如果您使用 MySQL 工作台连接到数据库,并已保存到"保险存储"凭据,您就是黄金。

在 Windows 上, %APPDATA%MySQLWorkbenchworkbench_user_data.dat - CryptProtectData与加密 (如果没有任何其他的熵) 中存储的凭据。解密是容易 peasy:

std::vector<unsigned char> decrypt(BYTE *input, size_t length) {
    DATA_BLOB inblob { length, input };
    DATA_BLOB outblob;

    if (!CryptUnprotectData(&inblob, NULL, NULL, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN, &outblob)) {
            throw std::runtime_error("Couldn't decrypt");
    }

    std::vector<unsigned char> output(length);
    memcpy(&output[0], outblob.pbData, outblob.cbData);

    return output;
}

或者,您可以签出此DonationCoder 线程源 + 可执行文件的应急实施。

这就是完美。没有上提到我 MySQL 工作台存储库中存储用户帐户密码检索线程 snemarch 源代码 exe。尽管这些其他方法可能太工作如果我有权利以阅读或更新的用户表。

但相对说话,很少人使用的工作台。

如果您有正在运行 mysql 服务器的根访问您应停止 mysql 服务器使用此命令

sudo service mysql stop

现在启动 mysql 用下面的命令

sudo /usr/sbin/mysqld --skip-grant-tables  --skip-networking &

现在您可以登录到使用 mysql

sudo mysql
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

可在此处找到http://www.techmatterz.com/recover-mysql-root-password/完整说明

请输入您的翻译

How do I retrieve my MySQL username and password?

确认取消