如何获取我的MySQL用户名和密码?


158

我丢失了MySQL用户名和密码。我该如何找回?

Answers:


186

停止MySQL进程。

使用--skip-grant-tables选项启动MySQL进程。

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

列出所有用户;

SELECT * FROM mysql.user;

重设密码;

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

不要忘记,以

停止MySQL进程

正常启动MySQL进程(即不使用--skip-grant-tables选项)

完成后。否则,数据库的安全性可能会受到威胁。


7
认为您不需要重新启动守护程序即可重置普通用户。只是“冲洗特权”;更新用户密码后。--skip-grant-tables仅在重置root用户密码时才需要!通常不建议标准用户重置。
Amos Folarin

使用该dpkg-reconfigure mysql-server-5.5命令重置MySQL根密码有什么意义?
phillips15年

@Xenph,为什么说“ 使用-u root选项启动MySQL控制台客户端 ”?这样做根本没有意义,因为-u服务器启动时会被忽略--skip-grant-tables
Pacerier '16

15
在MySQL 5.7。*,有中没有列mysql.userpassword,使用authentication_string来代替。
Adib Aroui '16


42

不幸的是,您的用户密码无法找回。它已经用一种单向散列进行了散列,如果您不知道它是不可逆的。我建议与上面的Xenph Yan一起使用,然后创建一个新的。

您还可以使用手册中的以下步骤为Windows上的任何MySQL 帐户重设密码:

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

开始菜单->控制面板->管理工具->服务

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

  1. 创建一个文本文件,并将以下语句放入其中。用您要使用的密码替换密码。

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

    UPDATEFLUSH每个语句必须在一行内写完。的UPDATE语句重置所有现有的根帐户的密码,而FLUSH语句告诉服务器重装授权表到内存中。

  2. 保存文件。对于此示例,文件将命名为C:\ mysql-init.txt。
  3. 打开控制台窗口以转到命令提示符:

    开始菜单->运行-> cmd

  4. 使用特殊的--init-file选项启动MySQL服务器:

    C:\> C:\mysql\bin\mysqld-nt --init-file = C:\mysql-init.txt

    如果将MySQL安装到C:\ mysql以外的位置,请相应地调整命令。

    服务器在启动时执行由--init-file选项命名的文件的内容,更改每个root帐户密码。

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

    如果使用MySQL安装向导安装了MySQL,则可能需要指定--defaults-file选项:

    C:\> "C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt.exe" --defaults-file="C:\Program Files\MySQL\MySQL Server 5.0\my.ini" --init-file=C:\mysql-init.txt

    可以使用服务管理器找到适当的--defaults-file设置:

    开始菜单->控制面板->管理工具->服务

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

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

现在,您应该可以使用新密码以root用户身份连接到MySQL。


5
@Jake-感谢您的回答。我想对此表示赞许,但由于声誉原因,由于某些原因,stackoverflow不允许我这样做。你的解释“很遗憾,您的用户密码是无法挽回的。它已被散列以单向散列它,如果你不知道是不可逆”的关键是我的理解,为什么其他一切我读谷歌只给了我方向改变我密码。好的解释比单独的说明更具洞察力。
dsdsdsdsd 2011年

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

1
为什么是您的mysqld-nt而不是mysqld
Pacerier '16

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

34

此处最有用答案的改进:

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

无需重新启动MySQL服务器。

FLUSH PRIVILEGES;在更新mysql.user语句后使用以更改密码。

FLUSH语句告诉服务器将授权表重新加载到内存中,以便它注意到密码更改。

--skip-grant-options启用该功能后,任何人都无需密码即可拥有所有特权进行连接。因为这是不安全的,所以您可能想要

--skip-grant-tables--skip-networking结合使用可防止远程客户端连接。

来自:参考:reset-permissions-generic


@ThinkingMonkey,这不是假定当前登录的用户具有修改权限mysql.user吗?通常情况并非如此。
Pacerier '16

6

如果不进行暴力破解就无法直接恢复MySQL密码,则可能还有另一种方式-如果您已使用MySQL Workbench连接到数据库,并将凭据保存到“保险库”,那您就很高兴了。

在Windows上,凭据存储在%APPDATA%\ MySQL \ Workbench \ workbench_user_data.dat中 -用CryptProtectData加密(没有任何其他熵)。解密很容易:

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线程,以获取快捷方式实现的源代码和可执行文件。


2
太完美了 在提到的线程snemarch上有一个带有源代码的exe,可以检索存储在我的MySQL Workbench库中的用户帐户密码。尽管如果我有权读取或更新用户表,这些其他方法也可能会起作用。
RobbZ 2015年

但是相对而言,很少有人在使用Workbench。
Pacerier '16

这是可以在使用Visual Studio构建后恢复工作台存储的用户名和密码信息后运行的另一种实现:github.com/wclear/MySQLWorkbenchPasswordViewer
bnp887 '16

6

做到无停机时间

在终端中运行以下命令以连接到DBMS(您需要root访问权限):

sudo mysql -u root -p;

运行目标用户的更新密码(例如我的用户名是mousavi,密码必须是123456):

UPDATE mysql.user SET authentication_string=PASSWORD('123456') WHERE user='mousavi';  

此时,您需要进行刷新以应用更改:

FLUSH PRIVILEGES;

做完了!您没有停止或重新启动mysql服务就做到了。


5

如果您对运行mysql的服务器具有root访问权限,则应使用此命令停止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/


3

使用现有用户从Windows cmd登录MySql:

mysql -u用户名-p
输入密码:****

然后运行以下命令:

mysql> SELECT * FROM mysql.user;

之后,复制相应用户的加密的md5密码,然后在Web中提供一些在线密码解密的应用程序。使用此解密密码,并下次使用该密码登录。或使用以下命令更新用户密码:

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

然后使用新密码和用户登录。


0

如果碰巧设置了ODBC,则可以从ODBC配置文件中获取密码。这在Linux的/etc/odbc.ini中和Windows注册表中的Software / ODBC文件夹中(有几个-可能需要一些时间才能找到)


0

保存文件。对于此示例,文件将命名为C:\ mysql-init.txt。它要求管理权限来保存文件


-1

虽然严格,逻辑,计算机science'ish运算的问题的解释是,要求双方 “我怎么找回我的MySQL用户名” “密码” -我想这可能是有用的人也解决解释。换一种说法 ...

1)如何检索我的MySQL用户名?

要么

2)密码

后一种情况似乎已经得到了充分解决,因此我不会理会。以下是仅针对“如何获取我的MySQL用户名”案例的解决方案。嗨。

要找到您的mysql用户名,请从mysql shell运行以下命令...

从mysql.user中选择用户;

它将打印所有mysql用户的表。


1
这是一个较晚的答案,仅当您的解决方案与已发布或已接受的解决方案明显不同时,才应发布这些。并非在这种情况下,尤其是您的答案重复了一个被接受的答案。
m.cekiera 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.