Как восстановить пользователя root в mysql?
Apr 19, 2018 06:25 · 308 words · 2 minute read
В интернете есть множество примеров (в том числе и в официальной документации) сброса пароля суперпользователя в базе данных 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 используя установленный пароль.