我不小心删除了在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等等。
答案 0 :(得分:59)
我有一个快速而肮脏的方式
获取具有SysAdmin权限的人并执行以下操作:
在[mysqld]栏目下将'skip-grant-tables'添加到my.cnf
重启mysql
输入没有密码的mysql,然后按Enter键
运行此:
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';
退出mysql
从[mysqld]部分的my.cnf中删除'skip-grant-tables'
重启mysql
应该是全部!
答案 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 我不得不做以下
停止mysqld进程
ps aux | grep mysql
找到的任何mysql进程
kill -9 [pid]
/ Applications / MAMP / Library / bin / mysqld --skip-grant-tables --skip-networking&amp;
我尝试使用my.cnf文件但无法使用它。
/ Applications / MAMP / Library / bin / mysql -u root -p
(如果提示输入密码,只需按Enter键)
然后执行eric和rolando发布的命令,这次我没有得到任何错误“DELETE命令拒绝用户'''localhost'表'用户'”如果你这样做,你没有启动mysqld适当
然后停止mysqld服务:
/ Applications / MAMP / Library / bin / mysqld stop
然后像gui一样重新启动mamp
所有人都像以前一样重新开始工作......我很放心!
2个小时的恐慌和控制台的反复试验......宝贵的经验教训......
如果我搞砸了任何命令或解释(可能是因为我在写这篇文章时追溯我的步骤,请告诉我。我很乐意更新帖子。
最后不要给。它可以做到!!
答案 4 :(得分:1)
昨天我做了完全相同的事情,是macs和sql server的新手。我不小心删除了root用户,因为在尝试设置新用户和密码时我在权限中按错了按钮。
我在这台电脑上没有任何工作,所以不担心删除我的网站。
一旦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',因为我的版本不兼容。