1.4.6. 리플리케이션 릴레이 및 상태 파일
1.4.6.1. 슬레이브 릴레이 로그
1.4.6.2. 슬레이브 상태 파일
리플리케이션을 실행하는 동안에 MySQL 서버는 마스터 서버에서 전달되는 바이너리 로그를 가지고 있기 위해서, 그리고 전달된 로그 (relayed log) 안에 있는 현재 상태 및 위치 정보를 기록하기 위해서 여러 개의 파일을 생성한다. 이 과정에는 세 가지 파일 타입이 존재한다:
-
relay log는 마스터 바이너리 로그에서 읽어 온 이벤트로 구성된다. 바이너리 로그에 있는 이벤트는 리플리케이션 쓰레드의 일 부분으로 슬레이브에서 실행된다.
-
master.info 파일은 슬레이브의 마스터 연결에 대한 현재 상태 및 구성 정보를 가지고 있다. 이 파일은 마스터 호스트 이름, 로그인 인증서, 그리고 마스터 바이너리 로그의 현재 위치에 대한 정보를 가진다.
-
relay.info 파일은 슬레이브 릴레이 로그 파일 안에 있는 실행 위치 정보를 가지고 있다.
1.4.6.1. 슬레이브 릴레이 로그
릴레이 로그 파일 이름은 host_name-relay-bin.nnnnnn 형식을 디폴트로 가지며, 여기에서 host_name는 슬레이브 서버 이름이고, nnnnnn은 시퀀스 번호가 된다. 000001로 시작하는 연속적인 시퀀스 번호를 사용해서 연속적인 릴레이 로그 파일들이 생성된다. 슬레이브는 현재 사용 중에 있는 릴레이 로그 파일을 추적하기 위해 하나의 인덱스를 사용한다. 디폴트 릴레이 로그 인덱스 파일 이름은 host_name-relay-bin.index이다. 슬레이브 서버는 디폴트로 자신의 데이터 디렉토리에 릴레이 파일을 생성한다. 디폴트 파일 이름은 --relay-log와 --relay-log-index 서버 옵션을 가지고 덮어 쓸 수 있다.
릴레이 로그는 바이너리 로그와 동일한 포맷을 사용해서 mysqlbinlog로 읽을 수 있다. SQL 쓰레드는 릴레이 로그 파일 안에 있는 모든 이벤트를 처리하고 더 이상 그 파일이 필요가 없게 되면 자동으로 각 릴레이 로그 파일을 즉시 삭제한다. SQL 쓰레드는 이러한 삭제 동작을 매우 조심스럽게 진행하기 때문에 릴레이 로그 파일을 삭제하는 데에는 명백한 메커니즘이 존재하지 않는다. 하지만, FLUSH LOGS는 릴레이 로그를 회전 (rotate) 시키며, 이것은 SQL 쓰레드가 이 파일들을 삭제하는 시기에 영향을 미친다.
슬레이브 서버는 아래의 조건 아래에서 새로운 릴레이 로그 파일을 생성한다:
· I/O 쓰레드가 매번 시작될 때.
· 로그가 플러시 될 때; 예를 들면, FLUSH LOGS 또는 mysqladmin flush-logs가 실행될 때.
· 현재 로그 파일의 크기가 너무 커질 때. “너무 크다 (too large)” 의 의미는 아래와 같이 판단된다:
o max_relay_log_size의 값이 0보다 크면, 그 값이 릴레이 로그 파일의 최대 크기가 된다.
o max_relay_log_size의 값이 0이면, max_binlog_size가 릴레이 로그 파일의 최대 크기가 된다.
1.4.6.2. 슬레이브 상태 파일
슬레이브 리플리케이션 서버는 데이터 디렉토리에 두 개의 작은 파일을 추가로 생성한다. 이 상태 파일들은 디폴트로 master.info 및 relay-log.info라는 이름을 사용한다. 이러한 이름은 --master-info-file 과 --relay-log-info-file 옵션으로 바꿀 수 있다.
상태 파일들은 디스크에 저장이 되기 때문에 슬레이브 서버가 셧다운 되더라도 계속 존재를 하게 된다. 슬레이브가 시작되는 다음 시점에, 슬레이브 서버는 마스터에서 바이너리 로그를 어디까지 읽었는지 그리고 자신의 릴레이 로그가 어디까지 진행 되었는지를 알아보기 위해 이 파일들을 읽는다.
I/O 쓰레드는 master.info 파일을 업데이트한다. 아래의 테이블은 SHOW SLAVE STATUS가 출력하는 컬럼과 파일 라인이 어떤 상관 관계를 가지고 있는지 설명하는 것이다.
|
Line |
Status Column |
Description |
|
1 |
|
Number of lines in the file |
|
2 |
Master_Log_File |
The name of the master binary log currently being read from the master. |
|
3 |
Read_Master_Log_Pos |
The current position within the master binary log that have been read from the master. |
|
4 |
Master_Host |
The hostname of the master. |
|
5 |
Master_User |
The username used to connect to the master. |
|
6 |
Password (not shown by SHOW SLAVE STATUS) |
The password used to connect to the master. |
|
7 |
Master_Port |
The network port used to connect to the master. |
|
8 |
Connect_Retry |
The period (in seconds) that the slave will wait before trying to reconnect to the master. |
|
9 |
Master_SSL_Allowed |
Indicates whether the server supports SSL connections. |
|
10 |
Master_SSL_CA_File |
The file used for the Certificate Authority (CA) certificate. |
|
11 |
Master_SSL_CA_Path |
The path to the Certificate Authority (CA) certificates. |
|
12 |
Master_SSL_Cert |
The name of the SSL certificate file. |
|
13 |
Master_SSL_Cipher |
The name of the cipher in use for the SSL connection. |
|
14 |
Master_SSL_Key |
The name of the SSL key file. |
|
15 |
Master_SSL_Verify_Server_Cert |
Whether to verify the server certificate. |
Master_SSL_Verify_Server_Cert는 MySQL 5.1.18 이후부터 master.info 파일에 존재한다.
SQL 쓰레드는 relay-log.info 파일을 업데이트한다. 아래의 테이블은 SHOW SLAVE STATUS가 출력하는 컬럼과 파일의 라인이 어떤 상관 관계를 가지고 있는지 설명하는 것이다.
|
Line |
Status Column |
Description |
|
1 |
Relay_Log_File |
The name of the current relay log file. |
|
2 |
Relay_Log_Pos |
The current position within the relay log file. Events up to this position have been executed on the slave database. |
|
3 |
Relay_Master_Log_File |
The name of the master binary log file from which the events in the relay log file were read. |
|
4 |
Exec_Master_Log_Pos |
The equivalent position within the master's binary log file of events that have already been executed. |
relay-log.info 파일 내용과 SHOW SLAVE STATES 명령어가 보여 주는 상태는, relay-log.info 파일을 디스크에서 가져오지 않았다면 일치하지 않을 수 있다.