Recuperar usuário root excluído do MySQL/MariaDB

O problema

Usuário root foi excluído do Mysql/MariaDB, então correções tradicionais para atualizar a senha do root não funcionam.

GRANT USER não funcionam sem as tabelas "grant" ativadas, e não funcionam se o usuário não tem um mínimo de privilégios.

A solução

Inserir o usuário manualmente na tabela mysql.user.

Ambiente de teste

  • Ubuntu 18.04
  • MariaDB

O código

service mysql stop
mysqld_safe --skip-grant-tables &
mysql

No terminal mysql (altere ROOT_PASSWORD):

INSERT INTO user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv, Create_view_priv, Show_view_priv, Create_routine_priv, Alter_routine_priv, Create_user_priv, ssl_type, ssl_cipher, x509_issuer, x509_subject, max_questions, max_updates, max_connections, max_user_connections, authentication_string)
VALUES('localhost','root',PASSWORD('ROOT_PASSWORD'),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0','0', '');
FLUSH PRIVILEGES;
GRANT ALL ON *.* TO 'root'@'localhost';
exit

Então reinicie o servidor:

kill `cat /var/run/mysqld/mysqld.pid`
service mysql restart

Referências