17.2.2.1 Slave Relay Log
릴레이 로그는 바이너리 로그와 마찬가지로, 데이터베이스 변경을 기술하는 이벤트를 포함한 번호 첨부 파일 세트와 사용 된 모든 릴레이 로그 파일의 이름을 포함한 인덱스 파일로 구성됩니다.
용어 "릴레이 로그 파일 '은 일반적으로 데이터베이스 이벤트를 포함한 개별 번호가있는 파일을 보여줍니다. 용어 "릴레이 로그"번호가 매겨진 릴레이 로그 파일과 인덱스 파일 세트의 총칭입니다.
릴레이 로그 파일은 바이너리 로그 파일과 같은 형식으로 mysqlbinlog를 사용하여 읽을 수 있습니다 ( 섹션 4.6.8 "mysqlbinlog - 바이너리 로그 파일을 처리하기위한 유틸리티" 참조).
기본적으로 데이터 디렉토리에 릴레이 로그 파일 이름의 형식은
입니다. 여기서 host_name
-relay-bin. nnnnnn
host_name
은 슬레이브 서버 호스트 이름 nnnnnn
은 시퀀스 번호입니다. 연속 릴레이 로그 파일은 000001
로 시작하는 시퀀스 번호를 사용하여 작성됩니다. 노예 인덱스 파일을 사용하여 현재 사용중인 릴레이 로그 파일을 추적합니다. 데이터 디렉토리의 기본 릴레이 로그 인덱스 파일 이름은
입니다. host_name
-relay-bin.index
기본 릴레이 로그 파일 및 릴레이 로그 인덱스 파일 이름은 각각 --relay-log
및 --relay-log-index
서버 옵션을 재정의 할 수 있습니다 ( 섹션 17.1.4 "복제 및 바이너리 로깅 옵션과 변수" 참조).
슬레이브는 기본 호스트 기반 릴레이 로그 파일 이름을 사용하는 경우, 복제 설정 후 슬레이브의 호스트 이름을 변경하면 복제가 다음 오류와 함께 실패 할 수 있습니다 : Failed to open the relay log 및 Could not find target log during relay log initialization. 이것은 알려진 문제입니다 (Bug # 2122을 참조하십시오). 향후 슬레이브의 호스트 이름이 변경 될 가능성이있는 경우 (예를 들어, DHCP를 사용하여 호스트 이름을 변경할 수 있도록하고, 슬레이브 네트워크가 설치되어있는 경우) 슬레이브를 처음 설정할 때 --relay-log
및 --relay-log-index
옵션을 사용하여 릴레이 로그 파일 이름을 명시 적으로 지정하여이 문제를 완전히 해결할 수 있습니다. 이렇게하면 서버 호스트 이름 변경 사이에 이름 종속성이 없습니다.
복제가 이미 시작된 후에 문제가 발생하면이를 해결하는 한 가지 방법은 슬레이브 서버를 중지하고 이전 릴레이 로그 인덱스 파일의 내용을 새 앞에 추가하고 슬레이브를 다시 시작 입니다. Unix 시스템에서는 여기에 같이 작업을 수행 할 수 있습니다.
shell>cat
shell>new_relay_log_name
.index >>old_relay_log_name
.indexmv
old_relay_log_name
.indexnew_relay_log_name
.index
슬레이브 서버는 다음 조건에서 새로운 릴레이 로그 파일을 만듭니다.
I / O 쓰레드가 시작할 때마다.
로그가 플래시되었을 때. 예를 들어,
FLUSH LOGS
또는 mysqladmin flush-logs에서.현재의 릴레이 로그 파일의 크기가 "너무 자라"때. 다음과 같이 판단합니다.
max_relay_log_size
(최대 릴레이 로그 파일 크기)의 값이 0보다 큰 경우.max_relay_log_size
의 값이 0이면max_binlog_size
가 최대 릴레이 로그 파일 크기를 결정합니다.
SQL 스레드는 각 릴레이 로그 파일의 모든 이벤트를 실행하고 그것이 필요하지 않을 때 즉시 파일을 자동으로 삭제합니다. SQL thread가이 작업을 담당하기 위해 릴레이 로그를 삭제하기위한 명시적인 메커니즘은 없습니다. 그러나 FLUSH LOGS
는 릴레이 로그를 순환하지만, 이것은 SQL 쓰레드가 언제 그들을 제거하는 데 영향합니다.