¿Cómo reiniciar MySQL con --skip-grant-tables si no puedes usar la contraseña de root?

¿Cómo reiniciar MySQL con --skip-grant-tables si no puedes usar la contraseña de root?

Necesito reiniciar MySQL en Ubuntu 16.04 con la --skip-grant-tablesopción habilitada, pero no sé mi contraseña de root o no funciona. ¿Cómo puedo configurar --skip-grant-tablessin la contraseña?

Cuando lo pruebo como usuario habitual:

mysqld --skip-grant-tables

Veo esto:

mysqld: Can't change dir to '/var/lib/mysql/' (Errcode: 13 - Permission denied)

Entonces, saqué este ejemplo de /etc/init.d/mysql y agregué el --skip-grant-tablesparámetro:

su - mysql -s /bin/bash -c "/usr/sbin/mysqld --skip-grant-tables"
Password: 
su: Authentication failure

Entonces su no funciona y la contraseña de root tampoco funcionó. También probé esto:

sudo su - mysql -s /bin/bash -c "/usr/sbin/mysqld --skip-grant-tables"
No directory, logging in with HOME=/

¿Cómo puedo iniciar MySQL con --skip-grant-tables?

Respuesta1

Cuando no conoce su contraseña de root (o un error como el 'ERROR 1045 (28000): Access denied for user 'root'@'localhost'que impide el acceso), puede obtener acceso agregando la opción al archivo de configuración de MySQL. Primero ábrelo para editarlo:

sudo nano /etc/mysql/my.cnf

Luego busque [mysqld]e ingrese estos valores debajo:

[mysqld]
# For debugging and recovery only #
skip-grant-tables
skip-networking
###################################

Como puede ver, el truco para agregar parámetros de línea de comando aquí es eliminar el --desde el frente del parámetro. Ahorareiniciar el servicio mysqly puede acceder a sus tablas para restablecer su contraseña de usuario root o casi cualquier cosa que necesite hacer. (Sin embargo, no puede hacer nada con las tablas de concesión porque no están cargadas).

Tener cuidado.Mientras estás en este modo, cualquier usuario que haya iniciado sesión tiene acceso a toda tu base de datos. Es por eso que agregué la skip-networkingopción anterior, para que los usuarios remotos no puedan acceder a las tablas mientras se recupera.

Asegúrese de comentar esas líneas y reinicie mysql una vez más cuando haya terminado, para volver a proteger el servidor.

Respuesta2

De comentarios.

Para configuraciones de init.rc:

El método más sencillo sería modificar temporalmente /etc/init.d/mysql para incluir la opción --skip-grant-tablesy luego iniciarlo con este script (/etc/init.d/mysql start).

En sistemas nuevos como Ubuntu 16.04, esto debe hacerse en formato /lib/systemd/system/mysql.service.

información relacionada