Восстановление удаленного пользователя root и пароля для MySQL

Я случайно удалил пользователя root в моей локальной настройке MAMP/MySQL, работающей в OS X. Других пользователей, созданных для возврата в MySQL, нет.

Это мягкий кошмар, похоже, ничего не может сделать без root.

Обнаружил это: http://hack2live.blogspot.com/2009/04/restore-repair-reset-mysql-root.html, который кажется именно тем, что мне нужно.

Я также не думаю, что переустановка MAMP будет делать трюк, так как многие мои беглые поиски дают людям, которые пробовали без успеха.

Кто-нибудь знает о дружественном OSX способе воссоздать root @localhost обратно в MAMP MySQL? Я просто не знаю, где MySQL живет в MAMP, или как выполнить правильные команды в терминале, чтобы попытаться исправить его.

Update

Я попробовал несколько вариантов ниже для восстановления root безрезультатно и решил восстановить резервную копию всего приложения MAMP. Итак, у меня есть root, я могу открыть phpmyadmin и т.д.

Ответ 1

У меня быстрый и грязный способ

Получить кого-то с правами SysAdmin и сделать следующее:

  • Добавьте 'skip-grant-tables' в my.cnf в разделе [mysqld]

  • перезапустить 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

  • удалить 'skip-grant-tables' из my.cnf в разделе [mysqld]

  • перезапустить mysql

Это должно быть все!

Ответ 2

переведенная версия http://hack2live.blogspot.com/2009/04/restore-repair-reset-mysql-root.html - для OS X.

Откройте TextEdit.app и выберите в формате → "Сделать простой текст".
Вырежьте и вставьте следующее в TextEdit и сохраните его в своей HOME папке с именем restore_root_privileges.sql

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.

Ответ 3

У меня просто такая же проблема. Я использую Xammp в Windows 7. Я случайно удалил пользователя root в phpmyadmin.

Похоже, я смог решить проблему в удобном виде следующим образом:

Остановить apache и mysql в управлении xammp

Перейдите к... /xammp/mysql

Вы увидите файл "resetroot". Запустите этот файл

После завершения этого приложения перезапустите mysql и apache

Перейдите в phpmyadmin, и вы увидите, что пользователь root восстановлен.

Теперь вы можете снова получить доступ ко всем своим базам данных

Ответ 4

с использованием мама. Я сделал, по-видимому, общую ошибку при удалении пользователя root при создании другого пользователя, я был заблокирован!

поэтому я нашел этот пост и попытался следовать указаниям, но...

Я получал следующие ошибки: - bash: mysql: команда не найдена при попытке выполнить команду mysql команд, а позже я получал эту ошибку Команда DELETE запретила пользователю "@" localhost "для таблицы" пользователь ", когда tring устанавливает правильные привилегии для пользователя root и делает что-либо с этим пользователем после mysql в оболочке.

прежде чем я смог использовать команды eric и rolando (спасибо вам, ребята, за это) это то, что я сделал

Мне нужно запустить mysqld правильно Я должен был сделать следующее

  • остановить процесс mysqld, найденный с помощью

    ps aux | grep mysql

и остановите приложение интерфейса мама, а также.

  • и остановил любой процесс mysql, найденный с помощью

    kill -9 [pid]

убедитесь, что процесс mysql не запущен, прежде чем идти дальше.
  • тогда мне пришлось перезапустить mysqld должным образом из фактического местоположения, где у меня были бинарные файлы mysql этот commnad запустит mysld без запроса пароля (вроде как в safemode)

/Приложения/MAMP/Library/bin/mysqld --skip-grant-tables --skip-networking &

Я попытался с файлом my.cnf, но не смог заставить его работать.

  • тогда мне пришлось зайти в mysql в оболочке

/Приложения/MAMP/Library/bin/mysql -u root -p

(если запрашивается пароль, просто нажмите Enter)

  • затем выполните команды eric и rolando, на этот раз у меня не получилась ошибка "DELETE команда запрещена пользователю" '' localhost 'для таблицы' user '', если вы это сделаете, вы не запустили mysqld правильно

  • затем остановите службу mysqld:

/Приложения/MAMP/Library/bin/mysqld stop

затем перезапустил мам, как обычно, с gui

и все начали работать снова, как было до этого... Я был так рад!

2 часа паники и проб и ошибок с консолью... ценные уроки.

Если я испортил любую из команд или объяснение (что могло бы быть так, как я отслеживал свои шаги назад, когда писал этот пост, пожалуйста, дайте мне знать. Я был бы рад обновить сообщение.

наконец не дают. это можно сделать!!

Ответ 5

Вчера я сделал то же самое, будучи новым для mac и sql-сервера. Я случайно удалил пользователя root, потому что я нажал неправильную кнопку в Привилегии, пытаясь настроить нового пользователя и пароль.

У меня не было никакой работы на этом компьютере, поэтому я не беспокоился об удалении моих сайтов.

  • Сначала я удалил MAMP Pro (для которого у меня был значок в Launchpad).
  • Затем я удалил каталог MAMP из папки "Приложения".
  • Затем я переустановил MAMP из интернет-загрузки.
  • Затем я удалил все свои файлы cookie, кеш и т.д. из сафари.
  • Я выключил компьютер и перезагрузился.

Теперь у меня есть доступ к phpMyAdmin по ссылке на начальной странице после загрузки MAMP.

Ответ 6

Просто хотел внести свой вклад, как я решил это. Если вы случайно удалили пользователя root в MAMP PRO и используете OSX с резервными копиями Time Machine. Просто перейдите в эту папку в finder:

/Library/Поддержка приложений /appsolute/

Затем "Ввести машину времени" из верхней панели меню и восстановить последнюю резервную копию папки MAMP PRO. Сэкономить много хлопот для меня.

Ответ 7

Хорошо, перестаньте работать с MySQL и откройте файлы установки, с которыми он пришел. Должен быть файл bat с именем resetroot.bat. Запустите его, и ваша проблема исчезнет.

Ответ 8

MySQL 5.7 заменил поле Password на authentication_string (в таблице 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 = '';

Ответ 9

Я работал на CentOS 6. Мне пришлось убрать Create_tablespace_priv = 'y', потому что моя версия кричала, в остальном все хорошо.