rolling diffs para armazenamento de arquivos altamente similares?

13

No trabalho, fazemos um despejo noturno de nossos bancos de dados mysql. De dia para dia, gostaria de estimar que cerca de 90-95% dos dados são duplicados, aumentando conforme o tempo passa. (Heck neste momento alguns são provavelmente 99%)

Estes dumps são onde uma linha é uma única instrução INSERT do mysql, então as únicas diferenças são linhas inteiras e a ordem em que elas estão no arquivo. Se eu os classificasse, a diferença real de arquivo para arquivo seria muito pequena.

Estou procurando e não encontrei uma maneira de classificar a saída no dump. Eu poderia canalizá-lo através do comando sort , no entanto. Então haveria longos e longos blocos de linhas idênticas.

Então, estou tentando descobrir uma maneira de armazenar apenas os diffs. Eu poderia começar com um dump mestre e diferenciar isso a cada noite. Mas os diffs seriam maiores a cada noite. Ou, eu poderia fazer rolling diffs, que individualmente seriam muito pequenos, mas parece que levaria mais e mais tempo para computar, se eu tivesse que montar um diff mestre de toda a série toda noite.

Isso é viável? Com quais ferramentas?

Editar Não estou perguntando como fazer backups do mysql. Esqueça o mysql no momento. É um arenque vermelho. O que eu estou querendo saber é como fazer uma série de diffs de uma série de arquivos. Cada noite nós recebemos um arquivo (que é um arquivo mysqldump ) que é 99% similar ao anterior. Sim, nós gzip todos eles. Mas é redundante ter toda essa redundância em primeiro lugar. Tudo o que eu realmente preciso é das diferenças da noite anterior ... que é apenas 1% diferente da noite anterior ... e assim por diante. Então, o que eu estou procurando é como fazer uma série de diffs, então eu preciso apenas armazenar 1% a cada noite.

    
por user394 18.08.2010 / 04:12

4 respostas

11

Duas ferramentas de backup que podem armazenar diffs binários são rdiff-backup e duplicity . Ambos são baseados em librsync , mas acima disso eles se comportam de maneira bem diferente. O Rdiff-backup armazena os mais recentes diffs de cópia e reversão, enquanto a duplicidade armazena os diffs incrementais tradicionais. As duas ferramentas também oferecem um conjunto diferente de recursos periféricos.

    
por 20.08.2010 / 16:32
11

Ultimamente eu tenho tentado armazenar despejos de banco de dados no git. Isso pode ser impraticável se os dumps de seu banco de dados forem realmente grandes, mas funcionou para mim em bancos de dados pequenos (sites do Wordpress e afins).

Meu script de backup é aproximadamente:

cd /where/I/keep/backups && \
mysqldump > backup.sql && \
git commit -q -m "db dump 'date '+%F-%T''" backup.sql
    
por 20.08.2010 / 00:43
1

Você pode fazer algo assim (com a.sql como backup semanal).

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

Seus arquivos de comparação ficarão maiores até o final da semana.

Minha sugestão é apenas gzip (use gzip -9 para compactação máxima). Fazemos isso no momento e isso dá um arquivo de 59kgz enquanto o original é de 639MB.

    
por 18.08.2010 / 08:24
-2

(Eu não fiz isso em produção).

Faça um backup completo uma vez por dia ou semana. Backup relay logs uma vez por hora ou dia.

    
por 18.08.2010 / 04:24