Não é possível fazer o login do usuário root após atualizar o MySQL de 5.6 para 5.7

1

Depois de atualizar o MySQL de 5.6 para 5.7, não consigo logar como root:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Encontrei o seguinte no log:

2016-10-26T10:23:01.845088Z 0 [Warning] User entry 'root'@'localhost' has an empty plugin value. The user will be ignored and no one can login with this user anymore.
2016-10-26T10:23:01.845112Z 0 [Warning] User entry 'mysql.sys'@'localhost' has an empty plugin value. The user will be ignored and no one can login with this user anymore.
2016-10-26T10:23:01.845127Z 0 [Warning] User entry 'debian-sys-maint'@'localhost' has an empty plugin value. The user will be ignored and no one can login with this user anymore.
2016-10-26T10:23:01.845142Z 0 [Warning] User entry 'phpmyadmin'@'localhost' has an empty plugin value. The user will be ignored and no one can login with this user anymore.
2016-10-26T10:23:01.845155Z 0 [Warning] Some of the user accounts with SUPER privileges were disabled because of empty mysql.user.plugin value. If you are upgrading from MySQL 5.6 to MySQL 5.7 it means we were not able to substitute for empty plugin column. Probably because of pre 4.1 password hash. If your account is disabled you will need to:
2016-10-26T10:23:01.845183Z 0 [Warning] 1. Stop the server and restart it with --skip-grant-tables.
2016-10-26T10:23:01.845192Z 0 [Warning] 2. Run mysql_upgrade.
2016-10-26T10:23:01.845200Z 0 [Warning] 3. Restart the server with the parameters you normally use.
2016-10-26T10:23:01.845207Z 0 [Warning] For complete instructions on how to upgrade MySQL to a new version please see the 'Upgrading MySQL' section from the MySQL manual
2016-10-26T10:23:01.853461Z 0 [Note] Event Scheduler: Loaded 0 events
2016-10-26T10:23:01.853962Z 0 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.7.16-0ubuntu0.16.04.1'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  (Ubuntu)
2016-10-26T10:23:02.138961Z 2 [Note] Access denied for user 'root'@'localhost' (using password: NO)

Então eu fiz como sugerido: parou o servidor:

> service mysql stop

Começou com tabelas de permissões ignoradas:

> sudo mysqld_safe --skip-grant-tables

Quando o mysqld_safe está rodando com o --skip-grant-tables, eu consigo logar como root, mas somente até que eu feche o terminal onde ele está rodando (ele não está rodando como um daemon, mas pára ao fechar o terminal). / p>

Então eu corri mysql_upgrade como sugerido (em outro terminal)

> sudo mysql_upgrade

E isso atualizou minhas tabelas.

Fechei o terminal onde o mysqld_safe estava rodando, parei o servidor mysql (service mysql stop). Eu tive que matar todas as instâncias do mysql porque senão eu estava recebendo log completo dos seguintes erros:

2016-10-26T10:40:54.073975Z 0 [ERROR] InnoDB: Unable to lock ./ibdata1 error: 11
2016-10-26T10:40:54.074060Z 0 [Note] InnoDB: Check that you do not already have another mysqld process using the same InnoDB data or log files.

Então eu iniciei o MySQL novamente:

> service mysql start

e obteve o mesmo resultado acima (Acesso negado para o usuário 'root' @ 'localhost' (usando a senha: NO))

Como faço para corrigir isso? Eu tenho lutado com isso por horas e qualquer ajuda apreciada!

    
por Igor Skoldin 26.10.2016 / 12:53

2 respostas

1

O problema era que o valor do plugin mysql.user estava vazio para todos os usuários incluindo debian-sys-maint, então eu não poderia nem mesmo reconfigurar o pacote. Era para ser corrigido rodando mysql_upgrade mas por alguma razão não era.

Então fiz o despejo de todos os bancos de dados, removi completamente o servidor MySQL e depois o reinstalei e importei meus bancos de dados de volta.

Descarregue todos os seus bancos de dados:

> mysqldump -u root -p --databases db1 db2 > alldb.sql

Foi muito bobo da minha parte, mas fiz um despejo de todos os bancos de dados com - todos os bancos de dados. Ele incluía a tabela mysql.user onde todos os usuários tinham um valor "plugin" vazio, então eu corri o mesmo problema após a primeira reinicialização do serviço mysql. Então, depois disso, fiz o despejo apenas para meus bancos de dados.

O dump será colocado na pasta de onde você executou o comando

Remova o MySQL e suas configurações:

> sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.7 mysql-client-core-5.7
> sudo rm -rf /etc/mysql /var/lib/mysql
> sudo apt-get autoremove
> sudo apt-get autoclean

Instale o MySQL:

> sudo apt-get install mysql-server

Importe seus bancos de dados de volta:

> mysql -u root -p < alldb.sql
    
por 27.10.2016 / 05:55
0

Eu tive esse mesmo problema quando atualizei o Ubuntu de 14.04 para 16.04. Eu estava com preguiça de fazer sua sugestão (exportar bancos de dados e começar de novo), então acabei fazendo isso para consertar o problema!

Pare o mysql e inicie sem concessões

> sudo service stop mysql 
> sudo mkdir /var/run/mysqld # needed to launch mysql in ubuntu from command line...may not apply to other distros
> sudo chown mysql:mysql /var/run/mysqld # same reason as above
> sudo mysqld_safe --skip-grant-tables

Então, em outra janela de terminal:

> mysql -uroot 
> select User, host, authentication_string,plugin from mysql.user; #see what users don't have a password (authentication_string and plugin are empty) 
> update mysql.user set authentication_string=PASSWORD('woot') where user='user';
> update mysql.user set plugin='mysql_native_password' where user='user'; 
> FLUSH PRIVILEGES;
> exit; 

Finalmente, eu só precisava matar a instância temp mysql (mysqld_safe) e reiniciá-la ... No primeiro terminal

> ^\ #to tell the mysqld_safe process to quit itself 
> sudo service mysqld start 
    
por 02.12.2018 / 01:31