InnoDB Cluster / Group Replication 상태 확인
MySQLInnoDB Cluster명령어
# Shell: topology, primary, fault tolerance, lag
mysqlsh icadmin@db1:3306 -- cluster status --extended=1
mysqlsh icadmin@db1:3306 -- cluster list-routers
-- SQL: group members and queues from any member
SELECT m.MEMBER_HOST, m.MEMBER_PORT, m.MEMBER_STATE, m.MEMBER_ROLE, m.MEMBER_VERSION,
s.COUNT_TRANSACTIONS_IN_QUEUE AS certify_queue,
s.COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE AS apply_queue,
s.COUNT_CONFLICTS_DETECTED AS conflicts
FROM performance_schema.replication_group_members m
JOIN performance_schema.replication_group_member_stats s ON s.MEMBER_ID = m.MEMBER_ID
ORDER BY m.MEMBER_ROLE, m.MEMBER_HOST;하는 일
클러스터 전체 상태(OK / OK_NO_TOLERANCE / NO_QUORUM), primary, 각 멤버의 상태, certification / applier 대기열을 보여 준다. 대기열로 어느 멤버가 뒤처졌는지와 flow control 위험을 알 수 있다.
사용 시점
모든 작업 전후, 알림 발생 시, 쓰기 성능 저하 시, 멤버가 RECOVERING / ERROR / UNREACHABLE을 보일 때.
주의
statusText는 'can tolerate up to ONE failure'(멤버 3개)여야 한다. NO_QUORUM이면 쓰기가 멈춘다. 다른 파티션이 다운된 것이 확실할 때만 forceQuorumUsingPartitionOf를 사용한다. 그렇지 않으면 split-brain이 발생한다. apply_queue가 계속 늘어나는 멤버는 flow control을 트리거하여 primary의 쓰기를 느리게 한다. RECOVERING이 길면 clone / incremental recovery가 실행 중인 것이다. ERROR이면 error log를 확인하고 cluster.rejoinInstance()를 시도한다. 비밀번호의 특수 문자(#, @)는 URI에서 URL 인코딩해야 한다(# → %23).