Recupere o acesso root ao servidor MySQL no Ubuntu

0

Estou tentando recuperar o acesso root ao banco de dados MySQL em execução em uma instância do Ubuntu (LTS 16.04.2). A situação do problema é: eu posso iniciar e parar o MySQL usando /etc/init.d/mysql , mas não consigo logar com

mysql -u root
mysql -u root -p

O último com senha vazia. Eu tenho um registro vazio no meu armazenamento de senha. Acredito que lembre-se que o login foi possível sem senha, mas talvez eu também tenha esquecido de salvar meu armazenamento de senhas corretamente. Talvez também o sistema esteja comprometido. No entanto, como tenho acesso root, deve ser possível redefinir a senha.

Eu decidi iniciar o servidor MySQL usando

sudo -u mysql /usr/sbin/mysqld --skip-grant-tables --skip-networking 

comando e agora pode se conectar com o cliente. De acordo com o tutorial , tenho que emitir os dois comandos

FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

para definir uma senha. Ao emitir o segundo comando, recebo o seguinte aviso no console onde iniciei o servidor:

[Warning] 'user' entry 'root@localhost' has both a password and an authentication plugin specified. The password will be ignored.

Eu não lembro de ter configurado qualquer plug-in de todos os tempos. Este é o padrão do Ubuntu? Onde minha senha do MySQL é armazenada e como alterá-la? Ou como desativar esse plug-in que eu não conheço.

    
por Paramaeleon 31.05.2017 / 09:05

2 respostas

1

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

... é o comando errado. Em 2015, essa coluna foi suspensa e substituída por uma coluna "authentication_string".

Deve ser

UPDATE user SET authentication_string=PASSWORD('MyNewPass') where USER='root'; 
    
por Rinzwind 31.05.2017 / 09:43
1

O que você precisa fazer depois de pular as tabelas de concessão é conectar-se ao seu banco de dados e usar o banco de dados mysql.

Então, seria completamente:

sudo systemctl stop mysql.service
sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root
use mysql;
FLUSH PRIVILEGES;
UPDATE user SET authentication_string = PASSWORD('newpass') WHERE User = 'root' AND Host = 'localhost';
\q
sudo killall mysqld
sudo systemctl start mysql.service
    
por Ziazis 31.05.2017 / 09:44