Category: Bases de datos


Actualmente, a la hora de desarrollar aplicaciones, se utilizan multitud de frameworks que nos abstraen de la base de datos que se utilizan. A pesar de las ventajas que esto proporciona, tiene un pequeño “pero”. Perdemos el control sobre las consultas, y en algún momento del desarrollo acabaremos teniendo algún problema que podriamos solucionar rápidamente sabiendo la consulta exacta que se ejecuta.

Para evitar este tipo de cosas, Mysql dispone de un estupendo log de consultas, que podemos activar  y ver la consulta exacta que hace nuestro framework a la base de datos.

Para activar y ver dicho log es bastante sencillo:

mysql> set global general_log='on';
mysql> set global log_output='table';
mysql> select * from mysql.general_log\G

El resultado será algo parecido a esto:

*************************** 47. row ***************************
event_time: 2012-08-29 11:43:46
user_host: root[root] @ localhost [127.0.0.1]
thread_id: 85
server_id: 1
command_type: Query
argument: SHOW FULL COLUMNS FROM `activites` FROM `gas` LIKE 'journee'
*************************** 48. row ***************************
event_time: 2012-08-29 11:43:46
user_host: root[root] @ localhost [127.0.0.1]
thread_id: 85
server_id: 1
command_type: Query
argument: INSERT INTO gas.activites (id, matricule, secteur, secteur2, CIN,
journee) VALUES (0, 30, 4, 4, '12345678X', null)

Donde vemos las consultas que se hacen directamente en la base de datos y detectar posibles errores que nos den una idea de por donde encaminar una posible solución.

Una vez que acabemos, es recomendable desactivar los logs, por tema de eficiencia y para no llenar de basura la tabla, que en un futuro nos haga más dificil volver a buscar fallos.

mysql> set global general_log='off';

En caso de querer vaciar la tabla de log, tan sencillo como:

truncate table mysql.general_log;

Y para acabar, este truquito, lo ví en el libro Mysql Troubleshooting de O’Really , que tiene bastantes cosas interesantes respecto a mysql.

Después de mucho tiempo sin trabajar con mi servidor local de prueba, habia olvidado la contraseña del usuario root de la base de datos. Así que una googleada rápida he llegado a la siguiente solución:

Usted puede recuperar la contraseña del servidor de base de datos MySQL con los siguientes pasos:

Paso 1: Detener cualquier proceso del servidor MySQL.
Paso 2: Iniciar el proceso del servidor MySQL (mysqld) con la opción –skip-grant-tables por lo cual este no preguntará por la contraseña.
Paso 3: Conectar al servidor MySQL como el usuario root
Paso 4: Configurar una nueva contraseña para la nueva contraseña root
Paso 5: Salir y reiniciar el servidor MySQL

A continuación están los comandos necesarios para cada uno de los pasos mencionados anteriormente (iniciar sesión como el usuario root):

Paso # 1: Detener el servicio mysql

# /etc/init.d/mysql stop

Salida:

Stopping MySQL database server: mysqld.

Paso # 2: Iniciar el servidor MySQL sin contraseña:

# mysqld_safe --skip-grant-tables

Salida:

[1] 5988

Iniciando el motor de mysqld de las bases de datos desde /var/lib/mysql

mysqld_safe[6025]: started

Paso # 3: Conectar al servidor mysql usando el cliente mysql:

# mysql -u root

Salida:

Bienvenido al monitor de MySQL.  Comandos y con ; o \g.

Your MySQL connection id is 1 to server version: 5.0.21-log

Tipiar ‘help;’ o ‘\h’ para obtener ayuda. Tipiar ‘\c’ para en vaciar el buffer.

mysql>

Paso # 4: Configurar una nueva contraseña del servidor MySQL para el usuario root:

mysql> use mysql;
mysql> update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
mysql> flush privileges;
mysql> quit

Paso # 5: Detener el servidor MySQL:

# /etc/init.d/mysql stop

Salida:

Stopping MySQL database server: mysqld

STOPPING server from pid file /var/run/mysqld/mysqld.pid

mysqld_safe[6121]: ended

[1]+  Done                    mysqld_safe –skip-grant-tables

Paso # 6: Iniciar el servidor MySQL y verificar la contraseña:

# /etc/init.d/mysql start
# mysql -u root -p

Fuente: http://www.codigomaestro.com/mysql/recuperar-contrasena-root-de-mysql/