如何重置或恢复MySQL的pipe理员帐户密码?

我有一个MySQL数据库,我“inheritance”,我没有给予pipe理员凭据。 然而,我确实可以访问它运行的盒子。 有没有办法恢复pipe理员凭据或创build新的?

阅读并执行“ MySQL参考手册”中有关重置根密码的章节 。

这个过程在没有授权的情况下启动mysql守护进程,允许你连接而不提供凭据。 在这种模式下,您可以正常连接,并重置密码和授权。 之后不要忘记在适当的授权下再次启动mysql。

如果这是一个Debian / Ubuntu盒子,那么有一个特殊的与root相同的账户叫debian-sys-maint 。 您可以在/etc/mysql/debian.cnf中读取密码

使用该密码,您可以使用以下命令以debian-sys-maint身份login到mysql:

mysql --defaults-file=/etc/mysql/debian.cnf mysql 

login后,请执行以下操作:

 update user set password=password('<new password>') where user='root'; flush privileges; quit; 

现在可以使用你的新密码访问root了:

 mysql -uroot -p 

我的root用户不存在。 上

 CREATE USER root@localhost; 

我有

 ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement 

解决的办法是

 mysqld_safe --skip-grant-tables & mysql INSERT INTO user (Host,User,Password) VALUES ('localhost', 'root', 'changethispassword'); UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root'; FLUSH PRIVILEGES; 

之后,我通过一个小小的帮助逐个添加了所有的priv:

 mysql mysql -e "SELECT * FROM user WHERE User='root'\G"|grep N 

(而且这个可以而且应该是自动化的)

注意:在INSERTfind正确数量的“Y”是PITA。

由于MySQL参考手册中的步骤不是很清楚,我想用更简单的语言在这里回答。 (这个答案与MacBook OSX用户有关):

  1. 由于我们不知道当前的密码,MySQL服务器需要跳过/绕过当前的login凭证。 指示MySQL服务器跳过访问授权表:
    • 停止你的MySQL服务器(如果它已经在运行)。
    • find你的MySQLconfiguration文件my.cnf 。 (对于我来说,它被放置在@ /Applications/XAMPP/xamppfiles/etc ,你可以search是否找不到它)。
    • 在任何文本编辑器中打开my.cnf文件。
    • [mysqld]部分末尾添加"skip-grant-tables" (不带引号)并保存文件。
    • 现在启动你的MySQL服务器。 它将以skip-grant-tables选项开始。
  2. 打开Terminal并运行mysql命令
  3. 执行命令mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
  4. 执行命令mysql> FLUSH PRIVILEGES;
  5. 执行命令mysql> exit
  6. 重新启动MySQL服务器。