Estava muito tempo sem postar, mas hoje eu passei uma dor de cabeça muito grande até resolver este problema, então eu tinha que postar essa solução.
Eu estava com o Ubuntu 14.10 e resolvi atualizar ele para a última versão hoje (17/09/2016), Ubuntu 16.04.
Tudo estava correndo bem, mesmo tendo que reinstalar/reconfigurar algumas bibliotecas/aplicativos.
O último passo da verificação foi tentar rodar meus aplicativos web que usam MySQL. A surpresa inicial foi que o MySQL havia sido desinstalado. Verifiquei se os arquivos de dados, com todos os meus bancos de dados, estavam salvos. Graças a minha sorte tudo estava a salvo.
Primeiramente eu apenas fiz a instalação dos pacotes do MySQL, onde a versão mais nova era a 5.7:
$ sudo apt-get install mysql-server-5.7 mysql-client-5.7
Após finalizar a instalação, eu tentei logar. O problema ocorreu justamente nesse momento, quando eu tentei logar no MySQL:
$ mysql -u root ERROR 1045: Access denied for user: 'root'@'localhost'
Antes de fazer a atualização do Ubuntu meu MySQL não tinha senha de root. Ela era vazia. Eu apenas fazia mysql -u root e o acesso seguia com sucesso.
Então o que eu deveria fazer? Bem, provavelmente a senha de root foi alterada ou qualquer outro problema que eu não sei o que foi. A solução então era alterar a senha de root. Eu passe mais de 5 horas tentando alterar a senha, lendo vários sites, blogs, jornais, revistas, contato extra-terrestre, …, inclusive o site oficial do MySQL, e tudo repetia as mesmas coisas. Até que uma luz veio e me levou até uma postagem no StackOverflow com um erro não tão igual, mas com a mesma solução.
Todos os sites diziam a mesma coisa, mas eu acabei encontrando o que faltava. Segue abaixo:
1. Primeiro devemos parar o serviço do MySQL:
$ sudo service mysql stop
2. Em seguida iniciamos o MySQL em modo seguro, sem as opções de permissões. Isso vai servir para você alterar a senha. Mas o segredo vem depois:
$ sudo mysqld_safe --skip-grant-tables &
Poderá ocorrer o seguinte erro:
mysqld_safe Logging to '/var/log/mysql/error.log'. mysqld_safe Logging to '/var/log/mysql/error.log'. mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
Caso ocorra, execute o seguinte comando para criar o diretório onde ficará o socket do mysql:
$ sudo mkdir -p /var/run/mysqld $ sudo chown mysql:mysql /var/run/mysqld
3. Após iniciar o servidor você vai acessar o cliente MySQL com usuário root, sem senha:
$ mysql -u root
4. Agora vamos alterar a senha do usuário root.
Aqui é que está o SEGREDO. No MySQL 5.7 foi alterado algumas coisas no banco de dados de sistema mysql. A tabela user não possui mais a coluna password, o nome agora se chama authentication_string. Então faça a alteração da senha da seguinte maneira:
mysql> use mysql; mysql> update user set authentication_string=PASSWORD("SuaSenha") where User='root';
Bom, a maioria dos sites paravam aí, o que não resolvia o problema. O que faltava era um pequeno detalhes, devemos alterar o campo plugin setando o mecanismo padrão de verificação do password. Então segue abaixo:
mysql> update user set plugin="mysql_native_password"; mysql> flush privileges; mysql> quit;
Fieto isso, a senha do root foi alterada e está pronto para ser acessado.
5. Dê um stop no MySQL e depois inicie normalmente o serviço:
$ sudo mysqladmin shutdown # essa foi a forma mais fácil que eu achei para matar o mysqld_safe
Caso não dê certo, você também pode tentar matar o MySQL localizando o id do processo e dando um kill nele:
$ ps -ef | grep mysql $ sudo kill -9 [id dos processos que você achou no comando anterior]
Após parar o serviço, inicie ele normalmente:
$ sudo service mysql start
Pronto, agora é só conectar e correr para o abraço:
$ mysql -u root -p
Então era isso galera. Queria apenas registrar este detalhe para ajudar mais pessoas, já que a maioria dos sites possui informações bem antigas.
Qualquer dúvida é só perguntar nos comentários.
Abraço!
Você parou de fazer atualização no BingoDroid?
Tenho umas alterações pra fazer, mas sem previsão, infelizmente.
Valeu muito!!! Obrigado! Tava tentando logar e a senha root tava dando inválida. O motivo eu não sei. Mas com esse tutorial consegui trocar a senha!
Estava ocorrendo esses erros e daí eu não sabia mais o que fazer.
mysqld_safe Logging to ‘/var/log/mysql/error.log’.
mysqld_safe Logging to ‘/var/log/mysql/error.log’.
mysqld_safe Directory ‘/var/run/mysqld’ for UNIX socket file don’t exists.
No meu caso continua dando esse erro mesmo fazendo o que ele ensina… com o mkdir etc… pode ajudar?
Veja se o diretório /var/run/mysqld existe. Se não existe, tente cria-lo como root.
Muito bom, também perdi mais de 6h até encontrar seu ensinamento.
Valeu!
Ótimo post!
Alguma ajuda por favor para quem usa windows e enfrenta exatamente o mesmo problema?
Não consegui converter alguns comandos, para o windows, ou me confundi em alguns, faz muito tempo, que não uso LINUX, na minha época não existia UBUNTU.
Infelizmente não sei como fazer no windows.
Excelente dica Leandro, ótimo tutorial. 😉 Obrigado!!
Cara, você me salvou!
Muito obrigado!! \o/
Na instalação dessa versão do mysql ele cria uma senha de root temporária, é só verificar com o comando abaixo e depois criar a nova senha:
# grep ‘temporary password’ /var/log/mysqld.log
2018-04-13T20:08:23.432149Z 1 [Note] A temporary password is generated for root@localhost: rX%snotwFk9uK
[root@sprsga02 ~]# mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root:
The existing password for the user account root has expired. Please set a new password.
New password:
OBS.: no final da instalação consta essa informação no terminal.
Legal. Fica mais essa dica pro pessoal tentar antes de partir pra alteração da senha.
Leandro, muitíssimo obrigado!
Funcionou direitinho.
Top!! Foi o único tutorial que me salvou! Está de parabéns.
Você salvou meu dia. Favoritei até a pagina. Valeu manolo. 🙂
Você é o cara!
Obrigado, de verdade.
Ótimo tutorial!
Ajudou muito, Leandro. Havia instalado o mysql-server sem senha, achando que ele ia deixar logar no console, e quando descobri que não podia usei seu post para resolver o problema. Abraço!
valeu me ajudou, fiquei 3 horas quebrando a cabeça!
Funcionou, unico tutorial que achei que realmente resolveu! Obrigada
Obrigado. A Estava com o problema da troca na coluna password para authentication_string.
Que Deus lhe abençoe grandemente!
Já estamos em outubro de 2018 e seu artigo continua salvando vida!
Caramba! Este post valeu muito a pena!!
O unico que funcionou!!!
Valeu mesmo!!!
Cara, vc é o cara!
Muito bom amigo, resolveu meu problema aqui. Abraço! Continue com o bom trabalho.
Voce é o meu heroi !!!! Me salvou aqui … valeeeeeuuu 😉
Muuito obrigado !
Me salvou !
Camarada, show de bola, a melhor dica que encontrei, várias pesquisas que fiz não tratavam de problemas, mas você detalhou problemas que enfrentaria e a suas dicas sobre os problemas foram valiosas.
Parabéns… TOP mesmo…
Cara, parabéns por este post.
Valeu Jovem!
Esse problema tem ocorrido há algum tempo já. É um saco ter que fazer esse procedimento. De fato os tutoriais não dão destaque ao plugin.
Abc.
Uau. Gostei. Todas as resoluções para os prováveis problemas. Bem amplo.
Gostei.
Valeu.
Ajudou muito, hoje se não desse certo eu iria voltar a desenvolver no windows
I been searching the internet for this thanks!
Valeu, deu certo….nao sei porque na pesquisa do google vc nao aparece como primeira solucao, ou melhor, a unica solucao para esse problema…..valeu
Valeu
Cara você me salvou muito com esse negócio de plugin, eu tinha visto na documentação a mudança do nome do campo…
Abraço
Massa. Valeu
Meu brother, muito obrigado, estava há um tempão procurando a solução e não encontrava, graças a você resolvi o problema, valeu irmão solidariedade em ajudar os outros. Parabéns!!!
Valeu
Ótimo post, foi o mais completo que achei!
funcionou aqui pra mim!
Muito Obrigado.
Top
Excelente Post ! Muito obrigado.
Funcionou !
Pingback: Resetar senha root do mysql – Bitmasters
Excelente post, sempre que vem atualizações vem novos novidades(problema)
você me salvou cara, obrigado mesmo
Poh cara, deu certo. Valeuuuuuuuuuuuu!!!!
Parabéns mano!!!
Até hoje esse tuto salvando vidas!!!
Muito Obrigado!
Onde que eu entro pra fazer esse código, amigo?
Não entendi 🙁
pelo console
Onde se entra pra fazer este código ??????
no console
Onde eu entro para fazer este código?
no console
Pra mim continua dando o erro… fiz um monte devez e continua
$ sudo service mysql start
$ mysql -u root
ERROR 1698 (28000): Access denied for user ‘root’@’localhost’
Tenta entrar como root da máquina e depois faz o mysql -u root.