17.1.5.1 Replication 상태 확인
복제 프로세스를 관리 할 때 가장 일반적인 작업은 복제가 실행 중인지 및 슬레이브와 마스터 사이에 오류가 없는지 확인하는 것입니다. 이 때문에 주요 문은 SHOW SLAVE STATUS
에서 각 슬레이브로 실행해야합니다.
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: master1
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 931
Relay_Log_File: slave1-relay-bin.000056
Relay_Log_Pos: 950
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 931
Relay_Log_Space: 1365
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids: 0
상태 보고서에서 조사해야 할 주요 필드는 다음과 같습니다.
Slave_IO_State
: 슬레이브의 현재 상태입니다. 자세한 내용은 섹션 8.12.5.6 "리플리케이션 슬레이브 I / O 쓰레드 상태" 및 섹션 8.12.5.7 "리플리케이션 슬레이브 SQL 쓰레드 상태" 를 참조하십시오.Slave_IO_Running
: 마스터의 바이너리 로그를 읽어 내기위한 I / O 스레드가 실행 중인지 여부. 복제를 아직 시작하지 않았거나STOP SLAVE
에서 명시 적으로 중지 한 경우를 제외하고 일반적으로 이것을Yes
로하는 것이 좋습니다.Slave_SQL_Running
: 릴레이 로그에 이벤트를 실행하는 SQL 쓰레드가 실행 중인지 여부. I / O 스레드뿐만 아니라 이것은 일반적으로Yes
로하는 것이 좋습니다.Last_IO_Error
,Last_SQL_Error
: 릴레이 로그를 처리 할 때 I / O 및 SQL 스레드에 의해 등록 된 마지막 오류입니다. 이상적으로 이러한 오류가 없다는 공백이어야합니다.Seconds_Behind_Master
: 슬레이브 SQL 쓰레드가 마스터 바이너리 로그의 처리보다 몇 초 늦게 있는가? 높은 (또는 증가) 수치는 슬레이브가 마스터에서 이벤트를 적시에 처리 할 수 없음을 나타낼 수 있습니다.Seconds_Behind_Master
이 값이 0의 경우는 일반적으로 슬레이브가 마스터를 따라 잡았 음을 의미하는 것으로 해석 할 수 있지만, 이것은 엄밀하게는 올바르지 않은 경우가 몇 가지 있습니다. 예를 들어, 마스터와 슬레이브 간의 네트워크 연결이 끊어 졌더라도 슬레이브 I / O 쓰레드가 아직이를 통지되지 않습니다 때, 즉slave_net_timeout
이 아직 경과하지 않은 경우에 이러한 문제가 발생할 수 있습니다.Seconds_Behind_Master
과도 값이 상황을 정확히 반영하지 않는 경우도 있습니다. 슬레이브 SQL 쓰레드가 I / O를 따라 잡기는Seconds_Behind_Master
는 0을 표시하지만, 슬레이브 I / O 쓰레드가 아직 새로운 이벤트를 대기하는 경우Seconds_Behind_Master
는 SQL 쓰레드가 새로운 이벤트의 실행을 종료 까지 큰 값을 나타낼 수 있습니다. 이것은 특히 이벤트의 타임 스탬프가 오래된 경우에 발생할 수 있습니다. 그런 경우 비교적 짧은 기간에 몇 번SHOW SLAVE STATUS
실행하면이 값이 0으로 비교적 큰 값 사이를 앞뒤로 반복하여 변화하는 것을 볼 수 있습니다.
필드의 몇 쌍은 슬레이브가 마스터 바이너리 로그에서 이벤트를 읽고 릴레이 로그 그들을 처리 할 때의 진척 상황에 대한 정보를 제공합니다.
(
Master_Log_file
,Read_Master_Log_Pos
) : 슬레이브 I / O thread가 마스터 바이너리 로그에서 얼마나 떨어져 이벤트를 읽은 여부를 나타내는 로그의 좌표.(
Relay_Master_Log_File
,Exec_Master_Log_Pos
) : 슬레이브 SQL 쓰레드가 마스터 바이너리 로그로부터받은 이벤트를 얼마나 떨어져 실행했는지를 나타내는 로그의 좌표.(
Relay_Log_File
,Relay_Log_Pos
) : 슬레이브 SQL 쓰레드가 슬레이브 릴레이 로그를 얼마나 떨어져 실행했는지를 나타내는 릴레이 로그의 좌표. 이들은 위의 좌표에 대응 합니다만, 마스터 바이너리 로그 좌표가 아닌 슬레이브 릴레이 로그 좌표로 표현됩니다.
마스터는 연결된 슬레이브의 상태를 SHOW PROCESSLIST
를 사용하여 확인하여 실행중인 프로세스의 목록을 확인할 수 있습니다. 슬레이브 연결에서는 Command
필드에 Binlog Dump
수 있습니다.
mysql> SHOW PROCESSLIST \G;
*************************** 4. row ***************************
Id: 10
User: root
Host: slave1:58371
db: NULL
Command: Binlog Dump
Time: 777
State: Has sent all binlog to slave; waiting for binlog to be updated
Info: NULL
복제 프로세스를 실행하는 것은 노예이기 때문에이 보고서에서 사용할 수있는 정보는 거의 없습니다.
--report-host
옵션에서 시작되어 마스터에 연결되어있는 슬레이브의 경우는 마스터에서 SHOW SLAVE HOSTS
명령문은 슬레이브에 대한 기본 정보를 보여줍니다. 출력은 슬레이브 서버의 ID, --report-host
옵션 값, 연결되는 포트 마스터 ID가 포함됩니다.
mysql> SHOW SLAVE HOSTS;
+-----------+--------+------+-------------------+-----------+
| Server_id | Host | Port | Rpl_recovery_rank | Master_id |
+-----------+--------+------+-------------------+-----------+
| 10 | slave1 | 3306 | 0 | 1 |
+-----------+--------+------+-------------------+-----------+
1 row in set (0.00 sec)