Necesito reiniciar MySQL en Ubuntu 16.04 con la --skip-grant-tables
opción habilitada, pero no sé mi contraseña de root o no funciona. ¿Cómo puedo configurar --skip-grant-tables
sin 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-tables
pará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-networking
opció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-tables
y 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
.