diffs rodando para el almacenamiento de files muy similares?

En el trabajo, hacemos un volcado nocturno de nuestras bases de datos mysql. De día en día, me gustaría estimar que cerca del 90-95% de los datos están duplicates, y que aumentan con el paso del time. (Diablos en este momento, algunos son probablemente 99%)

Estos volcados son donde una línea es una única instrucción mysql INSERT, por lo que las únicas diferencias son líneas enteras y el order en el que están en el file. Si los orderara, la diferencia real de un file a otro sería muy pequeña.

He estado buscando, y no he encontrado ninguna forma de orderar la salida en el volcado. Sin embargo, podría canalizarlo a través del command de sort . Entonces habría bloques largos y largos de líneas idénticas.

Así que estoy tratando de encontrar la forma de almacenar solo las diferencias. Podría comenzar con un vertedero maestro y diferenciarlo cada noche. Pero las diferencias serían mayores cada noche. O bien, podría hacer difusiones rodadas, que individualmente serían muy pequeñas, pero parece que tomaría más y más time calcularlas, si tengo que armar un diff maestro de toda la serie cada noche.

¿Es esto factible? ¿Con qué herramientas?


Editar No estoy preguntando cómo hacer copys de security de mysql. Olvídate de mysql por el momento. Es un arenque rojo. Lo que quiero saber es cómo hacer una serie de diffs continuos de una serie de files. Cada noche obtenemos un file (que pasa a ser un file mysqldump ) que es 99% similar al anterior. Sí, los descomprimimos todos. Pero es networkingundante tener toda esa networkingundancia en primer lugar. Todo lo que realmente necesito son las diferencias con respecto a la noche anterior … que es solo un 1% diferente de la noche anterior … y así sucesivamente. Entonces, lo que busco es cómo hacer una serie de diffs, así que solo necesito almacenar ese 1% cada noche.

Dos herramientas de respaldo que pueden almacenar diffs binarys son rdiff-backup y duplicity . Ambos se basan en librsync , pero por encima de eso se comportan de manera bastante diferente. Rdiff-backup almacena la última copy y las diferencias inversas, mientras que la duplicidad almacena las diferencias incrementales tradicionales. Las dos herramientas también ofrecen un set diferente de características periféricas.

Últimamente he estado probando el almacenamiento de volcados de bases de datos en git. Esto puede ser poco práctico si los depósitos de la database son realmente grandes, pero me ha funcionado para bases de datos pequeñas (sitios de WordPress y similares).

Mi script de respaldo es aproximadamente:

 cd /where/I/keep/backups && \ mysqldump > backup.sql && \ git commit -q -m "db dump `date '+%F-%T'`" backup.sql 

Podría hacer algo como esto (con a.sql como respaldo semanal).

 mysqldump > b.sql diff a.sql b.sql > a1.diff scp a1.diff backupserver:~/backup/ 

Sus files de diferencias serán más grandes para el final de la semana.

Sin embargo, mi sugerencia es solo descomprimirlo (use gzip -9 para una compression máxima). Hacemos esto en este momento y eso nos da un file gz de 59MB mientras que el original es de 639MB.

(No he hecho esto en producción).

Haga una copy de security completa una vez por día o por semana. Registros de retransmisión de respaldo una vez por hora o por día.