Как восстановить пользователя root в mysql?

Apr 19, 2018 06:25 · 308 words · 2 minute read mysql

В интернете есть множество примеров (в том числе и в официальной документации) сброса пароля суперпользователя в базе данных MySQL. Но что делать, если случайно удалил пользователя root@localhost в БД MySQL - давайте разберемся!

Еще раз акцентирую внимание на том факте, что нужно не просто сменить пароль пользователю root - правильный пароль известен, но подключиться к БД MySQL не получается именно потому что удален пользователь root@localhost и ранее подключение было разрешено только с хоста localhost (никаких root@%, root@127.0.0.1 и т.д. нет).

В данном примере используется следующая версия MySQL:

$ mysql -V
mysql  Ver 14.14 Distrib 5.7.21-20, for debian-linux-gnu (x86_64) using  6.3

В конфигурационном файле my.cnf в секции [mysqld] добавляем следующую опцию:

skip-grant-tables

Перезапускаем MySQL командой:

service mysql restart

Подключаемся к БД, введя в консоли mysql (без пароля) и нажав клавишу Enter.

Для восстановления удаленного пользователя root@localhost выполняем следующий запрос:

INSERT INTO mysql.user 
SET User = 'root', 
    Host = 'localhost', 
    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_type = '',
    ssl_cipher = '',
    x509_issuer = '',
    x509_subject = '';

Установим пароль только что созданному пользователю:

UPDATE mysql.user
SET authentication_string = PASSWORD('MySuperPassword')
  WHERE User = 'root' AND Host = 'localhost';

После проделанных действий выходим из MySQL, удаляем (или комментируем) ранее добавленное значение skip-grant-tables в конфигурационном файле my.cnf и еще раз перезапускаем сервис:

service mysql restart

Теперь можно подключиться к базе данных с указанного хоста (localhost) под пользователем root используя установленный пароль.

tweet Share