01 junio 2012

Cambiar la contraseña root de MySQL

Es posible que tengamos que administrar una base de datos MySQL y, por la razón que sea, no tengamos la contraseña de root. Esta situación, que es más habitual de lo que nos imaginamos, presenta un grave problema porque nos impide crear nuevas base de datos, nuevos usuarios, etc.

En este tutorial vamos a ver cómo se puede cambiar la contraseña de root de MySQL desde la cónsola del sistema y de una forma muy sencilla.

En primer lugar debemos detener el servicio MySQL.
# /etc/init.d/mysql stop
Stopping MySQL database server: mysqld.
A continuación iniciamos de nuevo el servicio, pero en "modo abierto" y en background.
# mysqld_safe --skip-grant-tables --skip-networking &
[1] 18305
120601 12:56:45 mysqld_safe Logging to syslog.
120601 12:56:45 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
En el comando anterior, la opción --skip-grant-tables hace que el servidor no utilice el sistema de permisos, con lo que podremos obtener acceso sin restricciones a todos los usuarios y a todas las bases de datos.

NOTA: Si MySQL fue configurado y compilado con la opción '--disable-grant-options' entonces lo anterior no funcionará y no hay mucho que hacer para poder cambiar la contraseña. En la práctica, por suerte, esta opción no se suele usar.

La opción --skip-networking indicada más arriba hace que MySQL deje de escuchar (LISTEN) conexiones TCP/IP provenientes de la red y opere únicamente en el ámbito local.

Una vez reiniciado el servicio en modo "abierto" y "local", ya podemos acceder al monitor y proceder. Para trabajar con ella, capturaremos la base de datos mysql.
# mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
[...]

mysql> use mysql;
Procedemos a la actualización del campo 'password' del usuario 'root' y, como ya hemos terminado, abandonamos del monitor.
mysql> UPDATE user SET password=PASSWORD('NUEVA_CONTRASEÑA') WHERE user='root';
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> exit
Solo queda reiniciar el servicio mysql.
# /etc/init.d/mysql restart
Stopping MySQL database server: mysqld
120601 12:58:35 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended.
Starting MySQL database server: mysqld.
Checking for corrupt, not cleanly closed and upgrade needing tables..
[1]+  Hecho          mysqld_safe --skip-grant-tables --skip-networking
Lo que ha ocurrido es que se detenido el servicio (que operaba en background y modo "abierto" y "local") y se ha vuelto a iniciar en modo "normal". Desde este momento ya se puede acceder al sistema con la nueva contraseña.

0 comentarios: