systemadmin.es > DBA > Recuperar el password de root del MySQL

Recuperar el password de root del MySQL

A veces ya sea porque no tenemos apuntado el password o porque tenemos que administrar un sistema que no hemos instalado, hace falta recuperar la contraseña de root del MySQL.

Para ello lo que haremos será primero de todo ver con que parámetros se ejecuta el mysqld:

# ps -fea | grep [m]ysqld
mysql    19097  2187  0 09:38 ?        00:00:00 /usr/local/mysql-percona/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --user=mysql --pid-file=/usr/local/mysq/var/inf05.pid --skip-external-locking --port=3306 --socket=/tmp/mysql.sock

Sabiendo los parámetros mataremos el MySQL:

# pkill mysqld

A continuación tenemos dos opciones:

  • Usando el parámetro –skip-grant-tables, el cual hará que podamos conectar el MySQL sin contraseña. Se usaría añadiendo al proceso mysqld la opción y arrancándolo:
    # /usr/local/mysql-percona/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --user=mysql --pid-file=/usr/local/mysq/var/inf05.pid --skip-external-locking --port=3306 --socket=/tmp/mysql.sock --skip-grant-tables 
    

    A continuación ya podemos conectar sin contraseña, por lo que podemos conectar y hacer un update de la contraseña:

    # mysql -u root
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 1376
    Server version: 5.1.30 Source distribution
    
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
    
    mysql> use mysql;
    Database changed
    mysql> update user set password=PASSWORD("Gr3n0bl3\06") where User="root";
    Query OK, 3 rows affected (0.00 sec)
    Rows matched: 3  Changed: 3  Warnings: 0
    
    mysql> flush privileges;
    Query OK, 0 rows affected (0.01 sec)
    

    A continuación solo nos queda reiniciar el MySQL sin el parámetro –skip-grant-tables:

    # /usr/local/mysql-percona/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --user=mysql --pid-file=/usr/local/mysq/var/inf05.pid --skip-external-locking --port=3306 --socket=/tmp/mysql.sock 
    

    Por lo que ya podremos entrar usando la nueva contraseña:

    # mysql -u root
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
    

    Este método supone un riesgo innecesario para la seguridad, siempre podemos usar –skip-networking para evitar conexiones remotas, pero no evita que usuarios locales puedan conectar. Depende del entorno este riesgo puede ser asumible

  • Usando el parámetro –init-file para cambiar la contraseña al arrancar, por lo que no sería posible entrar sin contraseña. Creamos en algún punto donde el MySQL tenga permiso de lectura un fichero con el update:
    # cat /usr/local/mysql/var/update.root
    update mysql.user set password=PASSWORD("Gr3n0bl3\06") where User="root";
    

    A continuación arrancamos el MySQL con el parámetro init-file:

    # /usr/local/mysql-percona/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --user=mysql --pid-file=/usr/local/mysq/var/inf05.pid --skip-external-locking --port=3306 --socket=/tmp/mysql.sock --init-file=/usr/local/mysql/var/update.root 
    

    Por lo que ya podremos conectar usando la nueva contraseña:

    # mysql -u root -p
    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 1376
    Server version: 5.1.30 Source distribution
    
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
    
    mysql>
    

    Por lo que ya podremos borrar el fichero con el update:

    # rm /usr/local/mysql/var/update.root
    

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>