MySQL은 TRUNCATE의 플래그 "NO_ WRITE_ TO_ BINLOG"를 지원하지 않습니다. 따라서 지연이 0이 될 때까지 기다린 다음 복제를 중지하고 테이블의 TRUNCATE를 만들고/s 마스터를 재설정 한 다음 다시 복제를 시작해야합니다. 정말 고통 스럽다. 다른 제안?MySQL이 binlog에 쓰지 않도록 TRUNCATE 문장을 어떻게 사용할 수 있습니까?
1
A
답변
0
TRUNCATE는 꽤 무거운 물건입니다. DELETE 쿼리로도 얻을 수 있습니까?
2
명령을 사용하여 세션이 원하는대로 수행 할 수 있도록 바이너리 로깅을 비활성화 할 수 있습니다.
SET SQL_LOG_BIN = 0; TRUNCATE TABLE ; SET SQL_LOG_BIN = 1;
이렇게하면 TRUNCATE를 슬레이브로 보내지 않아도 복제가 효과적으로 중단되므로 SUPER 권한이 필요합니다.
+0
좋아, 많이 감사합니다! 너 락! –
0
TRUNCATE는 실제로 데이터를 기록하지 않고 바닥에 데이터를 떨어 뜨리기 때문에 가볍게 사용하면 안됩니다. 트랜잭션 적으로 안전하지 않으며 복구가 불가능하므로 복제와 호환되지 않습니다. 복제 설정에서 TRUNCATE를 사용하더라도 복제 된 데이터는 손상되거나 잘못되었을 수 있습니다.
+0
예, Truncate가 복제 내에서 사용할 일반적인 문장이 아닙니다. 그러나이 특별한 경우에는 매력적입니다. 감사! –
아니요, 각각 40 개 이상의 테이블이있는 6 개의 DB가 있으며 일부 테이블에는 5 백만 개가 넘는 행이 있습니다. 삭제는 거의 불가능합니다. 감사합니다 –