mysql

Recuperar contraseña root en MySQL

En este pequeño truco se muestra la manera de recuperar la contraseña de root en mysql en caso de perdida u olvido.

Decir que este método no es válido si MySQL fue compilado y configurado con la opción '--disable-grant-options'.

Detenemos el servicio

#>service mysqld stop

Iniciamos en modo seguro o completo

#>mysqld_safe --skip-grant-tables --skip-networking&

La opción --skip-grant-tables evita que el servidor use el sistema de privilegios con lo que conseguimos acceso ilimitado a todas las bases de datos con cualquier usuario.

Con la opción --skip-networking evitamos que durante el periodo de tiempo que dure el proceso, el servidor escuche conexiones TCP/IP. Solo trabajamos en un ambiente local. Así evitamos que alguien se nos cuele en la base de datos.

Iniciamos el cliente mysql como root

#>mysql -u root

En este caso no nos va a pedir la contraseña.

Conmutamos a la base de datos de mysql

mysql> use mysql;

Ejecutamos el comando para asignar la contraseña

mysql> UPDATE user SET password=PASSWORD('nuevo_pass') WHERE user='root';
Query OK, 3 rows affected (0.07 sec)
Rows matched: 3 Changed: 1 Warnings: 0
mysql> exit
#>

Reiniciamos el servidor

#> service mysqld restart

La siguiente vez que ingresemos ya nos pedirá la nueva clave.

Un par de trucos de MySQL

El primero de los trucos consiste en detectar aquellas consultas que se ejecutan en nuestra base de datos MySQL sin haber definido un indice. Estas consultas acaban produciendo problemas de rendimiento.

Para ello se usa el parámetro log_queries_not_using_indixes.

mysql> set global log_queries_not_using_indixes=1;
Query OK, 0 rows affected (0.00 sec)

Este parámetro se puede habilitar y deshabilitar en caliente y además de mostrarnos las consultas definidas sin índices también nos muestra aquellas consultas del tipo "SELECT * FROM tabla", es decir, las que obtienen todos los resultados.

Bien, pero ¿donde se ven cuales son esas consultas? La respuesta la tienes en el fichero my.cnf (en /etc/my.cnf en RHEL y Centos o bien en /etc/mysql/my.cnf en Debian y derivadas). En ese fichero localiza la sección mysqld.

[mysqld]
long_query_time         = 1
log-slow-queries        = /var/log/mysql/mysql-slow.log

La configuración mostrada nos guardará en el archivo /var/log/mysql/mysql-slow.log aquellas consultas que tarden más de 1 segundo en ejecutarse.

El segundo de los trucos consiste en utilizar el comando mysql_upgrade después de una actualización de MySQL. Este comando examina todas las tablas de todas las base de datos buscando incompatibilidades con la versión actual de MySQL. mysql_upgrade también actualiza las tablas del sistema para que puedas coger ventaja de los nuevos privilegios o características añadidas en la nueva versión recién instalada.

Para ejecutarlo debemos de asegurarnos que la base de datos está levantada y ejecutándose y en una shell invocamos el comando:

[djlongo@djlongo ~]$ mysql_upgrade

En resumen, ejecuta mysql_upgrade después de un apt-get upgrade o de un yum update en el que se actualice MySQL. Si no lo haces el sistema de base de datos se comportará de forma extraña, más cuanto más grande sea la diferencia entre versiones.

Distribuir contenido