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?


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');


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.


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.


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 .


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.


7

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


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


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;

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


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.


É 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;

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.


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');


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.



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.


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.


0

Eu fiz algo assim.

UPDATE mysql.user SET authentication_string = PASSWORD(''), password_expired = 'N' WHERE User = 'root' AND Host = 'localhost';

1
You must reset your password using ALTER USER statement before executing this statement.
Weijing Jay Lin
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.