Murphy, again (mysqlbinlog)

Cabezon's picture

"Muchos" habréis notado que el blog ha estado caido varios días. El motivo? básicamente la tormenta qeu cayó hace 15 días y que yo estaba disfrutando de mis vacaciones en Menorca (aish..).
Pensando que el servidor simplemente había caído, le dije a underconst que se acercara al servidor y le diera al power, pensando que sería suficiente y que todo volvería a rular perfectamente (pues va a ser que no...)

Así que cuando anteayer llegué a mi casa vi que tenía un problema con eth0, y es que la tarjeta de red se había estropeado. La cambié y volví a arrancar el server.
La particón /var tenía un huevo y medio de errores que fsck "resolvió" no sin antes dejar otro huevo y medio (y ya van 3) de ficheros en el bonito directorio lost+found (cruzando los dedos para que ningún fichero imporatnte quedara dañado).

El pirmer problema fue ver que la nueva tarjeta era eth2 y no eth0. Así, los servicios, que dependen de que /etc/init.d/net.eth0 arranque, no arrancaban (léase apache2, cyrus, postgrey....).
Para solucionar el problema, edité /etc/udev/rules.d/70-persistent-net.rules y cambié:

#SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:10:a7:17:a3:db", NAME="eth0"
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:e0:4c:83:h8:95", NAME="eth0"

Fijaros que en función de la MAC el sistema asigna un ethX u otro.

Con esto, ya tenía la nueva eth0 funcioanndo.

Pero, iluso de mi, pensé que todo estaría ok, aunque MySQL me deparaba una nueva sorpresa: la bd de drupal había, misteriosamente, desaparecido! Y para maś inri, sólo esa bd!!! la de gallery, la de usuarios y la de test (para hacer guarradas) estaban intactas.
Como mi política de backups es "hazlo cuando te acuerdes" el último válido databa de Junio... (2 meses de interesantes posts perdidos!).
Pregunté en badopi acerca de la recuperación de ficheros en ext3 (por lo del lost+found), pero no hubo mucha suerte... Aunque gracias a una respuesta de Ignacio Torres descubrí el binarylog de Mysql. Éste guarda un registro de todo lo que se escribe en la bd, y con suerte, se podía recuperar la información perdida (siempre que los .bin estubieran bien, claro).
Así que tras una lectura rápida del man de mysqlbinlog me dispuse a recuperar los archivos del blog. Esto es lo que hice:

1.-) Crear la bd de drupal otra vez.

2.-) recuperar el último backup:
afrodita mysql # mysql -u root -p drupal < /root/backups/drupal_junio.sql
Enter password:

3.-) volvcar a un fichero de texto el bin (del 1 de Julio) sólo la parte de
drupal:
afrodita mysql # mysqlbinlog -d drupal afrodita-bin.000018 > /tmp/mysql_restore.sql

*nótese el -d drupal

4.-) Tratar de meterlo en la bd otra vez cruzando los dedos:
afrodita mysql # mysql -u root -p < /tmp/mysql_restore.sql

Afortunadamente funcionó perfectamente, y el resto de .bin se añadieron también (un pequeño for lo hizo por mi), y así recuperé toda la información perdida....

Ah! por cierto, por defecto no tiene porque estar activada la opción que genera los logs binarios de mysql, así que hay que añadir en /etc/mysql/my.cnf algo como log-bin=afrodita-bin.

Espero que le sirva a alguien!!!