매우 유사한 파일을 저장하기위한 롤링 차이? 순서입니다. 정렬하면 파일 간

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

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

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

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

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


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



답변

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


답변

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

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

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

답변

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

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

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

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


답변

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

  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 리더를 제공합니다. 파일 자체는 다시 일반 백업 프로그램에 공급 될 수 있습니다

답변

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

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