17.2.2 Replication Relay 및 상태 로그
복제 중에 슬레이브 서버는 마스터에서 슬레이브로 릴레이되는 바이너리 로그 이벤트를 개최하고 현재의 상태와 릴레이 로그의 위치 정보를 기록하는 일부 로그를 만듭니다. 처리에 사용되는 로그는 여기서 같이 3 가지 유형이 있습니다.
릴레이 로그는 슬레이브 I / O thread에 의해 마스터의 바이너리 로그에서 읽고 기록하는 이벤트로 구성됩니다. 릴레이 로그의 이벤트는 SQL 스레드의 일부로 슬레이브에서 실행됩니다.
마스터 정보 로그에는 슬레이브 마스터 연결에 대한 상태 및 현재 구성 정보가 포함되어 있습니다. 이 로그 마스터 호스트 이름, 로그인 자격 증명 및 슬레이브가 마스터의 바이너리 로그에서 얼마나 떨어져 읽은 여부를 나타내는 좌표 정보를 보유하고 있습니다.
MySQL 5.6 이전 버전에서는이 로그는 항상 파일 (
master.info
) 이었지만, MySQL 5.6 이상에서 노예--master-info-repository=TABLE
에서 시작하여이 로그 파일에 아니라mysql.slave_master_info
테이블에 쓸 수 있습니다.릴레이 로그 정보는 슬레이브의 릴레이 로그의 실행 포인트에 대한 상태 정보를 유지합니다.
MySQL 5.6 이전 버전에서는이 로그는 항상 파일 (
relay-log.info
) 이었지만, MySQL 5.6 이상에서 노예--relay-log-info-repository=TABLE
에서 시작하여이 로그 파일 가 아니라mysql.slave_relay_log_info
테이블에 쓸 수 있습니다.
MySQL 5.6.7 이전에서는 slave_master_info
및 slave_relay_log_info
테이블 Master_id
컬럼은 마스터 서버 ID가 아닌 슬레이브 서버 ID를 표시했습니다. (Bug # 12334346)
충돌 안전 복제 상태 및 릴레이 정보의 로그를 위해 테이블을 사용할 때 복제 충돌 안전이기 때문에 이러한 테이블은 InnoDB
등의 트랜잭션 스토리지 엔진을 사용해야합니다. MySQL 5.6.6 이후에서는 이러한 테이블은 InnoDB
를 사용하여 작성됩니다. (Bug # 13538891)
따라서 슬레이브의 충돌 안전성을 보장하려면 --relay-log-recovery
가 유효한 상태에서 슬레이브를 실행하고, --relay-log-info-repository
를 TABLE
로 설정해야합니다 .
MySQL 5.6.6 이전에는, mysqld가 복제 로깅 테이블을 초기화 할 수 없었던 경우, 슬레이브는 시작을 거부했습니다. MySQL 5.6.6 이후에서는 이것이 발생하면 경고가 표시되지만 슬레이브는 시작을 계속할 수 있도록합니다. (Bug # 13971348)이 상황이 발생할 가능성이 높은 것은 노예 로깅 테이블을 지원하지 않는 버전의 MySQL에서 지원되는 버전으로 업그레이드 할 때입니다.
MySQL 5.6.5 이전 버전에서는 slave_master_info
및 slave_relay_log_info
테이블이 기본적으로 MyISAM
을 사용하고 있고, 이것은 복제를 시작하기 전에 여기와 같이 ALTER TABLE ... ENGINE=InnoDB
를 발행하는 것으로, 이러한 테이블이 사용하는 스토리지 엔진을 변경해야했습니다.
ALTER TABLE mysql.slave_master_info ENGINE = InnoDB; ALTER TABLE mysql.slave_relay_log_info ENGINE = InnoDB;
ALTER TABLE
문은 mysql
데이터베이스에 적절한 권한을 가진 MySQL root
또는 다른 사용자 계정으로 실행되어야합니다. 복제 중에이를 실행하려고해서는 안됩니다. MySQL 5.6.3 이후에서는 복제가 진행되는 동안 이들 중 하나의 테이블에서 ALTER TABLE
을 실행하려고하는 것은 허용되지 않습니다. MySQL 5.6.4 이후에서는 이러한 테이블 중 하나 또는 둘 다 쓰기 잠금을 필요로하는 문을 실행하는 것은 복제의 진행은 허용되지 않지만 읽기만하는 문은 언제든지 허용 합니다.
slave_master_info
또는 slave_relay_log_info
테이블에서 직접 행을 갱신 또는 삽입하려고하지 마십시오. 그렇게하는 것은 정의되지 않은 동작이 될 가능성이 있고 지원되지 않습니다.
MySQL 5.6.4 이전에서는 mysqldump는 복제 로그 테이블을 덤프하지 못했습니다 (그들이 이름으로 지정된 --master-data
옵션이 사용 된 경우 제외).