Como alterar a senha 'root' do MySQL usando o MySQL v5.7?

14

Ambiente atual:

mysql> show variables like "%version%";
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| innodb_version          | 5.7.13                       |
| protocol_version        | 10                           |
| slave_type_conversions  |                              |
| tls_version             | TLSv1,TLSv1.1                |
| version                 | 5.7.13                       |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86_64                       |
| version_compile_os      | Linux                        |
+-------------------------+------------------------------+
8 rows in set (0.01 sec)

Usuário do comando Password Change:

mysql> update user set password=PASSWORD("XXXX") where user="root";
ERROR 1054 (42S22): Unknown column 'password' in 'field list'

Estou esquecendo de algo?

Shivu RH
fonte
tente iniciar mysqlno modo de segurança. em seguida, você pode alterar a senha de root
Mongrel
Para quem está lendo este tópico. O MySQL 5.7 tem mudanças substanciais sob o capô. Leia sobre eles antes de atualizar.
Rui F Ribeiro

Respostas:

24

No MySQL 5.7, o passwordcampo no campo da mysql.usertabela foi removido, agora o nome do campo é authentication_string.

Primeiro escolha o banco de dados:

mysql> use mysql;

E então mostre as tabelas:

mysql> show tables;

Você encontrará a usertabela e verá seus campos:

mysql> describe user;

Você perceberá que não há campo nomeado password, o campo da senha é nomeado authentication_string. Então, faça o seguinte:

update user set authentication_string=password('XXXX') where user='root';

Conforme sugerido por @Rui F Ribeiro, como alternativa, você pode executar:

mysql> SET PASSWORD FOR 'root' = PASSWORD('new_password');
Rahul
fonte
1
+1 para a referência authentication_string. Também descobri recentemente depois de atualizar para o 5.7
Rui F Ribeiro
4
Embora não seja totalmente direcionado a esta resposta, outra alternativa para o 5.7 éSET PASSWORD FOR 'root' = PASSWORD('new_password');
Rui F Ribeiro
1
@RuiFRibeiro obrigado, atualizou minha resposta
Rahul
1
Rahul Inicialmente, editei o tópico para mais tarde do que 5.7, mas depois mudei para o MySQL 5.7, para manter o espírito da pergunta. por exemplo, @Shivu não sabia que era uma alteração em 5,7.
Rui F Ribeiro
1
É uma maneira de enquadrar a questão. Não estamos editando perguntas e respostas apenas para o benefício do OP, mas também para outros posteriormente.
Rui F Ribeiro
2

A maneira do MySQL de alterar a senha é SET PASSWORD

SET PASSWORD FOR 'root' = PASSWORD('new_password');

veja Manual de Referência do MySQL 5.7 / ... / SET PASSWORD Sintaxe

A instrução SET PASSWORD atribui uma senha a uma conta de usuário do MySQL, especificada como um texto não criptografado (não criptografado) ou um valor criptografado:

'auth_string' represents a cleartext password.

'hash_string' represents an encrypted password.

A resposta aceita de Rahul mostra como atualizar a senha com o DMLextrato.

update user set authentication_string=password('XXXX') where user='root';

Aviso: essa não é a maneira oficial e suportada. Pode causar problemas, se você não souber o que está fazendo. Não se esqueça FLUSH PRIVILEGES.

Para a maioria das operações, como criar um usuário, alterar seus privilégios ou alterar sua senha, convém usar as instruções de alto nível. Eles não apenas são mais fáceis de usar como também são compatíveis com um número maior de versões do MySQL, mas também impedem que você cometa erros (é claro, lembre-se de configurar o modo sql “NO_AUTO_CREATE_USER”). Eles geralmente funcionam bem em um ambiente hostil ao MyISAM, como um cluster Galera.

Parar de usar FLUSH PRIVILEGES

Por favor, use GRANT, REVOKE, SET PASSWORD, ou RENAME USERe não DML diretos.

Atualização: SET PASSWORD ... = A sintaxe PASSWORD ('auth_string') está obsoleta no MySQL 5.7.6 e será removida em uma versão futura do MySQL.

Ivanov
fonte
1

mysqladmin -u user-name password -p "oldpassword" "newpass"

se você pode fazer o login, tente isso ""não funcionará, tente ''aspas simples

update user set password=PASSWORD("newpass") where User='ENTER-USER-NAME-HERE';

Mongrel
fonte
Enquanto eu prefiro a resposta mysqladmin, veja a resposta de Rahul. Sua consulta SQL está desatualizada. Corrigi o mysqladmin, estava faltando a diretiva de senha.
Rui F Ribeiro
1
Obrigado Ribeiro. Eu perdiauthentication_string
Mongrel
0

No meu caso

mysql.server start
$ mysql -uroot
mysql> update user set authentication_string=password('123456') where User='root';
mysql> exit;
mysql.server restart (if you not restart , connection will not work.)

Então eu acho que o seu comando update está certo, mas você precisa reiniciar o servidor mysql.

Jack LI
fonte
-1

Para esse problema, usei um método simples e rude, renomeie o nome do campo para senha, o motivo é que utilizo o software mac navicat premium no erro de operação visual: coluna desconhecida 'password' em 'field List', the O próprio software usa senha para que eu não possa operar facilmente. Portanto, faço root na linha de comando do banco de dados, execute

Use mysql;

E modifique o nome do campo:

ALTER TABLE user CHANGE authentication_string password text;

Afinal normal.

luyishisi
fonte