2009-08-18 3 views
3

rsync를 사용하여 서버의 파일을 백업하고 mysqldump를 사용하여 데이터베이스를 백업합니다. 내 관심사는 다음과 같습니다.mysqldump의 데이터 무결성 보장 <-> rsync

데이터베이스에있는 mysqldump는 약 30 초가 걸렸습니다. 파일에 대한 경로를 포함하여 사용자가 업로드 한 이미지에 대한 정보를 저장하는 사진이라는 테이블이 있습니다. mysqldump를 완료하는 데 30 초가 걸리는 동안 사진이 업로드되거나 삭제 될 때 어떤 일이 일어날 지 걱정됩니다. 그런 일이 발생하고 rsync 된 파일과 mysqldump 데이터를 복원하려고하면 삭제 된 사진을 가리키는 행이 포함 된 데이터베이스 또는 성공적으로 업로드 된 사진 행이 누락 될 수 있습니다.

mysqldump가 정확하게 rsync와 일치하는지 어떻게 확인할 수 있습니까? 사전에

감사합니다, 브라이언

답변

1

사용 LOCK TABLES은 백업하는 테이블에서 모든 쓰기 작업을 차단합니다. 그런 다음 mysqldump이 완료되면 잠금을 해제하십시오.

+1

mysqldump 동안 테이블을 잠그는 것만으로는 충분하지 않습니다. 또한 rsync가 실행되는 동안 테이블을 잠근 상태로 유지해야합니다. 그렇지 않으면, 예를 들어. rsync가 덤프를 따라 가면 덤프 클레임이 있어야하는 파일이 디스크에서 삭제 될 수 있습니다. 아직 그 파일들은 rsync에서 끝나지 않습니다. –

+0

- 테이블이 잠겨져 있고 사용자가 파일을 업로드하면 테이블이 잠금 해제되면 레코드를 만들 INSERT 쿼리가 진행됩니까? 쿼리가 30 초 이상 기다려야 만해도 안 좋은가? – Brian

0

결과로 생성되는 mysqldump와 rsync에 의해 전송 된 (로컬로) MD5를 비교 한 다음 두 해시를 비교하여 일치하는지 확인할 수 있습니다. 또 다른 대안은 버전 제어 파일 (mysqld 또는 svn 또는 선호하는 vcs 사용)에 mysqldump를 설정하는 것이다. git의 장점은 변경 사항을 원격 서버에 푸시하기 위해 일부 커밋 후 후크를 쉽게 설정할 수 있다는 것입니다. 업로드는 전체 덤프가 아니라 버전 간의 차이 일뿐입니다. 이렇게하면 백업 기간을 줄일 수 있습니다.

1

대답은 간단합니다. mysqldump를 완료 한 후 rsync를 실행하십시오. :) 최악의 경우이 방법을 사용하면 DB 덤프에없는 몇 가지 새로운 파일이 생기지 만 일치하지 않는 db 항목은 없을 것입니다.

관련 문제