바이너리 로그에 데이터를 쓰지 않고 트리거 나 저장 프로 시저를 통해 테이블에 행을 삽입하려고합니다. 이것이 가능한가? 나는 정상적인 연결을 위해서 당신은 SQL_LOG_BIN=0
을 설정하여 연결에 대한 바이너리 로깅을 비활성화 할 수 있음을 알았지 만, 트리거를 위해 작동하도록 할 수 없었다. 페더레이션 엔진 테이블에서이 작업을 수행 할 수있는 방법이있는 경우에도 괜찮습니다.바이너리 로그에 쓰지 않고 트리거를 실행하십시오.
편집 : 나는 거의 저장 프로 시저를 통해이 작업을 수행 할 수
:
call nolog_insert(50, 'notlogged');
로 : MySQL의 프롬프트에서 프로 시저를 호출하여
CREATE PROCEDURE nolog_insert(`id` INT, `data` blob)
BEGIN
SET SESSION SQL_LOG_BIN = 0;
INSERT INTO `table` (`id`, `data`) VALUES (id, data);
SET SESSION SQL_LOG_BIN = 1;
END
내가 레코드를 삽입 예상되는 레코드 (50, 'notlogged')
은 table
에 삽입되지만 바이너리에는 기록되지 않습니다. 로그.
그러나 트리거에서이 절차를 실행하고 싶습니다. 트리거를 이용하면 다음과 같이
create trigger my_trigger before insert on blackhole_table for each row call nolog_insert(new.id, new.data);
데이터는 모두 table
삽입 바이너리 로그에 기록된다.
대부분의 DBMS는 트랜잭션이 롤백되는 경우 변경 사항을 추적하기 위해 로그를 사용하며 로그에 쓰지 않고 실패한 경우 롤백 기능이 손상된 것입니다. 이것이 MySQL에 적용되는지 모르겠지만 IMO에 대해 우려할만한 것입니다. –
그래, 나는 그 의미를 알고있다. MyISAM에 의해 뒷받침되고 트랜잭션은 어쨌든 사용되지 않습니다. 삽입물이 실패하지 않아야합니다. (스토어드 프로시져는 MySQL 복제의 한계를 극복하기 위해 시스템의 일부로 사용됩니다.) – alberge
그것은 삽입에 실패했을뿐만 아니라 그것이 문제입니다. 트랜잭션 (IOW, 트랜잭션의 무결성이 손상 되었기 때문에 트랜잭션의 시작과 실패한 시점 사이의 어떤 것도 되돌릴 수 없음) 중에 삽입 주위의 모든 작업입니다. 트랜잭션을 지금 사용하고 있지 않을 수도 있습니다. 그러나 트랜잭션이 변경되어 트리거가 변경되지 않으면 어떻게됩니까? –