반응형
전체 오류 :
Warning: Unsafe statement written to the binary log using statement format
since BINLOG_FORMAT = STATEMENT. Statements writing to a table with an
auto-increment column after selecting from another table are unsafe because
the order in which rows are retrieved determines what (if any) rows will be
written. This order cannot be predicted and may differ on master and the
slave.
Django에서 원시 SQL을 실행하려고 할 때만이 오류가 발생하는 것 같습니다. MySQL CLI 클라이언트에서 SQL을 실행하면 동일한 오류가 발생하지 않습니다. 다음은 SQL입니다.
UPDATE picture p
JOIN (
SELECT @inc := @inc + 1 AS new_weight, id
FROM (SELECT @inc := 0) temp, (
SELECT id FROM picture
WHERE album_id = 5
ORDER BY taken_date ASC
) AS pw
) AS pw
ON p.id = pw.id
SET p.weight = pw.new_weight;
이것의 목적은 레코드를 정렬하고 데이터베이스에서이 순서를 유지하기 위해 가중치에 순차 번호를 적용하는 것입니다.
클라이언트 내에서이 명령을 실행하여 문제를 복제 할 수 있는지 확인했지만 여전히 성공적으로 실행됩니다.
mysql> SET GLOBAL binlog_format = 'STATEMENT';
또한 최종 응용 프로그램이 거의 확실하게 마스터-슬레이브 데이터베이스 설정에서 실행될 것이기 때문에이 제약 조건과 함께 작동하도록 SQL을 해결하거나 다시 작성하는 것이 중요합니다.
* 편집 : 좀 더 binlog_format
을 읽은 후 ROW 또는 MIXED가 완벽하게 허용되는 것처럼 보이지만 내 주요 관심사는 MySQL CLI에서이 문제를 복제하여 여부를 테스트 할 수 없다는 것입니다. MIXED / ROW가이 문제를 실제로 해결할 수 있습니까?
해결 방법
해당 오류 메시지를 표시하지 않도록 SQL을 다시 작성할 수있는 방법은 없습니다. 슬레이브가 마스터와 다른 행을 가질 수 있으므로 모든 종류의 순서가 해당 메시지를 던집니다. mixed
는 문이 statement
로 복제하기에 안전하지 않은 경우에만 row
기반 복제로 전환되므로 문제를 해결합니다.
참조 페이지 https://stackoverflow.com/questions/17057593
반응형
'MySql' 카테고리의 다른 글
MySQL 데이터베이스에서 하나의 값 선택 (0) | 2020.12.31 |
---|---|
MySQL PHP의 preg_replace에 해당하는 MySQL이 있습니까? (0) | 2020.12.30 |
MySQL Workbench 다크 테마 (0) | 2020.12.30 |
MySQL Database Structure for Web Messaging System (0) | 2020.12.30 |
MySQL MAMP에서 대용량 데이터베이스를 내보내거나 가져 오는 방법 (0) | 2020.12.30 |
댓글