17.4.1.21 복제 및 MEMORY 테이블
마스터 서버가 종료하고 다시 시작하면 MEMORY
테이블은 비어 있습니다. 마스터는이 영향을 슬레이브에 복제하기 위해 시작한 후 소정의 MEMORY
테이블을 처음 사용 할 때 하늘에해야 할 테이블의 DELETE
문을 바이너리 로그에 기입하는 것으로, 그 테이블을 비워야 있는 것을 슬레이브에 알리는 이벤트를 기록합니다.
슬레이브 서버가 종료하고 다시 시작하면 MEMORY
테이블은 비어 있습니다. 이에 따라 슬레이브는 마스터와 동기화를 잃고 다른 오류가 발생하거나 슬레이브가 정지 할 수 있습니다.
마스터에서받을 줄 형식 업데이트 및 삭제
Can't find record in '
memory_table
'에서 실패 할 수 있습니다.
INSERT INTO ... SELECT FROM
등의 문이 마스터 및 슬레이브에서 다른 행 집합을 삽입 할 수 있습니다.memory_table
MEMORY
테이블을 복제하는 슬레이브를 다시 시작하는 안전한 방법은 먼저 마스터의 MEMORY
테이블에서 모든 행을 삭제하거나 제거하여 이러한 변경 사항이 슬레이브에 복제 될 때까지 기다리는 것입니다. 그러면 슬레이브를 다시 시작하는 것이 안전합니다.
경우에 따라서는 다른 재부팅 방법을 적용 할 수 있습니다. binlog_format=ROW
의 경우, 슬레이브를 다시 시작하기 전에 slave_exec_mode=IDEMPOTENT
을 설정하면, 슬레이브의 정지를 피할 수 있습니다. 이에 따라 슬레이브 복제를 계속할 수 있지만, MEMORY
테이블은 여전히 마스터의 것과 다릅니다. 응용 프로그램 논리가 MEMORY
테이블의 내용을 안전하게 잃을 수있다 같은 것 인 경우 (예를 들어, MEMORY
테이블이 캐시에 사용되는 경우)는 이제 괜찮습니다. slave_exec_mode=IDEMPOTENT
가 모든 테이블에 전체적으로 적용되므로 MEMORY
않은 테이블에서 다른 복제 오류를 숨길 수 있습니다.
(위의 방법은 MySQL Cluster에 적용되지 않습니다. slave_exec_mode
항상 IDEMPOTENT
에서 변경할 수 없습니다.)
MEMORY
테이블의 크기는 max_heap_table_size
시스템 변수의 값에 의해 제한되고, 이것은 복제되지 않습니다 ( 섹션 17.4.1.34 "복제 및 변수" 를 참조하십시오). max_heap_table_size
의 변경은 변경 후 ALTER TABLE ... ENGINE = MEMORY
또는 TRUNCATE TABLE
을 사용하여 만들거나 업데이트 된 MEMORY
테이블에 또는 서버 재부팅 후 모든 MEMORY
테이블에 반영됩니다. 이 변수의 값을 마스터에서 늘 슬레이브에서 그렇지 않으면 마스터 테이블이 노예의 것보다 커질 수 있기 때문에 삽입이 마스터에 성공하더라도 슬레이브에서 Table is full 오류 실패합니다 : 이것은 알려진 문제입니다 (Bug # 48666). 이러한 경우 마스터와 마찬가지로 슬레이브에서 max_heap_table_size
전역 값을 설정 한 다음 복제를 다시 시작해야합니다. 또한 새로운 값이 각각 전체 (글로벌)에 반영되는 것을 보장하기 위해 마스터와 슬레이브의 MySQL 서버를 다시 시작하는 것이 좋습니다.
MEMORY
테이블에 대한 자세한 내용은 섹션 15.3 "MEMORY 스토리지 엔진" 을 참조하십시오.