diffs de roulement pour le stockage de files très similaires?

Au travail, nous faisons un vidage nocturne de nos bases de données mysql. De jour en jour, j'apprécierais que près de 90-95% des données soient dupliquées, augmentant avec le time. (Heck à ce point certains sont probablement 99%)

Ces dumps sont où une ligne est une seule instruction INSERT mysql, donc les seules différences sont des lignes entières, et l'ordre dans lequel ils sont dans le file. Si je les ai sortingés, la différence réelle de file à file serait très faible.

J'ai regardé, et je n'ai trouvé aucun moyen de sortinger la sortie sur le vidage. Je pourrais le passer à travers la command de sort , cependant. Ensuite, il y aurait de longs et longs blocs de lignes identiques.

J'essaie donc de find un moyen de ne stocker que les diffs. Je pourrais commencer avec une décharge principale, et diff contre cela chaque nuit. Mais les différences seraient plus grandes chaque nuit. Ou, je pourrais faire des diffs de roulement, qui seraient individuellement très petits, mais il semblerait que cela prendrait de plus en plus de time à calculer, si je dois assembler un master diff de toute la série chaque soir.

Est-ce faisable? Avec quels outils?


Edit Je ne request pas comment faire des sauvegardes mysql. Oubliez mysql pour le moment. C'est un hareng rouge. Ce que je veux savoir, c'est comment faire une série de diffs de roulement à partir d'une série de files. Chaque nuit nous obtenons un file (qui se trouve être un file mysqldump ) qui est semblable à 99% à celui avant. Oui, nous les gzip tous. Mais il est redondant d'avoir toute cette redondance en premier lieu. Tout ce dont j'ai vraiment besoin, ce sont les différences de la veille … ce qui est seulement 1% différent de la veille … et ainsi de suite. Donc, ce que je suis après est de savoir comment faire une série de diffs donc j'ai besoin de stocker que 1% chaque nuit.

Deux outils de sauvegarde qui peuvent stocker des diffs binarys sont: rdiff-backup et duplicité . Les deux sont basés sur librsync , mais au dessus de cela ils se comportent différemment. Rdiff-backup stocke les dernières différences de copy et de reverse, tandis que la duplicité stocke les différences incrémentales traditionnelles. Les deux outils offrent également un set différent de fonctionnalités périphériques.

Dernièrement, j'ai essayé de stocker des décharges de bases de données dans git. Cela peut s'avérer peu pratique si vos vidages de database sont vraiment volumineux, mais cela a fonctionné pour moi dans le cas de petites bases de données (sites WordPress, etc.).

Mon script de sauvegarde est grossièrement:

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

Vous pourriez faire quelque chose comme ça (avec a.sql comme sauvegarde hebdomadaire).

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

Vos files diff deviendront plus gros d'ici la fin de la semaine.

Ma suggestion est juste gzip (utilisez gzip -9 pour la compression maximale). Nous le faisons en ce moment et cela donne un file gz de 59 Mo tandis que l'original est de 639 Mo.

(Je ne l'ai pas fait en production.)

Faites une sauvegarde complète une fois par jour ou par semaine. Le relais de sauvegarde enregistre une fois par heure ou par jour.