no se puede restablecer la contraseña de root de mysql

28

Necesito restablecer la contraseña de root de mi instalación local de mysql pero no me lo permitió. He intentado esto:

$ sudo /etc/init.d/mysql stop
 * Stopping MySQL database server mysqld                                                                                                              [ OK ] 
[1]-  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
[2]+  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
reg@regDesktopHome:~$ sudo mysqld --skip-grant-tables &
[1] 13651
reg@regDesktopHome:~$ 140627 19:02:02 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.

reg@regDesktopHome:~$ mysql -u root mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
reg@regDesktopHome:~$ sudo mysql -u root mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[1]+  Exit 1                  sudo mysqld --skip-grant-tables

¿Cómo puedo restablecer la contraseña? edit 1 Tengo esto:

$ ps ax| grep mysql
16515 ?        Ssl    0:00 /usr/sbin/mysqld
16551 pts/23   S+     0:00 grep --color=auto mysql
reg@regDesktopHome:~/semios/v3upgrade$ sudo kill -9 16515
reg@regDesktopHome:~/semios/v3upgrade$ ps ax| grep mysql
16678 ?        Ssl    0:00 /usr/sbin/mysqld
16715 pts/23   S+     0:00 grep --color=auto mysql
reg@regDesktopHome:~/semios/v3upgrade$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

parece que un proceso se reinicia automáticamente mysql tan pronto como lo mato ...

stdcerr
fuente

Respuestas:

43

Primero, intenta usar

mysql -u root -p

e ingrese su contraseña (si lo recuerda) en la solicitud para iniciar sesión como usuario raíz de SQL (tenga en cuenta que el cambio -pes para contraseña).

Si realmente tiene que restablecer su contraseña de root para mysql, esta es una manera fácil: reconfigurar el paquete con dpkg-reconfigure.

Pasos sencillos para restablecer la contraseña de root mySQL:

  1. Verifique la versión de su mysql-server;

    apt-cache policy mysql-server
    

    y vea la línea que muestra la versión instalada entre otra información. Por ejemplo, para mi instalación es:

    Installed: 5.5.37-0ubuntu0.12.04.1
    

    (De esto sé que lo he mysql-server-5.5instalado en mi sistema).

  2. Comience la reconfiguración con:

    sudo dpkg-reconfigure mysql-server-*.*
    

    donde mysql-server-*.*debe ser reemplazado por la versión que tiene. (para mí sería mysql-server-5.5) Esto detendrá el daemon de la base de datos. Aparecerá un mensaje donde deberá ingresar su nueva contraseña y confirmar la reconfiguración.

    snap1

    El demonio se iniciará automáticamente una vez que se complete la reconfiguración.

  3. Luego puede iniciar sesión con:

    mysql -u root -p
    

    e inicie las tareas de administración de su base de datos.

Referencias

  1. https://help.ubuntu.com/community/MysqlPasswordReset [Que pronto se limpiaría como se indica en la página.]

  2. Guía del servidor de Ubuntu relacionada con su versión específica.

preciso
fuente
2
Puede confirmar que dpkg-reconfigure mariadb-server-10.1funcionó para MariaDB cuando todas las demás soluciones no funcionaron. Gracias por esto.
liviucmg
19
dpkg-reconfigureno solicitó la contraseña para mí ... ¿hay alguna forma de forzarla?
Unirgy
15
No funciono para mi. Utilicé el comando anterior y obtuve "Comprobando si se necesita una actualización. Esta instalación de MySQL ya está actualizada a 5.7.13, use --force si aún necesita ejecutar mysql_upgrade". El uso de --force dio la misma respuesta.
Anthony Scaife
55
Aparentemente esto ya no funciona.
dpi
1
@Paulo Henrique No. Dada la situación, decidimos que el mejor uso de nuestro tiempo era la reinstalación completa del servidor.
Anthony Scaife
21

Referencia tomada de este blog:

Paso 1: Detenga el servicio MySQL.

sudo service mysql stop

Paso 2: Mata a todos los que ejecutan mysqld.

sudo killall -9 mysqld

Paso 3: Iniciando mysqld en modo seguro.

sudo mysqld_safe --skip-grant-tables --skip-networking &

Paso 4: Inicie el cliente mysql

mysql -u root

Paso 5: Después de iniciar sesión correctamente, ejecute este comando para cambiar cualquier contraseña.

FLUSH PRIVILEGES;

Paso 6: puede actualizar la contraseña de root de mysql.

UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';

para mysql> 5.7 use esto en lugar de lo anterior:

UPDATE mysql.user SET authentication_string=PASSWORD('newpwd') WHERE User='root';

Paso 7: ejecute este comando.

FLUSH PRIVILEGES;

Paso 8: Salga de la consola mysql

exit

Paso 9: Mata mysqld_safe y comienza mysql

sudo killall mysqld_safe && sudo service mysql start
Anvesh
fuente
1
debería ser sudo service mysql stop, nosudo stop mysql
knocte
1
Además, al final le faltan los pasos sudo killall mysqld_safe && sudo service mysql starty luego intente iniciar sesión de nuevo
toque el
3
Para MYSQL 5.7, la sintaxis de cambio de contraseña cambió aALTER USER root IDENTIFIED BY 'NEW_PASSWORD_HERE'
Tarek Fadel el
77
¡ NOTA ! Hay una nueva bestia en MySQL 5.7 llamada auth_socket. Si instala mysql sin una contraseña de root, la bestia lo atacará y perderá 50 puntos de vida. En el paso 6 anterior, debes hacerlo ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASS';. Puedes leer sobre esto aquí . Teóricamente (no lo intenté), debería poder iniciar sesión en mysql sin una contraseña si "sudo su -" se convierte en root.
olafure
3
Y en caso de ALTER USER ...que no funcione, useUPDATE mysql.user SET authentication_string = PASSWORD('NEWPASS'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';
olafure
9

Bajo Ubuntu 16.04 y mysql-server-5.7, la respuesta correcta es el último comentario de olafure, dpkg-reconfigure mysql-server-5.7ya no funciona.

sudo service mysql stop
sudo killall mysqld
sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root

Ahora en la consola mysql >mysql

USE mysql;
UPDATE user SET authentication_string=PASSWORD('newpass') WHERE user='root';
FLUSH PRIVILEGES;
\q

Reiniciar el buen mysql proceso

sudo killall mysqld
sudo service mysql start

Comprueba tu nueva contraseña

mysql -u root -p
Enter password: newpass
mysql>
Pierre-Damien
fuente
55
En mysqld_safela ejecución, me sale el error: Directory '/var/run/mysqld' for UNIX socket file don't exists.. Así que corrí sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqldy el resto de la respuesta anterior funciona. ¿Es esto un error en Ubuntu 16? Nunca antes había experimentado todos estos problemas al actualizar las contraseñas.
Chester
@Chester muchas gracias !! Esta fue la única forma en que finalmente funcionó ahora, ya que todas las demás soluciones arrojan un error. (Ubuntu-Server 16.04 aquí) Esto debería agregarse a la respuesta
derHugo
3

Comenzando con MySQL 5.7 , durante la instalación inicial, si deja la contraseña vacía, para ese usuario, la autenticación se basará en el auth_socketcomplemento.

La forma correcta de cambiar la contraseña será:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';

https://www.percona.com/blog/2016/03/16/change-user-password-in-mysql-5-7-with-plugin-auth_socket/

Barun
fuente
Este fue mi caso exacto (contraseña vacía durante la instalación en mysql 5.7) y esta fue la única solución para mi caso.
cherouvim
Recibo el mensaje:ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
user2513149
@ user2513149 Reinicie su servidor MySQL sin --skip-grant-tablesopción y vea que esta solución funciona.
Barun
@Barun, no, sin la --skip-grant-tablesopción ni siquiera puedo iniciar sesión en MySQL como root. DiceERROR 1698 (28000): Access denied for user 'root'@'localhost'
user2513149
Resuelto! Tuve que iniciar sesión en la consola MySQL normal (no mysqld_safe) como root sin contraseña. Tengo Ubuntu 18.04 y mysql-server-5.7. Esta respuesta me ayudó a askubuntu.com/a/767252/585252 (ver la parte inferior)
user2513149
1

Nada del resto de las respuestas parecía funcionar para mí. Esta es mi solución:

sudo service mysql stop
sudo mysqld_safe &
sudo mysql -u root

Ahí:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
FLUSH PRIVILEGES;
QUIT;

Luego:

sudo killall mysqld
sudo service mysql start
sudo mysql -u root -p
Wtower
fuente
1
El resto no funciona para mí tampoco ... ni desafortunadamente su solución: todavía recibo este error 2017-05-30T06:33:22.291126Z mysqld_safe Logging to syslog. 2017-05-30T06:33:22.294375Z mysqld_safe Logging to '/var/log/mysql/error.log'. 2017-05-30T06:33:22.296874Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
derHugo
1
Este es el único consejo que me funciona de las seis sugerencias que probé, pero agregué el bit de @Chester anterior para evitar el error "El archivo de socket UNIX no existe": sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqldEsto está en mysql 5.7 y ubuntu 18.04 .
twowheeler