2012-01-06 6 views
2

로컬 mysql db 및 프로덕션 mysql db가 있습니다. 저는 로컬에서 변경 작업을 수행하고 타사 도구를 사용하여 변경 사항을 라이브 서버에 동기화합니다. 이 도구는 체크섬 기능을 사용하여 변경된 행을 식별합니다. 내 DB 구조는 단순하고 하나의 varchar200 필드 (기본 키 역할을 함) 및 텍스트 필드입니다.동기화 목적의 타임 스탬프 열 대신

수천 개의 행이 있기 때문에 동기화에 오래 걸리는 것이 문제입니다. 타임 스탬프 필드를 추가하면 동기화 할 행을 식별하는 도구에 대한 체크섬을 빠르게 가져올 수 있습니다. 시간대 차이로 인해 로컬 및 프로덕션 서버에서 타임 스탬프 필드가 서로 다르기 때문에 더 많은 문제가 발생했습니다.

행을 수정할 때 변경되는 타임 스탬프에 대한 유용한 아이디어 나 대안을 찾고 있습니다.

추신 : similar question를 게시했지만 유용한 답변을 얻지 못했습니다. 나는 추가 테이블에 의존 할 생각이 없다.

+0

이전 데이터가 변경되거나 새로운 삽입 만 가능합니까? –

답변

2

팁 : TIMESTAMP 데이터 유형을 사용하지 말고 DATETIME을 사용하십시오. 그들은 같은 종류의 데이터를 보유하지만 차이가 있습니다 은 행을 터치 할 때마다 으로 업데이트됩니다. 해당 열을 설정하지 않더라도 삽입을 포함하여 "now"로 업데이트됩니다.

즉, TIMESTAMP을 사용하면 절대 두 데이터베이스를 동기화 할 수 없습니다. 즉, 해당 열은 항상 다릅니다. DATETIME을 사용하면 해당 열의 데이터를 보존 할 수 있습니다.

DATETIME 열을 "now"로 업데이트하도록 응용 프로그램을 코딩 할 수 없다면 간단히 수행 할 트리거를 만드십시오.

2

당신은 여러 가지 일을 할 수있는 :

  1. 은 소스 테이블에 "더러운"에 대한 열을 추가합니다. 행이 변경되면 뒤집어서 sync'd가되면 다시 뒤집는 단일 BIT로 만듭니다. 행 ID가 기본 키이면 간단한 삽입입니다 ... 중복 키 업데이트시
  2. GMT로 시간을 모두 저장하십시오. 그래서 더 이상 시간대에 맞서 싸울 필요가 없습니다. 이것은 언제 어디서나 시간이 저장되는 표준 연습입니다.
  3. 두 서버 사이에서 복제를 설정하면 MySQL이 복사/업데이트를 수행합니다. 이것은 정확하게 설계된 것이며 잘 작동합니다.
+0

옵션 2가 좋은 것 같습니다. 그러나 datetime 열을 추가하면 도구가 행에 대한 체크섬을 신속하게 만들 수 있습니까? – Ctroy

0

행의 타임 스탬프는 실제로 클라이언트가 최신 동기화 시간을 업데이트 할 때마다 서버에서 많은 행이 업데이트되고이를 놓칠 수 있습니다. 서버에 행을 추가하거나 수정할 때마다 1 씩 증가하는 카운터를 사용하면 클라이언트가 자체를 업데이트하고 카운터의 최신 값을 가져옵니다. 클라이언트가 카운터의 마지막 값을 가져 오지 않을 수 있습니다 (예 : 클라이언트가 업데이트를 요청하는 동안 일부 행이 업데이트 됨). 다음 업데이트에서 따라 잡을 수 있습니다.