恢复MySQL的已删除“root”用户和密码

时间:2011-05-22 01:22:25

标签: mysql macos mamp

我不小心删除了在OS X上运行的MAMP / MySQL的本地开发设置中的root用户。没有其他用户创建回到MySQL。

如果没有root,这是一场温和的噩梦似乎无能为力。

发现这个:http://hack2live.blogspot.com/2009/04/restore-repair-reset-mysql-root.html这似乎正是我所需要的。

我也不认为重新安装MAMP会起到作用,因为我粗略的搜索结果让那些尝试过没有成功的人产生了。

有没有人知道OSX友好的方式将root @ localhost重新创建回MAMP的MySQL?我基本上只是不知道MySQL在MAMP中的位置,或者如何在终端中执行正确的命令来尝试修复它。

更新

我尝试了以下几个选项来恢复root无效,并决定恢复整个MAMP应用程序的备份。所以我已经回来了,我可以打开phpmyadmin等等。

9 个答案:

答案 0 :(得分:59)

我有一个快速而肮脏的方式

获取具有SysAdmin权限的人并执行以下操作:

  1. 在[mysqld]栏目下将'skip-grant-tables'添加到my.cnf

  2. 重启mysql

  3. 输入没有密码的mysql,然后按Enter键

  4. 运行此:

    DELETE FROM mysql.user 
    WHERE  user = 'root' 
           AND host = 'localhost'; 
    
    INSERT INTO mysql.user 
    SET user = 'root', 
        host = 'localhost', 
        password = Password('whatevernewpassword'), 
        Select_priv = 'y',
        Insert_priv = 'y',
        Update_priv = 'y',
        Delete_priv = 'y',
        Create_priv = 'y',
        Drop_priv = 'y',
        Reload_priv = 'y',
        Shutdown_priv = 'y',
        Process_priv = 'y',
        File_priv = 'y',
        Grant_priv = 'y',
        References_priv = 'y',
        Index_priv = 'y',
        Alter_priv = 'y',
        Show_db_priv = 'y',
        Super_priv = 'y',
        Create_tmp_table_priv = 'y',
        Lock_tables_priv = 'y',
        Execute_priv = 'y',
        Repl_slave_priv = 'y',
        Repl_client_priv = 'y',
        Create_view_priv = 'y',
        Show_view_priv = 'y',
        Create_routine_priv = 'y',
        Alter_routine_priv = 'y',
        Create_user_priv = 'y',
        Event_priv = 'y',
        Trigger_priv = 'y',
        Create_tablespace_priv = 'y';
    
  5. 退出mysql

  6. 从[mysqld]部分的my.cnf中删除'skip-grant-tables'

  7. 重启mysql

  8. 应该是全部!

答案 1 :(得分:10)

{X}的翻译版本 - 适用于OS X.

打开TextEdit.app并选择格式 - > “制作纯文本”。
将以下内容剪切并粘贴到TextEdit中,并将其保存到名称为restore_root_privileges.sql HOME 文件夹中

update mysql.user set Super_priv='y' where user='root';
update mysql.user set Select_priv='y' where user='root';
update mysql.user set Insert_priv='y' where user='root';
update mysql.user set Update_priv='y' where user='root';
update mysql.user set Delete_priv='y' where user='root';
update mysql.user set Create_priv='y' where user='root';
update mysql.user set Drop_priv='y' where user='root';
update mysql.user set Reload_priv='y' where user='root';
update mysql.user set Shutdown_priv='y' where user='root';
update mysql.user set Process_priv='y' where user='root';
update mysql.user set File_priv='y' where user='root';
update mysql.user set Grant_priv='y' where user='root';
update mysql.user set References_priv='y' where user='root';
update mysql.user set Index_priv='y' where user='root';
update mysql.user set Alter_priv='y' where user='root';
update mysql.user set Show_db_priv='y' where user='root';
update mysql.user set Super_priv='y' where user='root';
update mysql.user set Create_tmp_table_priv='y' where user='root';
update mysql.user set Lock_tables_priv='y' where user='root';
update mysql.user set Execute_priv='y' where user='root';
update mysql.user set Repl_slave_priv='y' where user='root';
update mysql.user set Repl_client_priv='y' where user='root';
update mysql.user set Create_view_priv='y' where user='root';
update mysql.user set Show_view_priv='y' where user='root';
update mysql.user set Create_routine_priv='y' where user='root';
update mysql.user set Alter_routine_priv='y' where user='root';
update mysql.user set Create_user_priv='y' where user='root';

保存并退出TextEdit.app。

停止mysqld服务器。 如何执行此操作,取决于您使用的MySQL安装。 您可能在系统首选项中有一个PreferencePane。如果没有,您必须查阅MySQL安装的文档。

打开Terminal.app(应用程序/实用程序) 输入以下命令:

sudo mysqld --skip-grant-tables &  #start your MySQL server without access control
mysql -vv < ~/restore_root_privileges.sql
sudo mysqladmin -p shutdown

通常启动MySQL服务器,例如来自PreferencePanes 在Terminal.app中:输入以下内容:

mysql -u root -p
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
mysql> quit;

这就是全部。 没有任何保证。如果做错了,您可以丢失所有数据。 先备份你的mysql文件。

如果你有类似的东西:

-bash: mysql: command not found

这意味着,你的安装不正确,你应该找到你的mysql二进制文件的位置,并且需要在你的PATH变量中输入目录。

答案 2 :(得分:6)

我得到同样的问题。我在Windows 7上使用Xammp。我在phpmyadmin中意外删除了root用户。

看来我能够像这样轻松解决问题:

在xammp控件中停止apache和mysql

转到... / xammp / mysql

您将看到文件“resetroot”。运行此文件

完成此应用程序后,重新启动mysql和apache

转到phpmyadmin,您将看到root用户已恢复

现在您可以再次访问所有数据库

答案 3 :(得分:3)

使用mamp。我在创建另一个用户时犯了一个显然常见的错误,即删除root用户,我被锁定了!

所以我找到了这篇文章并尝试按照指示行事但......

我得到了这个错误: -bash:mysql:在尝试执行命令mysql命令时找不到命令,后来我收到此错误 对用户''@ localhost'的DELETE命令拒绝为表'user'提供权限,以便为root用户设置适当的权限,并在shell中使用mysql后对该用户执行任何操作。

所以在我使用命令eric和rolando发布之前(谢谢你们) 这就是我做的事情

我需要正确启动mysqld 我不得不做以下

  1. 使用

    停止mysqld进程
      

    ps aux | grep mysql

  2.      并停止mamp接口应用程序以及..

    1. 并停止使用

      找到的任何mysql进程
        

      kill -9 [pid]

    2.      确保在进一步运行之前没有运行任何mysql进程。

      1. 然后我必须从我拥有mysql二进制文件的实际位置正确地重启mysqld 这个commnad将启动mysld而不需要密码(有点像在safemode中)
      2.   

        / Applications / MAMP / Library / bin / mysqld --skip-grant-tables --skip-networking&amp;

        我尝试使用my.cnf文件但无法使用它。

        1. 然后我不得不进入shell中的mysql
        2.   

          / Applications / MAMP / Library / bin / mysql -u root -p

          (如果提示输入密码,只需按Enter键)

          1. 然后执行eric和rolando发布的命令,这次我没有得到任何错误“DELETE命令拒绝用户'''localhost'表'用户'”如果你这样做,你没有启动mysqld适当

          2. 然后停止mysqld服务:

          3.   

            / Applications / MAMP / Library / bin / mysqld stop

            然后像gui一样重新启动mamp

            所有人都像以前一样重新开始工作......我很放心!

            2个小时的恐慌和控制台的反复试验......宝贵的经验教训......

            如果我搞砸了任何命令或解释(可能是因为我在写这篇文章时追溯我的步骤,请告诉我。我很乐意更新帖子。

            最后不要给。它可以做到!!

答案 4 :(得分:1)

昨天我做了完全相同的事情,是macs和sql server的新手。我不小心删除了root用户,因为在尝试设置新用户和密码时我在权限中按错了按钮。

我在这台电脑上没有任何工作,所以不担心删除我的网站。

  • 我首先卸载了MAMP Pro(我在Launchpad中有一个图标)。
  • 然后我从Applications文件夹中删除了MAMP目录。
  • 然后我从互联网下载重新安装了MAMP。
  • 然后我从safari中删除了所有的cookies,缓存等。
  • 我关闭了电脑并重启了。

一旦MAMP启动,我现在可以通过启动页面上的链接访问phpMyAdmin。

答案 5 :(得分:1)

只是想贡献我如何解决这个问题。如果您不小心删除了MAMP PRO中的root用户,并且正在使用OSX和Time Machine备份。只需在finder中找到这个文件夹:

/ Library / Application Support / appolute /

然后从顶部菜单栏“输入Time Machine”并恢复MAMP PRO文件夹的最近备份。为我节省了很多麻烦。

答案 6 :(得分:0)

好的,停止运行MySQL,并打开它附带的安装文件。应该有一个名为resetroot.bat的bat文件。运行它,你的问题就会消失。

答案 7 :(得分:0)

MySQL 5.7已用authentication_string替换了Password字段(在mysql.user表中);所以这对我有用。

INSERT INTO mysql.user 
SET user = 'root', 
host = 'localhost', 
authentication_string =Password('Yours_own_password'), 
Select_priv = 'y',
Insert_priv = 'y',
Update_priv = 'y',
Delete_priv = 'y',
Create_priv = 'y',
Drop_priv = 'y',
Reload_priv = 'y',
Shutdown_priv = 'y',
Process_priv = 'y',
File_priv = 'y',
Grant_priv = 'y',
References_priv = 'y',
Index_priv = 'y',
Alter_priv = 'y',
Show_db_priv = 'y',
Super_priv = 'y',
Create_tmp_table_priv = 'y',
Lock_tables_priv = 'y',
Execute_priv = 'y',
Repl_slave_priv = 'y',
Repl_client_priv = 'y',
Create_view_priv = 'y',
Show_view_priv = 'y',
Create_routine_priv = 'y',
Alter_routine_priv = 'y',
Create_user_priv = 'y',
Event_priv = 'y',
Trigger_priv = 'y',
Create_tablespace_priv = 'y',
ssl_cipher = '',
x509_issuer = '',
x509_subject = '';

答案 8 :(得分:0)

在CentOS 6上为我工作。我不得不删除Create_tablespace_priv ='y',因为我的版本不兼容。