발생할 수있는 DDL 문을 포함하여 MySQL 데이터베이스의 모든 변경 사항을 기록하고 원격 데이터베이스와 동기화 할 수있는 정보를 사용할 수 있는지 조사하고 있습니다. .T-SQL을 사용하여 모든 MySQL binlog 이벤트 정보를 얻는 방법
응용 프로그램 자체는 C#으로 작성되었으므로 지금까지 보아 왔던 최상의 동기화 기술은 Microsoft Sync Framework입니다. 이 프레임 워크 자체는 삭제 된 행을 저장하기 위해 트리거와 추가 테이블을 추가하여 DB에 대한 변경 사항을 추적하는 솔루션을 제안합니다.
4 개 이상의 제품에서 사용되는 표준 DB의 스키마를 변경해야하므로 내 생각에는 좋지 않은 것 같습니다. 이 방법은 또한 각 테이블의 삭제 된 행에 대해 새 테이블을 추가하여 테이블의 수를 두 배로 늘리므로 좋지 않습니다.
다른 측면에서 MySQL은 모든 변경 사항을 추적하고 소위 혼합 모드를 사용하여 대부분의 경우 명령문을 추적 할 수있는 위대한 binlog를 가지고 있습니다 (따라서 원격 DB에서 다시 실행하여 데이터를 복제 할 수 있습니다) (NOW()와 같이) 비 결정적 함수가 호출 될 때 원시 데이터가 업데이트되므로 두 위치에서 업데이트 된 데이터가 동일합니다. 1) 'SHOW 바이너리 로그의 이벤트'
옵션 2는 또 다른 호출이 필요하지 않기 때문에 나에게 더 나은 것 같다 호출에서 mysqlbinlog 유틸리티 2) :
또한이 데이터를 검색 할 2 개 표준 방법이있을 것 같다 외부 응용 프로그램을 실행하고 DB 시스템에서 응용 프로그램을 실행하지만 기록 된 ROW 형식 명령문 (table_id : 47 flags : STMT_END_F는 아무 것도 알려주지 않음)의 실제 데이터는 포함하지 않습니다.
그래서 결국 내 질문은 :
전체 구조를 변경하고 트리거 및 테이블의 톤을 추가하지 않고 MySQL의 DB에 변경 사항을 추적 할 수있는 더 나은 방법이 있나요? 제품을 변경하여 변경 사항을 기록 할 수 있지만이 로그를 사용하여 모든 제품을 변경해야만 모든 것을 기록 할 수 있습니다. 모든 사람을 설득하는 것은 거의 불가능하다고 생각합니다.
SHOW BINLOG EVENTS를 사용하여 변경 한 사항에 대한 모든 정보를 얻을 수 있습니까? 행 데이터 포함.
P. 필자는 MySQL 프록시도 연구했지만, 모든 경우에 로깅 스테이트먼트의 문제는 비 결정적 함수의 실제 데이터가 포함되어 있지 않다는 것입니다.
네,하지만이 문제는 MySQL이 바이너리 로그 파일의 여러 버전을 가지고 있고 계속 변경되고 있다는 것입니다 ... 옵션 4가 가장 좋을 것입니다. MySQL 5.5에서는 트랜잭션을 커밋 할 때 슬레이브에게 신호를 보내는 반 동기 복제 (semi-synchronous replication)가있다. 슬레이브를 모방 할 수있는 응용 프로그램을 작성하고 전체 트랜잭션이 포함 된 메시지를 기다리는 것이 가능합니다. 불행하게도 5.5는 일반적으로 사용할 수 없으며이 옵션은 여전히 Linux에서만 사용할 수 있습니다. – flipm0de