매우 유사한 파일을 저장하기 위한 롤링 차이점이 있습니까?

매우 유사한 파일을 저장하기 위한 롤링 차이점이 있습니까?

직장에서 우리는 매일 밤 mysql 데이터베이스를 덤프합니다. 날마다 데이터의 거의 90~95%가 중복되고 시간이 지남에 따라 증가하는 것으로 추정됩니다. (젠장, 일부는 현재 시점에서 아마도 99%일 것입니다)

이러한 덤프의 행은 단일 mysql INSERT 문이므로 유일한 차이점은 전체 행과 파일의 순서입니다. 정렬하면 파일 간의 실제 차이는 매우 작습니다.

나는 찾고 있었지만 덤프의 출력을 정렬하는 방법을 찾지 못했습니다. 그러나 명령을 통해 파이프할 수 있습니다 sort. 그러면 같은 줄의 길고 긴 블록이 있을 것입니다.

그래서 차이점을 저장하는 방법을 찾으려고 노력하고 있습니다. 마스터 덤프부터 시작하여 매일 밤 비교할 수 있습니다. 그러나 그 차이는 매일 밤 더 커질 것입니다. 또는 개별적으로는 매우 작은 롤링 차이를 만들 수 있지만 매일 밤 일련의 마스터 차이를 모두 모아야 한다면 계산하는 데 점점 더 오랜 시간이 걸릴 것 같습니다.

이것이 가능한가? 어떤 도구를 사용해야 합니까?


편집하다mysql 백업을 수행하는 방법을 묻는 것이 아닙니다. 지금은 mysql을 잊어버리세요. 이것은 붉은 청어입니다. 내가 알고 싶은 것은 일련의 파일에서 일련의 롤링 diff를 만드는 방법입니다. 매일 밤 우리는 파일을 받습니다(mysqldump 파일이군요)는 이전과 99% 유사합니다. 예, 모두 압축합니다. 그러나 애초에 너무 많은 중복성을 갖는 것은 중복됩니다. 나에게 정말 필요한 것은 전날 밤과의 차이... 전날 밤과의 1% 차이... 등. 그래서 제가 추구하는 것은 매일 밤 데이터의 1%만 저장하면 되도록 일련의 차이점을 수행하는 방법입니다.

답변1

바이너리 차이를 저장할 수 있는 두 가지 백업 도구는 다음과 같습니다.rdiff 백업그리고이중성. 둘 다 를 기반으로 librsync하지만 해당 기반에서는 매우 다르게 동작합니다. Rdiff-backup은 최신 복사본과 역방향 차이를 저장하는 반면, duplicity는 기존 증분 차이를 저장합니다. 두 도구는 서로 다른 주변 기능 세트도 제공합니다.

답변2

최근에 저는 데이터베이스 덤프를 git에 저장하려고 했습니다. 데이터베이스 덤프가 매우 큰 경우 이는 실용적이지 않을 수 있지만 소규모 데이터베이스(Wordpress 사이트 등)에서는 작동합니다.

내 백업 스크립트는 대략 다음과 같습니다.

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

답변3

a.sql주간 백업 으로 이와 같은 작업을 수행할 수 있습니다 .

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

이번 주가 끝날 무렵에는 diff 파일이 더 커질 것입니다.

gzip -9내 제안은 ( 최대 압축을 위해) gzip하는 것입니다 . 현재 59MB gz 파일을 사용하여 이 작업을 수행하고 있지만 원본 파일은 639MB입니다.

답변4

(아직 프로덕션에서는 이 작업을 수행하지 않았습니다.)

매일 또는 매주 전체 백업을 수행합니다. 매시간 또는 매일 릴레이 로그를 백업합니다.

관련 정보