Anuncios

Bienvenidos sean a este post, hoy veremos como usar al log binario para los backups incrementales.

Anuncios
Anuncios

El log binario es una serie de archivos que almacenan las modificaciones que se realizan sobre los datos, es usado principalmente para backup incrementales y replicacion, su proposito es estar disponible para aplicar los cambios a la base nuevamente, en cambio para el caso de la replicacion, los eventos del log binario son enviado por el amo a sus esclavos, asi se pueden aplicar los mismos cambios y son un reflejo de los datos en el amo, si el log binario no esta activo no se puede hacer la replicacion.

Anuncios

Ante un inconveniente los datos pueden ser restaurados al mas completo y reciente backup, este puede ser tanto fisico como logico, si bien despues de esto puede que la informacion sea un poco vieja pero el log binario podria contener los backups incrementales mas recientes, los cuales podremos enviar al servidor y mantener la informacion lo mas actualizado posible, vamos a suponer el siguiente ejemplo.

Anuncios
Anuncios

Tenemos una tienda en linea que usa mariadb, todos los dias los datos cambian ya sea por nuevos productos vendidos o comprados, nuevos usuarios registrados, las estadisticas del trafico del sitio, etc, esto hace que nuestra informacion sea respaldada continuamente pero quizas la base de datos es muy grande y el trafico del sitio sea alta, asi que no queremos desacelerar al sitio y usar una gran cantidad de discos ejecutando de forma frecuente backups completos, para evitar esto elegimos hacer backups completos una vez a la semana, en un dia y hora donde estadisticamente el trafico es mucho mas bajo, vamos a suponer que el backup se hace los domingos pero el dia anterior se corrompe toda la informacion, como hacemos para evitar perder todos los datos de la ultima semana? Una accion que podemos usar es realizar backups incrementales diarios en el horario donde el trafico es el mas bajo, la forma mas conveniente es rotando el log binario.

Anuncios

Cuando nos referimos a la rotacion del archivo del log binario estamos hablando de la creacion de un archivo de log y el usado actualmente se mantiene en el mismo directorio solo para propositos de archivado, esto son utiles para recuperar informacion corrupta pero que sucede si se rompe el disco? Perderemos todo, por esta razon siempre e reccomienda almacenar los logs viejos en una unidad externa al equipo, lo cual nos permitira ir borrando archivos viejos de log para recuperar espacio en el servidor, los eventos del log binario se pueden almacenar en tres formatos:

  • Basado en instruccion
  • Basado en fila
  • Mezclado
Anuncios

Con el primer formato se almacenan unicamente las instrucciones SQL son guardadas, este formato tiene muchas limitaciones dado que algunas instrucciones o funciones pueden generar diferentes resultados si se vuelven a aplicar, un ejemplo es NOW() dado que siempre devuelve la fecha y hora actuales, en cambio con el formato basado en fila se almacenan las modificaciones de los datos, por ultimo el formato mezclado almacena las instrucciones cuando son seguras pero cuando no son seguras almacena la informacion, para activar el log binario podemos usar la siguiente opcion al iniciar el servidor:

--log-bin=ON
Anuncios

Lo mismo podemos hacer agregando la opcion log_bin en el archivo de configuraciones con el valor de ON tambien,la instruccion SHOW MASTER STATUS nos mostrara el nombre actual del archivo de log, funciona aunque no tengamos la replicacion utilizada:

MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      328 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.000 sec)

MariaDB [(none)]>
Anuncios

La instruccion SHOW BINARY LOGS nos permite los archivos actuales y viejos de logs:

MariaDB [(none)]> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       328 |
+------------------+-----------+
1 row in set (0.000 sec)

MariaDB [(none)]>
Anuncios

Los archivos de este log estan escritos de una forma compacta que no pueden ser leidos ni por humanos ni por mariadb, pero para poder leerlo, aplicar cambios o alguna otra tarea podemos usar la herramienta mysqlbinlog, viene incluida con las instalaciones de mariadb y nos traduce los archivos de log en instrucciones SQL, esta herramienta nos permite enviar las instrucciones almacenadas en el log al cliente:

$ mysqlbinlog binlog.000113 binlog.000114 | mariadb -u tinchicus -p
Anuncios
Anuncios

En el ejemplo podemos ver que se pueden enviar varios archivos con una sola invocacion, los archivos deben ser especificados en el orden correcto pero debemos evitar de enviar archivos al servidor con multiples llamadas, esto es debido a que el archivo podria intentar usar una tabla temporal que ha sido creada en otro archivo, con el uso de invocaciones distintas hace que se pierda las tablas temporales al final de la ejecucion del archivo y no estara disponible para el siguiente archivo, sin embargo nos puede ser muy util para recuperar informacion que fue borrada sin querer por una instruccion equivocada (DELETE, DROP TABLE o DROP DATABASE), si es el caso simplemente restauramos el ultimo backup completo y aplicar los ultimos cambios almacenados en el log binario pero esto no volvera a ejecutar la instruccion de borrado? Eso es cierto, vamos a suponer que tenemos que utilizar dos archivos del log binario y para ello podemos hacer lo siguiente:

$ mysqlbinlog binlog.000113 > apply
Anuncios

Primero bajamos este archivo de log a un archivo llamado apply, luego ejecutamos lo siguiente:

$ mysqlbinlog binlog.000114 >> apply
Anuncios

Este agregara al segundo archivo dentro del archivo generado anteriormente, con toda la informacion traducida y almacenada podemos proceder a editar el archivo generado, les dejo un ejemplo:

$ nano apply
Anuncios

Ingresan al archivo y eliminan todas las instrucciones donde figura la accion de eliminar que ejecutamos sin querer, con el archivo editado y guardado pasamos a agregarlo nuevamente:

$ mariadb -u tinchicus -p < apply
Anuncios

En resumen, hoy hemos visto como utilizar al log binario para backups incrementales, una breve explicacion del log binario, como almacena los datos, como activarlo, como ver sus estados, por ultimo una herramienta para traducir los archivos y que nos permite ser utilizados para recuperar la informacion mas reciente, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50

Anuncio publicitario