2012-02-02 3 views
1

단순히 여러 데이터베이스 테이블을 동기화하는 응용 프로그램을 작성해야한다고 말했습니다. 요구 사항 때문에 변경 사항은 대기열에 넣어 져야합니다 (SQL 문 형식). 여기에 문제가 있습니다. 데이터베이스를 사용하는 기존 응용 프로그램을 변경하여 실행 된 쿼리를 직접 대기열에 추가 할 수 없습니다. 따라서 데이터베이스의 특정 테이블 (> 20 개 테이블)에 대한 SQL 쿼리를 변경하는 모든 데이터를 잡아야합니다.MySQL 데이터베이스에서 SQL 문을 catch하는 방법은 무엇입니까?

I 불구하고 다음과 같은 솔루션에 대한 :이 Can a trigger access the query string (! 내가 찾을 수있는이 사건에 대한 가장 좋은 대답을) 설명처럼

  • 트리거와 직접 MySQL의 쿼리를 잡으려고하지만 쿼리를 가져올 수 없습니다 트리거를 활성화합니다 - 내가 사용했던 쿼리 만 트리거합니다.
  • 일반 쿼리 로그를 활성화합니다. 그러나 성능에 대한 고려 사항이 많아서 필자는 필요하지 않은 테이블 (> 120 개 테이블)과 데이터베이스에서 실행되는 많은 간단한 쿼리를 기록하기 때문에 논쟁의 여지가없는 솔루션입니다.
  • 트리거로 채워진 히스토리 테이블을 사용합니다. 이것으로 나는이 솔루션으로 쿼리의 SQL 문을 저장하지 않을 것이고 (이것은 현재의 동기화 개념을 느리게 할 것이다) 실현할 수있을 것이다.

누군가 다른 해결책을 알고 있습니까? 아니면 트리거 내에서 쿼리에 액세스하여 불가능을 수행 할 수 있습니까?

나는 어떤 제안이라도 고맙게 생각합니다!

관련 질문 :
Can a trigger access the query string
Log mysql db changing queries and users

+0

일반적인 쿼리 로그는 쿼리의 원시 텍스트가 기록되며 보안에 민감한 데이터 (예 : 암호, 암호화 키, ㅋ ㅋ)도 포함되므로 보안 위험이 있습니다. –

+0

나는 이것에 대해 알지 못했다. 그것이 적합하지 않은 또 다른 이유. – Zwie

답변

1

당신이 할 수 기존 응용 프로그램과 MySQL 서버 사이에 설정 MySQL의 프록시 https://launchpad.net/mysql-proxy은. 프록시에서 쿼리를 가로 채거나 수정하거나 추가하십시오.

+0

전에 MySQL 프록시를 사용하셨습니까? 그렇다면 모든 의견은 무엇입니까? –

+0

Thx, 나는이 프로그램을 몰랐다. 나는 그것을 지역적으로 시도했고 지금까지는 잘 작동한다. 더 큰 환경에서 작동하기를 바랍니다. – Zwie

관련 문제