¿Cómo cambiar la contraseña 'root' de MySQL usando MySQL v5.7?

14

Entorno actual:

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)

Usuario de comando de cambio de contraseña:

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

¿Me estoy perdiendo de algo?

Shivu RH
fuente
intente comenzar mysqlen modo seguro. entonces puede cambiar la contraseña de root
Mongrel
Para cualquiera que lea este hilo. MySQL 5.7 tiene cambios sustanciales bajo el capó. Lea acerca de ellos antes de actualizar.
Rui F Ribeiro

Respuestas:

24

En MySQL 5.7, se eliminó el passwordcampo en el campo de mysql.usertabla, ahora el nombre del campo es authentication_string.

Primero elija la base de datos:

mysql> use mysql;

Y luego muestra las tablas:

mysql> show tables;

Encontrará la usertabla y verá sus campos:

mysql> describe user;

Te darás cuenta de que no hay un campo llamado password, el campo de la contraseña se llama authentication_string. Entonces, solo haz esto:

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

Según lo sugerido por @Rui F Ribeiro, alternativamente puede ejecutar:

mysql> SET PASSWORD FOR 'root' = PASSWORD('new_password');
Rahul
fuente
1
+1 para la referencia de la cadena de autenticación. También me enteré recientemente después de actualizar a 5.7
Rui F Ribeiro
44
Si bien no se dirige completamente a esta respuesta, otra alternativa para 5.7 esSET PASSWORD FOR 'root' = PASSWORD('new_password');
Rui F Ribeiro
1
@RuiFRibeiro gracias, actualicé mi respuesta
Rahul
1
Rahul Inicialmente edité el hilo a más de 5.7, pero luego lo cambié a MySQL 5.7, para mantener el espíritu de la pregunta. Por ejemplo, @Shivu no sabía que es un cambio en 5.7.
Rui F Ribeiro
1
Es una forma de enmarcar la pregunta. No estamos editando preguntas y respuestas solo para beneficio del OP, sino también para otros más adelante.
Rui F Ribeiro
2

La forma de cambiar la contraseña de MySQL es SET PASSWORD

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

consulte el Manual de referencia de MySQL 5.7 / ... / SET PASSWORD Syntax

La instrucción SET PASSWORD asigna una contraseña a una cuenta de usuario de MySQL, especificada como un texto sin cifrar (sin cifrar) o un valor cifrado:

'auth_string' represents a cleartext password.

'hash_string' represents an encrypted password.

La respuesta aceptada de Rahul muestra cómo actualizar la contraseña con una DMLdeclaración.

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

Advertencia: esa no es la forma oficial y admitida. Puede causar problemas si no sabe lo que está haciendo. No se olvide FLUSH PRIVILEGES.

Para la mayoría de las operaciones, como crear un usuario, cambiar sus privilegios o cambiar su contraseña, querrá usar las declaraciones de alto nivel. No solo son más fáciles de usar y son compatibles con una mayor cantidad de versiones de MySQL, sino que también evitarán que cometas errores (por supuesto, recuerda configurar el modo sql "NO_AUTO_CREATE_USER"). Incluso suelen funcionar bien en un entorno hostil MyISAM como un clúster Galera.

Dejar de usar PRIVILEGIOS FLUSH

Por favor, uso GRANT, REVOKE, SET PASSWORD, o RENAME USERy no declaraciones DML directos.

Actualización: SET PASSWORD ... = La sintaxis PASSWORD ('auth_string') está en desuso a partir de MySQL 5.7.6 y se eliminará en una futura versión de MySQL.

Ivanov
fuente
1

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

si puede iniciar sesión, intente esto ""no funcionará intente con ''comillas simples

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

Mestizo
fuente
Si bien prefiero la respuesta mysqladmin, vea la respuesta de Rahul. Su consulta SQL está desactualizada. Corregí el mysqladmin, te faltaba la directiva de contraseña.
Rui F Ribeiro
1
Gracias Ribeiro Me perdíauthentication_string
Mestizo
0

En mi 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.)

Entonces, creo que su comando de actualización es correcto, pero necesita reiniciar su servidor mysql.

Jack LI
fuente
-1

Para este problema, utilicé un método simple y grosero, cambie el nombre del campo a contraseña, la razón de esto es que utilizo el software mac navicat premium en el error de operación visual: columna desconocida 'contraseña' en 'lista de campos', el el software en sí usa contraseña para que no pueda operar fácilmente. Por lo tanto, me dirijo a la línea de comando de la base de datos, ejecuto

Use mysql;

Y luego modifique el nombre del campo:

ALTER TABLE user CHANGE authentication_string password text;

Después de todo lo normal.

luyishisi
fuente