2016-09-08 15 views
1

shyiko 커넥터를 사용하여 mysql 클러스터에서 다운 스트림 데이터베이스 시스템으로 bin 로그 변경 사항을 스트리밍합니다.MySQL - 타임 스탬프를 기준으로 bin 로그 위치 찾기

클러스터 = MySQL의 마스터 + 차 슬레이브 + 보조 슬레이브

청취 MySQL의 시스템이 다운 어떤 이유로 간다 메커니즘은 마스터와 슬레이브를 촉진하고 평소와 같이 계속하는 것입니다. 하지만 문제는 bin 로그 파일이며 위치는 실패한 머신과 새로 승격 된 슬레이브 mysql과 완전히 다릅니다.

두 시스템의 커밋 로그 사이에서 생각할 수있는 유일한 공통점은 timestamp입니다. 심지어 mysqlbinlog 유틸리티에도 --start-datetime 옵션을 사용하여 타임 스탬프를 설정하는 기능이 있습니다.

주어진 타임 스탬프를 사용하여 mysql bin 로그에서 위치를 찾는 방법이 있습니까? 위에서 언급 한 라이브러리는 타임 스탬프가 아닌 특정 위치 만 사용할 수 있기 때문에. 그렇다면 어떻게 그것을 달성하기 위해 가야하나요.

+0

설명하는 것과 다른 제품을 의미하기 때문에 "MySQL 클러스터"라는 문구를 제거해야합니다. '--start-datetime'의 구현은 실제로 매우 원시적입니다 - 단지 타임 스탬프에서 레코드를 찾을 때까지 로그를 검사합니다. 명확히하기 위해, 여러분의 머신은 A> B> C를 복제 중이고, A에서 듣기로 전환하고 A가 실패했기 때문에 지금은 B 인 청취를 시작하고 싶습니까? MySQL 서버 버전은 무엇입니까? –

+0

"My SQL cluster"- 클러스터가 MySQL 마스터 + 기본 슬레이브 + 보조 슬레이브라고 언급 한 이유가 무엇입니까? 나는 현재 5.5.21을 사용하고있다. 그러나 아이디어는 버전에 관계없이 일반적입니다. –

+0

예, 물론 일반적인 아이디어는 5.x에서 일반적이지만 각 연속 버전에는 추가 기능이 있습니다. 확실한 솔루션은 GTID입니다. 이것은 주요 기능을 제공하는 주요 가치 제안 중 하나입니다. 그러나 5.6 이상이 필요합니다. 귀찮은 번거 로움이 될 수 있으며 "커넥터"도이를 지원해야합니다. 또 다른 이론적 인 해결 방법은 서버 5.6.12 이상과 함께 제공되는 mysqlbinlog 복사본이 필요하지만 기능이 서버가 아닌 클라이언트에 있고 클라이언트가 이전 버전과 호환되기 때문에 5.1 이전 버전의 서버에 대해 실행하면 작동합니다. –

답변

3

가장 좋은 방법은 GTID (which mysql-binlog-connector-java supports, btw)를 사용하는 것이지만 마이클은 5.6+가 필요하다고 말한 것과 같습니다. 이 업그레이드 할 전혀 방법이없는 당신이 다음 점점 관련된 위험을 이해한다면 당신은 --start-datetime는만큼 간단 소유 :

BinaryLogClient binaryLogClient = new BinaryLogClient(...); 
binaryLogClient.setBinlogFilename(""); // instructs server to stream events 
// starting from the oldest known binlog 
final long start = ... 
binaryLogClient.registerEventListener(new BinaryLogClient.EventListener() { 
    @Override 
    public void onEvent(Event event) { 
     if (event.getHeader().getTimestamp() < start) { 
      return; 
     } 
     // process the event here 
    } 
}); 
binaryLogClient.connect(); 

참고 : 바이너리 로그 이벤트의 타임 스탬프는 정밀도를 가지고있다.

+0

제안 해 주셔서 감사합니다.이 점을 고려해보십시오. –