13.4.2.5 START SLAVE 구문
START SLAVE [thread_types
] [until_option
] [connection_options
]thread_types
: [thread_type
[,thread_type
] ... ]thread_type
: IO_THREAD | SQL_THREADuntil_option
: UNTIL { {SQL_BEFORE_GTIDS | SQL_AFTER_GTIDS} =gtid_set
| MASTER_LOG_FILE = 'log_name
', MASTER_LOG_POS =log_pos
| RELAY_LOG_FILE = 'log_name
', RELAY_LOG_POS =log_pos
| SQL_AFTER_MTS_GAPS }connection_options
: [USER='user_name
'] [PASSWORD='user_pass
'] [DEFAULT_AUTH='plugin_name
'] [PLUGIN_DIR='plugin_dir
']gtid_set
:uuid_set
[,uuid_set
] ... | ''uuid_set
:uuid
:interval
[:interval
]...uuid
:hhhhhhhh
-hhhh
-hhhh
-hhhh
-hhhhhhhhhhhh
h
: [0-9,A-F]interval
:n
[-n
] (n
>= 1)
thread_type
옵션이없는 START SLAVE
모두 슬레이브 쓰레드를 시작합니다. I / O 쓰레드는 마스터 서버에서 이벤트를 읽고 그것을 릴레이 로그에 저장합니다. SQL 쓰레드는 릴레이 로그에서 이벤트를 읽고 그것을 실행합니다. START SLAVE
는 SUPER
권한이 필요합니다.
START SLAVE
는 슬레이브 쓰레드의 시작에 성공하면 오류없이 복귀합니다. 그러나 그 경우에도 그 슬레이브 쓰레드는 시작 한 후 (예를 들어, 마스터에 연결할 수없는 그 바이너리 로그를 읽을 수 없거나 다른 어떤 문제 때문에) 정지 될 수 있습니다. START SLAVE
에서는 이에 대한 경고가 발생되지 않습니다. 슬레이브의 오류 로그에서 슬레이브 쓰레드에 의해 생성 된 오류 메시지를 확인하거나 SHOW SLAVE STATUS
를 사용하여 슬레이브 쓰레드가 정상적으로 실행되고 있는지 확인해야합니다.
MySQL 5.6.7 이후에서는 START SLAVE
에 의해 진행중인 트랜잭션의 암묵적인 위탁이 발생합니다. 섹션 13.3.3 "암시 적 커밋을 발생시키는 문" 을 참조하십시오.
MySQL 5.6.11에서이 문을 발행하기 전에 gtid_next
를 AUTOMATIC
으로 설정해야합니다 (Bug # 16062608).
MySQL 5.6.4 이후에서는 다음 목록에 설명 된 바와 같이, START SLAVE
를 USER
, PASSWORD
, DEFAULT_AUTH
및 PLUGIN_DIR
옵션과 함께 사용했을 플러그 사용자 암호 인증이 지원됩니다.
USER
: 사용자 이름.PASSWORD
가 사용되는 경우 비어 있거나 NULL 문자열로 설정하거나 설정되지 않은 상태로 할 수 없습니다.PASSWORD
: 암호입니다.DEFAULT_AUTH
: 플러그인의 이름. 기본값은 MySQL 기본 인증입니다.PLUGIN_DIR
: 플러그인의 위치입니다.
MySQL 5.6.4에서는 USER
, PASSWORD
, DEFAULT_AUTH
, PLUGIN_DIR
중 하나를 지정하는 경우에는 IO_THREAD
옵션도 동시에 지정되어 있지 않은 한, SQL_THREAD
옵션을 사용할 수 없습니다 (Bug # 13083642).
자세한 내용은 섹션 6.3.7 "플러그 인증" 을 참조하십시오.
이러한 옵션 중 하나와 함께 안전하지 않은 연결이 사용되는 경우, 서버는 다음 경고를 발행합니다 : Sending passwords in plain text without SSL / TLS is extremely insecure
MySQL 5.6.6에서 START SLAVE ... UNTIL
는 글로벌 트랜잭션 식별자 (GTID)에서 사용하기위한 2 개의 추가 옵션을 지원합니다 ( 섹션 17.1.3 "글로벌 트랜잭션 식별자를 사용한 복제" 를 참조 하십시오). 이러한 각 옵션은 인수로 하나 이상의 글로벌 트랜잭션 식별자 집합 gtid_set
을받습니다 (자세한 내용은 GTID 세트 를 참조하십시오).
thread_type
가 지정되지 않은 경우, START SLAVE UNTIL SQL_BEFORE_GTIDS
을 지정하면 슬레이브 SQL 쓰레드는 gtid_set
에 GTID가 나열되어있는 첫 번째 트랜잭션에 도달 할 때까지 트랜잭션을 처리합니다. START SLAVE UNTIL SQL_AFTER_GTIDS
을 지정하면 슬레이브 쓰레드는 gtid_set
의 마지막
트랜잭션이 두 스레드에 의해 처리 될 때까지 모든 트랜잭션을 처리합니다. 즉, START SLAVE UNTIL SQL_BEFORE_GTIDS
을 지정하면 슬레이브 SQL 쓰레드는 gtid_set
의 첫 번째 GTID에 도달하기 전에 나타난 모든 트랜잭션을 처리하고 START SLAVE UNTIL SQL_AFTER_GTIDS
을 지정하면 슬레이브 쓰레드는 각각이 세트에 GTID 가 포함되지 않은 트랜잭션을 찾을 때까지 gtid_set
에 GTID가 발견 된 트랜잭션을 포함한 모든 트랜잭션을 처리합니다. SQL_BEFORE_GTIDS
과 SQL_AFTER_GTIDS
은 각각 SQL_THREAD
및 IO_THREAD
옵션을 지원하지만 IO_THREAD
를 함께 사용하여도 현재는 아무런 효과도 없습니다.
예를 들어, START SLAVE SQL_THREAD UNTIL SQL_BEFORE_GTIDS = 3E11FA47-71CA-11E1-9E33-C80AA9429562:11-56
을 지정하면 슬레이브 SQL 쓰레드는 시퀀스 번호 11를 가진 트랜잭션을 찾을 때까지 server_uuid
이 3E11FA47-71CA-11E1-9E33-C80AA9429562
이다 마스터에서 발생되는 모든 트랜잭션을 처리 한 후이 트랜잭션을 처리하지 않고 중지합니다. 즉, 시퀀스 번호 10를 가진 트랜잭션까지 모든 트랜잭션이 처리됩니다. 이에 대해 START SLAVE SQL_THREAD UNTIL SQL_AFTER_GTIDS = 3E11FA47-71CA-11E1-9E33-C80AA9429562:11-56
을 실행하면 슬레이브 SQL 쓰레드는 11에서 56까지의 시퀀스 번호를 가진 모든 트랜잭션을 포함한 마스터에서 지금 지정된 모든 트랜잭션을 취득한 뒤 추가 어떤 거래도 처리하지 않고 종료합니다. 즉, 시퀀스 번호 56를 가진 거래는 슬레이브 SQL 쓰레드에 의해 인출 된 마지막 트랜잭션입니다.
MySQL 5.6.14 이전에는 표시된 트랜잭션이 완료 되어도 SQL_AFTER_GTIDS
은 노예를 중지하지 않고 다른 GTID 이벤트가 수신 될 때까지 대기했다 (Bug # 14767986).
SQL_BEFORE_GTIDS
및 SQL_AFTER_GTIDS
키워드는 MySQL 5.6.5 서버 내에 존재합니다. 그러나 그 어떤 키워드도 그 버전에서는 START SLAVE [SQL_THREAD | IO_THREAD] UNTIL
옵션으로 제대로 작동하지 않고 지원되는 것은 MySQL 5.6.6에서뿐이었습니다. (Bug # 13810456)
START SLAVE UNTIL SQL_AFTER_MTS_GAPS
은 MySQL 5.6.6 이상에서 사용할 수 있습니다. 이 문을 실행하면 멀티 스레드 SQL 쓰레드는 릴레이 로그에 이상 차이가 발견되지 않을 때까지 실행 후 중지합니다. 이 문은 SQL_THREAD
옵션을받을 수 있지만 문의 효과는 변경되지 않은 상태입니다. 슬레이브 I / O 스레드에는 영향을주지 않습니다 (또한 IO_THREAD
옵션과 함께 사용할 수 없습니다). START SLAVE UNTIL SQL_AFTER_MTS_GAPS
노예가 다중 스레드 모드에서 오류에 실패한 뒤 그 노예를 멀티 스레드 모드에서 단일 스레드 모드로 전환하기 전에 (즉, slave_parallel_workers
을 0이 아닌 양의 값에서 원래 0으로 재설정 때) 사용하도록하십시오.
실패한 멀티 스레드 슬레이브를 단일 스레드 모드로 변경하려면 다음의 일련의 명령문을 보인 순서대로 실행할 수 있습니다.
START SLAVE UNTIL SQL_AFTER_MTS_GAPS; SET @@ GLOBAL.slave_parallel_workers = 0; START SLAVE SQL_THREAD;
실패한 멀티 스레드 노예 relay_log_recovery
이 활성화 된 상태에서 실행 한 경우, START SLAVE UNTIL SQL_AFTER_MTS_GAPS
를 발행하고 CHANGE MASTER TO
를 실행해야합니다. 그렇지 않으면, 후자의 문이 실패합니다.
실행중인 START SLAVE ...
문 텍스트 전체 (사용 된 USER
또는 PASSWORD
값을 포함)을 SHOW PROCESSLIST
의 출력에서 볼 수 있습니다. 이것은 또한 실행중인 CHANGE MASTER TO
문 텍스트 ( MASTER_USER
또는 MASTER_PASSWORD
에 사용 된 모든 값을 포함)에 적용됩니다.
START SLAVE
는 I / O 스레드와 SQL 스레드 모두가 시작된 후 사용자에게 응답을 보냅니다. 그러나 I / O 스레드는 아직 연결되어 있지 않을 수 있습니다. 따라서 정상적인 START SLAVE
의해 SHOW SLAVE STATUS
는 Slave_SQL_Running=Yes
를 나타냅니다 이로 인해 Slave_IO_Running=Yes
가 보장되는 것은 아닙니다 ( Slave_IO_Running=Yes
는 I / O 스레드가 실행 중인지하고 연결되어있다 경우뿐만이기 때문에). 자세한 내용은 섹션 13.7.5.35 "SHOW SLAVE STATUS 구문" 및 섹션 17.1.5.1 "복제 상태 확인" 을 참조하십시오.
두 스레드를 시작할지 여부를 지정하기 위해이 문에 IO_THREAD
및 SQL_THREAD
옵션을 추가 할 수 있습니다. MySQL 5.6.4 이후에서는 USER
, PASSWORD
, DEFAULT_AUTH
, PLUGIN_DIR
중 하나를 지정하는 경우에는 IO_THREAD
옵션도 동시에 지정되어 있지 않은 한, SQL_THREAD
옵션이 허용되지 않습니다 (Bug # 13083642).
UNTIL
절 (이전의 문법은 until_option
)를 추가함으로써 슬레이브를 시작하고 SQL 쓰레드가 MASTER_LOG_POS
및 MASTER_LOG_FILE 옵션에서 지정되는 마스터 바이너리 로그의 특정 지점 또는 RELAY_LOG_POS
및 RELAY_LOG_FILE
옵션으로 표시됩니다 있는 슬레이브 릴레이 로그의 특정 지점에 도달 할 때까지 실행하도록 지정할 수 있습니다. SQL 스레드는 지정된 포인트에 도달하면 정지합니다. 이 문 SQL_THREAD
옵션이 지정된 경우이 옵션은 SQL 스레드 만 시작합니다. 그렇지 않으면 두 슬레이브 쓰레드를 시작합니다. SQL 쓰레드가 실행 중이면 UNTIL
절은 무시되고 경고가 발행됩니다. UNTIL
절을 IO_THREAD
옵션과 함께 사용할 수 없습니다.
MySQL 5.6.6 이후에서는이 섹션의 앞부분에서 설명한대로 옵션 SQL_BEFORE_GTIDS
또는 SQL_AFTER_GTIDS
중 하나를 사용하여 START SLAVE UNTIL
에서 특정 GTID 또는 GTID 세트를 기준으로 정지 포인트 를 지정할 수도 있습니다. 이러한 옵션 중 하나를 사용하는 경우 SQL_THREAD
또는 IO_THREAD
또는 이들 모두를 지정할 수 있습니다. 또한 모두 지정하지 않는 것도 가능합니다. SQL_THREAD
만을 지정한 경우, 슬레이브 SQL 쓰레드 만이 문의 영향을받습니다. IO_THREAD
만 사용 된 경우, 슬레이브 I / O 만 영향을받습니다. SQL_THREAD
과 IO_THREAD
모두 사용되는 경우 또는 둘 다 사용되지 않은 경우, SQL 스레드 및 I / O 스레드가 모두이 문의 영향을받습니다.
UNTIL
절은 SQL_AFTER_MTS_GAPS
도 동시에 사용하는 경우를 제외하고 멀티 스레드 슬레이브에서는 지원되지 않습니다. MySQL 5.6.6 이전에는 UNTIL
은 멀티 스레드 슬레이브에서는 전혀 지원되지 않았습니다.
UNTIL
절에서는 다음 중 하나를 지정해야합니다.
로그 파일 이름과 파일 위치 모두
(MySQL 5.6.6 이후 :)
SQL_BEFORE_GTIDS
또는SQL_AFTER_GTIDS
중 하나(MySQL 5.6.6 이후 :)
SQL_AFTER_MTS_GAPS
마스터와 릴레이 로그 옵션을 혼합하지 마십시오. MySQL 5.6.6 이후에서는 로그 파일의 옵션을 GTID 옵션과 함께 사용하지 마십시오.
UNTIL
조건은 이후 STOP SLAVE
문 UNTIL
절이없는 START SLAVE
문 또는 서버를 다시 시작하면 재설정됩니다.
로그 파일 위치를 지정하는 경우, SQL 스레드 만이 문의 영향을받는에도 불구하고, START SLAVE ... UNTIL
에서 IO_THREAD
옵션을 사용할 수 있습니다. 이러한 경우 IO_THREAD
옵션은 무시됩니다. 이전 제한은 MySQL 5.6.6에서 도입 된 GTID 옵션 ( SQL_BEFORE_GTIDS
및 SQL_AFTER_GTIDS
) 중 하나를 사용하는 경우에는 적용되지 않습니다. 이 섹션의 앞부분에서 설명한 바와 같이, GTID 옵션은 SQL_THREAD
과 IO_THREAD
를 모두 지원합니다.
UNTIL
절은 복제 디버깅이나 이벤트가 슬레이브에 의해 복제되지 않도록하려는 지점 직전까지 복제를 계속하는 데 도움이 될 수 있습니다. 예를 들어, 적절하지 않은 DROP TABLE
문이 마스터에서 실행 된 경우, UNTIL
를 사용하여 슬레이브에 그 지점 직전까지 수행하지 않도록 지시 할 수 있습니다. 그 이벤트가 어떤 것인지를 찾으려면 마스터 바이너리 로그 또는 슬레이브 릴레이 로그에 mysqlbinlog를 사용하거나 SHOW BINLOG EVENTS
문을 사용합니다.
섹션에서 복제 된 쿼리를 슬레이브로 처리하기 위해 UNTIL
를 사용하는 경우, 슬레이브 서버가 시작될 때 SQL 쓰레드가 실행되는 것을 방지하기 위해 슬레이브를 --skip-slave-start
옵션에서 시작하는 것이 좋습니다. 이 옵션은 아마 예기치 않은 서버를 다시 시작하면 잊어 버릴 수 없도록 명령 행이 아닌 옵션 파일에서 사용하는 것이 좋습니다.
SHOW SLAVE STATUS
문은 UNTIL
조건의 현재 값을 표시하는 출력 필드가 포함되어 있습니다.
아주 오래된 버전의 MySQL (4.0.5 이하)에서는이 문은 SLAVE START
라고했습니다. 그 구문은 MySQL 5.6.1의 시점에서 받아 들여지지 않습니다.