2013-04-26 4 views
4

흥미로운 MySQL 오류 메시지가 나타났습니다. 해석 방법을 모르겠습니다. MySQL 복제 및 트리거

셋업 :

  • 두 테이블이 있습니다 A와 B
  • 데이터가 다음 트리거는 테이블 B에
  • 운영 데이터를 쓰고, 테이블에 작성되거나 업데이트
  • 나는 테이블 A에서 데이터를 업데이트하기로 결정 때마다,
  • 데이터

이제 슬레이브 서버에 복제 된 마스터 데이터베이스에서 발생의

참고 : # BINLOG_FORMAT = STATEMENT 이후 문 형식을 사용하여 바이너리 로그에 기록 1592 안전하지 않은 문 N이 업데이트되며, 해당 로그 메시지가 테이블 B. MySQL로 작성하지만, 다음과 같은 오류 메시지를 생성합니다. 명령문은 LIMIT 절을 사용하기 때문에 안전하지 않습니다. 포함 된 행 집합을 예측할 수 없으므로 안전하지 않습니다.

참고 : # 1592 안전하지 않은 명령문은 BINLOG_FORMAT = STATEMENT 이후 명령문 형식을 사용하여 2 진 로그에 기록됩니다. 문은 AUTO_INCREMENT 열에 삽입되는 트리거 또는 저장 함수를 호출하기 때문에 안전하지 않습니다. 삽입 된 값을 올바르게 기록 할 수 없습니다.

참고 : # 1592 안전하지 않은 명령문은 BINLOG_FORMAT = STATEMENT 이후 명령문 형식을 사용하여 2 진 로그에 기록됩니다. 행을 검색하는 순서가 기록 될 행 (있는 경우)을 결정하기 때문에 다른 테이블에서 선택한 후 자동 증가 열이있는 테이블에 작성하는 명령문은 안전하지 않습니다. 이 순서는 예측할 수 없으며 마스터와 슬레이브에서 다를 수 있습니다.

눈을 즐겁게 해줍니다. 어떻게 이것을 피할 수 있습니까?

+0

http://stackoverflow.com/questions/12274047/turnoff-mysql-unsafe-statement-warning 는 시도? – beck03076

답변

0

간단한 대답 -> 트리거에 auto_increment 열이있는 테이블에 데이터를 삽입하지 마십시오. 대신 고유 ID 생성을 위해 mysql의 네이티브 함수를 사용하십시오. 이것들은 잘 복제되고 경고를 생성하지 않습니다.