18.6.8 MySQL Cluster 복제를 사용한 장애 조치 구현
기본 클러스터의 복제 프로세스가 실패하면 보조 복제 채널로 전환 할 수 있습니다. 그런 다음이 구현하는 데 필요한 단계에 대해 설명합니다.
최신 글로벌 체크 포인트 (GCP)의 시간을 가져옵니다. 즉, 슬레이브 클러스터의
ndb_apply_status
테이블에서 최신 신기원을 지정해야 이것은 다음의 쿼리를 사용하여 확인할 수 있습니다.mysql
S'
>SELECT @latest:=MAX(epoch)
->FROM mysql.ndb_apply_status;
1 단계에서 설명한 쿼리에서 얻은 정보를 사용하여 마스터 클러스터
ndb_binlog_index
테이블에서 해당 레코드를 가져옵니다.MySQL Cluster NDB 7.3에서는 다음의 쿼리를 사용하면 마스터
ndb_binlog_index
테이블에서 필요한 레코드를 가져올 수 있습니다.mysql
M'
>SELECT
->@file:=SUBSTRING_INDEX(next_file, '/', -1),
->@pos:=next_position
->FROM mysql.ndb_binlog_index
->WHERE epoch = @latest
->ORDER BY epoch ASC LIMIT 1;
이들은 기본 복제 채널에서의 실패 후 마스터에 저장된 레코드입니다. 여기에서는 사용자 변수
@latest
를 사용하여 1 단계에서 얻은 값을 나타냅니다. 물론있다 mysqld 인스턴스가 다른 서버 인스턴스에 설정된 사용자 변수에 직접 액세스 할 수 없습니다. 이러한 값은 수동으로 두 번째 쿼리 또는 응용 프로그램 코드에 "플러그인"해야합니다.중요START SLAVE
를 실행하기 전에 슬레이브 mysqld가--slave-skip-errors=ddl_exist_errors
에서 시작되어 있는지 확인합니다. 그렇지 않으면 복제가 중복 DDL 오류로 중지 될 수 있습니다.이제 보조 슬레이브 서버에서 다음 쿼리를 실행하여 보조 채널 동기화 할 수 있습니다.
mysql
S'
>CHANGE MASTER TO
->MASTER_LOG_FILE='@file',
->MASTER_LOG_POS=@pos;
다시 사용자 변수 (이 경우
@file
과@pos
)을 사용하여 2 단계에서 취득 된 3 단계에서 적용되는 값을 나타냅니다. 사실, 이러한 값을 수동으로 삽입하거나 관여하는 두 서버에 액세스 할 수있는 응용 프로그램 코드를 사용하여 삽입해야합니다.참고@file
은'/var/log/mysql/replication-master-bin.00001'
등의 문자열 값이기 때문에 SQL 또는 응용 프로그램 코드에서 사용할 때는 따옴표로 묶어야합니다. 그러나@pos
로 표시되는 값은 따옴표로 묶을 필요가 없습니다. 일반적으로 MySQL은 문자열을 숫자로 변환하려고하지만,이 경우는 예외입니다.이제 보조 슬레이브 mysqld에서 적절한 명령을 실행하여 보조 채널에서 복제를 시작할 수있게되었습니다.
mysql
S'
>START SLAVE;
보조 복제 채널이 활성화되면 기본 결함을 확인하고 수정할 수 있습니다. 이를 위해 필요한 적절한 액션은 기본 채널에 실패한 원인에 따라 다릅니다.
보조 복제 채널은 기본 복제 채널의 정지 또는 중지 한 경우에만 시작됩니다. 여러 복제 채널을 동시에 실행하면 불필요한 중복 레코드가 복제 슬레이브로 작성 될 수 있습니다.
문제가 하나의 서버에 한정되는 경우 M
에서 S'
에 또는 M'
에서 S
에 (논리적으로) 복제 수 있지만 아직 검증되지 않았습니다.