2008-10-23 4 views
5

우리는 MySQL 5.0 (MyISAM)을 기반으로하는 레거시 애플리케이션을 다루고있다. 업데이트, 삭제 또는 삽입이 특정 테이블에 발생하면 실시간에 대해 알아야합니다. 'gotcha'는 어떤 방식 으로든 DB (즉, 트리거 작성)를 변경할 수 없다는 것입니다. 빈 로그, 복제 또는 다소 비 침습적 인 다른 것을 사용해야합니다.실시간 MySQL 바이너리 로그 파싱

우리는 'mysqlbinlog'명령을 사용하여 바이너리 로그를 구문 분석했다. 그러나 이것은 실시간이 아니며 차라리 더 많은 이벤트를 주도 할 것입니다.

아이디어가 있으십니까?

+0

혹시이 문제를 생각해 냈습니까? –

답변

6

체크 MySQL Proxy. 명령/응답 스트림에서 바로 탭할 수 있으며 루아에서 프로그래밍이 가능합니다. 원하는 경우 실시간으로 명령을 수정할 수도 있습니다.

+0

우리는 그 점을 조금만 들여다 보았습니다. 계획은 다음과 같습니다 : 1) MySQL이 수신 대기하는 포트를 변경 한 다음 MySQL의 이전 포트에서 설정하십시오. 2) 테이블에 작업을 캡처하고 일부 셸 명령을 호출하십시오. 그러나 우리는 mysqlbinlog데몬처럼 사용하는 편이 낫습니다. – JJohnson

0

mysqlbinlog -R -t를 사용하여 실시간으로 피드를 얻으려고 실험 중이며 끝까지 작동 한 다음 마지막으로 읽은 위치를 찾아야합니다. 로그 파일에 대한 쿼리와 결합하면 계속해서 모든 파일을 차례로 제공해야합니다. 이걸 실험하고 있습니다.

0

또한 변경이 발생했는지 여부를 실시간으로 알고 싶다면 한 테이블에서 마스터에 트리거를 작성한 다음 자체 복제 된 별도의 데이터베이스에 데이터를 삽입 할 것을 제안합니다. 트리거 내에서 페더 레이 티드 서버를 사용하여 다른 서버에 액세스 할 수 있습니다. http://dev.mysql.com/tech-resources/articles/mysql-federated-storage.html

관련 문제