매우 유사한 파일을 저장하기위한 롤링 차이?


18

직장에서 우리는 야간에 mysql 데이터베이스를 덤프합니다. 매일 매일 데이터의 90-95 %에 가까운 데이터가 복제되어 시간이 지남에 따라 증가한다고 생각합니다. (이 시점에서 일부는 아마도 99 % 일 것입니다)

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

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

그래서 나는 diff 만 저장하는 방법을 찾으려고 노력하고 있습니다. 마스터 덤프로 시작할 수 있고 매일 밤 저것과 비교할 수 있습니다. 그러나 diff는 매일 밤 더 커질 것입니다. 또는 개별적으로 매우 작은 롤링 디프를 만들 수 있지만 매일 밤 전체 시리즈의 마스터 디프를 구성 해야하는 경우 계산하는 데 더 오래 걸리는 것처럼 보입니다.

이것이 가능합니까? 어떤 도구로?


편집 나는 MySQL 백업을 수행하는 방법을 묻지 않습니다. 지금은 mysql을 잊어 버리십시오. 붉은 청어입니다. 내가 알고 싶은 것은 일련의 파일에서 일련의 롤링 diff를 만드는 방법입니다. 매일 밤 우리는 이전의 파일 과 99 % 비슷한 파일 ( mysqldump 파일이 됨 )을 얻 습니다. 예, 모두 압축합니다. 그러나 처음에 모든 중복성을 갖는 것은 중복입니다. 내가 정말로 필요한 것은 전날 밤과의 차이입니다. 전날 밤과 1 % 만 다릅니다 ... 등등. 그래서 내가 따르는 것은 일련의 diff를 만드는 방법이므로 매일 밤 1 % 만 저장하면됩니다.

답변:


14

이진 diff를 저장할 수있는 두 가지 백업 도구는 rdiff-backupduplicity 입니다. 둘 다를 기반으로 librsync하지만 그보다 상당히 다르게 동작합니다. Rdiff-backup은 최신 사본 및 리버스 diff를 저장하고 duplicity는 전통적인 증분 diff를 저장합니다. 이 두 도구는 다른 주변 기능 세트를 제공합니다.


1
IIUC, rdiff-backup이 더 매력적입니다. 백업을 정상적으로 탐색 할 수 있지만 이중성은 오래된 사본 만 가지고 있기 때문입니다.
tshepang

질문 + 질문이 꽤 오래되었다는 것을 알고 있지만 사용법을 보여주는 명령 예제를 추가 할 수 있습니까? 예를 들어 backup201901.tar.gz, backup201902.tar.gz, ..., backup201912.tar.gz, backup202001.tar.gz입니다. 나중에 참조 할 때 유용합니다.
Basj

지난번에 rdiff-backup을 수행했을 때 주요 개발자들은 계속 움직 였고 프로젝트는 정체 된 상태였습니다. 또한 네트워크에서 속도가 매우 느리다는 점도 중요합니다.
Lizardx

13

최근에 데이터베이스 덤프를 git에 저장하려고했습니다. 데이터베이스 덤프가 실제로 큰 경우에는 실용적이지 않을 수 있지만 작은 데이터베이스 (Wordpress 사이트 등)에서는 효과적입니다.

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

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

이것은 diff 만 저장합니까?
user394

2
예. 매우 편리합니다! 언제라도 파일을 "체크 아웃"할 수 있으며, git은 자동으로 diff를 결합하여 그 당시 존재했던 전체 파일을 제공합니다.
sep332

1
이 블로그 게시물 (내가 아님)은 더 자세하게 설명되어 있습니다. viget.com/extend/backup-your-database-in-git 이 의견은 찬반 양론과 경고에 더 많이 들어갑니다. 또한 git을 사용하면 버전을 롤백하는 것 이상을 얻을 수 있다고 덧붙입니다. 덤프에 태그를 지정하거나 별도의 분기 (dev / prod)를 가질 수도 있습니다. 내가 보는 방식은 git (또는 좋아하는 최신 버전 제어 시스템을 삽입하는 것)이 내 diff / gzip 'solution'을 롤링하여보다 더 나은 작업을 수행하는 것입니다. 이 기사에 대한 한 가지 경고 : 덤프를 공개하지 않으려면 (또는 개인 저장소를 지불하지 않는 한) github에 덤프를 푸시하지 마십시오.
흠뻑

1
힘내는 diff 만 저장 하지 않습니다 . 사실, 주로 각 개정판의 전체 스냅 샷을 저장하지만 다양한 최적화가 수행됩니다. 참조 이 우수한 대답과 질문
tremby

3

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

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

diff 파일은 주중에 커질 것입니다.

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


우리는 이미 그들을 gzipping하고 있습니다 :)
user394

1

데이터베이스 덤프의 크기 및 실제 텍스트 유사성에 따라 수행 할 수있는 몇 가지 방법이 있습니다.

  1. 수정되지 않은 덤프에서 restic ( https://restic.net/ ) 또는 borgbackup ( https://borgbackup.readthedocs.io/ ) 과 같이 OP 요청으로 롤링 체크섬을 사용하는 중복 제거 백업 프로그램을 적용 하십시오 . 두 시스템 모두 FUSE를 통해 특정 백업 버전을 마운트 할 수 있으며 소위 영구 증분 방식으로 작동합니다.
  2. NCBI 녀석이 상당히 큰 유전학 데이터베이스를 위해 수행하는 방식과 유사하게 데이터베이스 구조를 컨텐츠에서 분리합니다. 즉, 데이터베이스 스키마를 작성하기위한 SQL 스크립트 (예 : ftp://ftp.ncbi.nlm.nih.gov/snp/organisms/human_9606_b151_GRCh38p7/database/organism_schema/ ) 를 작성 하고 테이블의 컨텐츠를 별도로 저장하십시오. 삽입 문이없는 일반 텍스트 또는 압축 이진 형식 ( ftp://ftp.ncbi.nlm.nih.gov/snp/organisms/human_9606_b151_GRCh38p7/database/organism_data/) 예 : 탭 또는 쉼표로 구분 된 값. 물론 데이터를 데이터베이스로 다시 가져 오기 위해, 즉 백업에서 복원하기 위해 적절한 시간에 insert 문을 작성하는 별도의 가져 오기 루틴이 필요합니다. DBMS가 csv 파일 임포터를 제공하는 경우 위의 추가 스크립트 요구 사항을 생략 할 수 있습니다. 이렇게 줄어든 텍스트 파일은 위에서 언급했거나 rdiff-backup과 같은 다른 일반 백업 프로그램으로 다시 공급 될 수 있습니다.
  3. WEKA가 사용하는 것처럼 arff 파일과 같은 형식을 사용하여 구조와 내용이 느슨하게 결합 된 솔루션을 선택하십시오 ( https://www.cs.waikato.ac.nz/ml/weka/arff.html ) : 구조 및 데이터 유형 열은 파일 헤더에 선언되고 실제 내용은 csv와 같은 형식으로 다시 @DATA 문으로 구분됩니다. 오늘날 많은 ETL 도구는 데이터베이스 커넥터 외에도 Arff 리더를 제공합니다. 파일 자체는 다시 일반 백업 프로그램에 공급 될 수 있습니다

이 답변은 "데이터베이스 덤프의 백업을 압연 할 수있는 방법"질문에 대한 대답,하지만 더 일반적인 질문 "어떻게 매우 유사한 백업의 롤링 백업에"나는 무엇을 요구하고,
user394

솔직히 나는 실제로 달성하고자하는 것이 중복 제거라고 생각합니다.이 방법은 첫 번째 접근법에서 언급됩니다. 어쩌면 restic.net/blog/2015-09-12/restic-foundation1-cdc 에서 설명 하고 싶을 수도 있고, 시도해보고 싶습니까?
jf1

자세하게 설명 된이 의견은 현재 의견보다 훨씬 더 적절한 답변을 제시 할 것입니다.
user394

-3

(제작에서이 작업을 수행하지 않았습니다.)

하루 또는 일주일에 한 번 전체 백업을 수행하십시오. 시간 또는 하루에 한 번씩 백업 릴레이 로그.


릴레이 로그 란 무엇입니까?
user394
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.