A senha do Mysql expirou. Não consigo conectar

86

Acabei de limpar meu Mac e fiz uma nova instalação do El Capitan. Estou lutando para me conectar ao Mysql agora. Depois de passar por um processo de configuração do servidor web, criei um arquivo de teste PHP simples:

<?php
  $conn = new mysqli("127.0.0.1", "root", "xxxxxxxx");
  if ($conn->connect_error) echo "Connection failed: " . $conn->connect_error; 
  else echo "Connected successfully";
  phpinfo();
?>

Quando o executo, recebo este erro:

Warning: mysqli::mysqli(): (HY000/1862): Your password has expired. To log in you must change it using a client that supports expired passwords. in /Users/rich/Documents/DESIGN/test/index.php on line 3
Connection failed: Your password has expired. To log in you must change it using a client that supports expired passwords.

Eu nunca vi essa resposta de uma conexão antes. Como faço para corrigir se não consigo me conectar?

EDITAR

No terminal, digitei o comando:

mysql -u root -p

Isso me pediu minha senha (a atual), que coloquei. Agora tenho acesso aos comandos do mysql, mas tudo que eu tento resulta neste erro:

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

Como faço para redefinir a senha usando ALTER USER?

CaribouCode
fonte
Estou tendo o mesmo problema.
Rohan Sanap de
é realmente irritante que um serviço inteiro possa ser encerrado por causa disso
tofutim
1
Tente correr/usr/local/mysql/bin/mysqladmin -u root -p password
Connor Leech
1
@ConnorLeech passou horas tentando redefinir a senha de root expirada do MariaDB do homebrew, mas isso corrigiu para mim - obrigado!
Alex Holsgrove

Respostas:

178

Então, finalmente encontrei a solução sozinho.

Em primeiro lugar, entrei no terminal e digitei:

mysql -u root -p

Isso pedia minha senha atual que eu digitei e me deu acesso para fornecer mais comandos mysql. Qualquer coisa que tentei daqui deu este erro:

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

Isso é confuso porque não consegui ver uma maneira de redefinir a senha usando a ALTER USERinstrução, mas encontrei outra solução simples:

SET PASSWORD = PASSWORD('xxxxxxxx');

CaribouCode
fonte
Funcionou corretamente? Houve algum erro após seguir essas etapas no futuro?
Rohan Sanap de
Muito obrigado! Isso funcionou para mim também. Me salvou muitas horas.
TBJ de
5
Eu uso a versão 5.7.9 do MySQL e agora está obsoleta, pois esta mensagem de erro do prompt de comando do MySQL nos diz: Warning (Code 1287): 'SET PASSWORD = PASSWORD (' <plaintext_password> ')' está obsoleta e será removida em uma futura versão. Use SET PASSWORD = '<plaintext_password>' em vez
Fabiano
Lamento que isso não funcione para mim, mas o alter usuário postado por Piotr N. funcionou. Talvez operando em uma versão diferente do MySQL.
MG Developer
89

Primeiro, eu uso:

 mysql -u root -p

Fornecendo minha senha atual para o 'root'. Próximo:

mysql> ALTER USER `root`@`localhost` IDENTIFIED BY 'new_password',
       `root`@`localhost` PASSWORD EXPIRE NEVER;

Mude 'new_password'para uma nova senha para o usuário 'root'.
Isso resolveu meu problema.

Piotr N.
fonte
3
Obtendo erro: ERROR 1064 (42000): Você tem um erro na sintaxe SQL; verifique o manual que corresponde à versão do seu servidor MySQL para a sintaxe correta a ser usada perto de 'USER' root '@' localhost 'IDENTIFICADA POR' newPassword ',' root '@' localhost 'PASSWORD' na linha 1
Ketav Chotaliya
Isso funcionou bem. ALTER USER 'username' @ '%' IDENTIFICADO POR 'your_password', 'user' @ '%' PASSWORD EXPIRE NEVER;
TheLegendaryCopyCoder
1
Obtendo erro: ERROR 1805 (HY000): Column count of mysql.user is wrong. Expected 45, found 46. The table is probably corrupted
Pulkit Pahwa
52

mysqladmin -u [username] -p passwordtrabalhou para mim no OS X El Capitan e MySQL 5.7.12 Community Server. Exemplo:

$ /usr/local/mysql/bin/mysqladmin -u root -p password
Enter password:
New password:
Confirm new password:
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

Isso é semelhante à resposta de pavan sachi, mas com solicitações de senha.

Meu erro foi "# 1862 - Sua senha expirou. Para fazer login, você deve alterá-la usando um cliente que ofereça suporte a senhas expiradas." na tela de login do phpMyAdmin pela primeira vez.

Kit
fonte
Funcionou para mim também, OS X El Capital e MySQL 5.17.13! Obrigado por isso!
Zeke de
5
Vale a pena mencionar que a palavra "senha" não é um espaço reservado , enquanto "root" é o nome do usuário que você gostaria de atualizar:mysqladmin -u [username] -p password
random_user_name
Esta é a única coisa que (aparentemente) funcionou para mim no Linux (Fedora 25). Obrigado.
Avinash Meetoo de
Aleluia!! melhor. comando. sempre. Procurei em todos os lugares, mas finalmente foi isso que o resolveu. Muito obrigado
Connor Leech
18

Vencimento da senha do MySQL

Redefinir a senha resolverá o problema apenas temporariamente. Do MySQL 5.7.4 a 5.7.10 (para encorajar melhor segurança - consulte MySQL: Política de expiração de senha ), o default_password_lifetimevalor da variável padrão é 360 (1 ano). Para essas versões, se você não fizer alterações nesta variável (ou nas contas de usuário individuais), todas as senhas expiram após 360 dias.

Portanto, a partir de um script, você pode obter a mensagem: "Sua senha expirou. Para fazer login, você deve alterá-la usando um cliente que ofereça suporte a senhas expiradas."

Para interromper a expiração automática da senha, faça login como root ( mysql -u root -p) e, em seguida, para clientes que se conectam automaticamente ao servidor (por exemplo, scripts), altere as configurações de expiração da senha:

ALTER USER 'script'@'localhost' PASSWORD EXPIRE NEVER;

OU você pode desativar a expiração automática de senha para todos os usuários :

SET GLOBAL default_password_lifetime = 0;

Como apontado por Mertaydin nos comentários, para tornar isso permanente, adicione a seguinte linha a um my.cnfarquivo que o MySQL lê na inicialização, no [mysqld]grupo de configurações. A localização de my.cnfdepende da sua configuração (por exemplo, Windows ou Homebrew no OS X ou um instalador) e se você deseja isso por usuário no Unix ou global:

[mysqld] default_password_lifetime = 0 (Pode haver outras configurações aqui também ...)

Veja a documentação do MySQL sobre arquivos de configuração .

Dave Everitt
fonte
2
Com uma senha já expirada, apenas a configuração global funcionou para mim.
maaartinus
2
Você pode adicionar este parâmetro a /etc/mysql/my.cnf, no mysqld; default_password_lifetime = 0 caso contrário, após a reinicialização do mysql você obterá o mesmo erro novamente.
mertaydin
2
Obrigado @Dave Everitt e @mertaydin!
WebMW
11

Eu passei pelo mesmo problema recentemente ao instalar o mysql no mac os x capitan. Não encontrei a resposta correta aqui, então adicionei esta resposta.

O MySql nas versões atuais, gera uma senha temporária quando você instala o mysql. Use esta senha para definir uma nova senha usando o utilitário mysqladmin conforme abaixo;

/ usr / local / mysql / bin / mysqladmin -u root -p '<sua senha temporária>' senha '<sua nova senha>'

Espero que ajude você e outras pessoas.

Pavan Sachi
fonte
7

Basta baixar o ambiente de trabalho MySQL para efetuar login. Ele solicitará que você altere a senha imediatamente e automaticamente.

Grassright
fonte
4

iniciar MYSQL em modo de segurança

mysqld_safe --skip-grant-tables &

Conecte-se ao servidor MYSQL

mysql -u root

execute comandos SQL para redefinir a senha:

use mysql;
SET GLOBAL default_password_lifetime = 0;
SET PASSWORD = PASSWORD('new_password');

Última etapa, reinicie seu serviço mysql

Dylan B
fonte
4

Eu enfrentei esse problema há alguns dias. Para melhor solução para a versão 5.7 do MySQL; Faça login em seu console mysql e altere sua senha com o seguinte comando:

ALTER USER `root`@`localhost` IDENTIFIED BY 'new_password', `root`@`localhost` PASSWORD EXPIRE NEVER;
Mehmet MERCAN
fonte
4

AVISO: isso permitirá que qualquer usuário faça o login

Eu tinha que tentar outra coisa. Visto que minha senha de root expirou e a alteração não era uma opção porque

Column count of mysql.user is wrong. Expected 45, found 46. The table is probably corrupted

temporarly acrescentando skip-grant-tablessob [mysqld]no my.cnfe reiniciar mysql fez o truque

Marius.C
fonte
4

No Windows no phpmyadmin, olhe em Variáveis: default_password_lifetime e mude para 0 (em vez de 360), aproveite.

É possível que o mySQL leve novamente 360 ​​dias, então adicione my.ini:

[mysqld]
default_password_lifetime=0

E reinicie o mysql.

Laurent Zminka
fonte
É possível que o default_password_lifetime leve novamente 360 ​​dias, então em my.ini adicione:
Laurent Zminka
4

Isso funcionou para mim:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourpassword','root'@'localhost' PASSWORD EXPIRE NEVER;
Robert Saylor
fonte
1

reinicie o servidor MySQL com a opção --skip-grant-tables e depois defina uma nova senha de root

$ mysql -u root
mysql> USE mysql;
mysql> UPDATE user SET password=PASSWORD("NEWPASSWORD") WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> quit

Agora, se você precisar, pode atualizar a tabela mysql.user (campo password_expired = 'N') para não expirar a senha.

Adarsh ​​Gangadharan
fonte
Ao inserir o primeiro comando mysql -u root, recebo este erro:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
CaribouCode
mysql -u root -pSó para constar, consegui entrar alterando o primeiro comando para depois ele me pediu a senha que eu coloquei. Seu próximo comando não funcionou para mim porque diziaYou must reset your password using ALTER USER statement before executing this statement.
CaribouCode
Você sabe como redefinir a senha usando ALTER USER? Não sou muito bom com o Mysql (sou mais uma pessoa NodeJS / MongoDB).
CaribouCode
1

Todas essas respostas estão usando consoles Linux para acessar o MySQL.

Se você estiver no Windows e usando WAMP, pode começar abrindo o console do MySQL ( click WAMP icon->MySQL->MySQL console).

Em seguida, ele solicitará que você insira sua senha atual, insira-a.

E então digite SET PASSWORD = PASSWORD('some_pass');

Ferrugem
fonte
1

melhor solução fácil:

[PATH MYSQL]/bin/mysql -u root
[Enter password]
SET GLOBAL default_password_lifetime = 0;

e então funciona bem.

Fastorro
fonte
0

A expiração da senha é um novo recurso no MySQL 5.6 ou 5.7.

A resposta é clara: use um cliente que seja capaz de alterar senhas expiradas (acho que o Sequel Pro pode fazer isso).

A biblioteca MySQLi obviamente não é capaz de alterar a senha expirada.

Se você tiver acesso limitado ao host local e tiver apenas um cliente de console, o cliente mysql padrão pode fazer isso.

Daniel W.
fonte
2
Obrigado pela sua resposta. Baixei o Sequel Pro e tentei conectar via socket com ele. Recebo o mesmo erro sobre a senha ter expirado ...
CaribouCode
0

Abra o console MySQL e digite SET PASSWORD = 'sua senha'; e então pressione a tecla ENTER que definirá sua senha definida para o usuário root.

Você só pode escrever SET PASSWORD = ''; que definirá a senha como em branco para o usuário root.

Prasant Kumar
fonte
0

Eu fiz algo assim.

UPDATE mysql.user SET authentication_string = PASSWORD(''), password_expired = 'N' WHERE User = 'root' AND Host = 'localhost';
Marcel Zebrowski
fonte
1
You must reset your password using ALTER USER statement before executing this statement.
Weijing Jay Lin