Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

ssuperjun 님의 블로그

[장애 이력 작성 도구] 발표 이후 고도화2 - 실행 명령어 옵션 --replica 제거 본문

인턴

[장애 이력 작성 도구] 발표 이후 고도화2 - 실행 명령어 옵션 --replica 제거

ssuperjun 2026. 3. 20. 18:16

마스터에서 레플리카(슬레이브) ip주소나 hostname 알아낼 있는지 재확인

기존에는 레플리카의 UUID 38자리밖에 알아내지 못했음

 

ca801에서

/home1/irteam/mysql/base/bin/mysql \
  -S /home1/irteam/mysql/run/mysql.sock \
  -u root -p'nhn!@#하나둘셋' \
  -e "SHOW SLAVE HOSTS;"
  
  혹은
  -e "SHOW REPLICA HOSTS;"

=> UUID밖에 알아내지 못함

 

재시도

/home1/irteam/mysql/base/bin/mysql \
  -S /home1/irteam/mysql/run/mysql.sock \
  -u root -p'nhn!@#하나둘셋' \
  -e "SELECT HOST FROM information_schema.processlist WHERE COMMAND='Binlog Dump' OR COMMAND='Binlog Dump GTID';"

=> processlist에서 레플리카의 ip를 알아냄

 

코드 수정 계획: 동적 조회 + conf 기본값

마스터가 살아있으면 processlist로 레플리카 IP를 동적 조회하고, 실패하면 conf의 replica_host를 사용.

1. 마스터에서 processlist로 레플리카 IP 동적 조회
   → 성공 시: irteamsu@{IP} 형태로 replica_target 구성
   → 실패 시 (마스터 다운 등): conf의 replica_host 사용
2. replica_host도 없으면 에러 출력 후 종료
python3 collect_mysql_incident.py user@master --no-dooray

→ processlist로 레플리카 IP 조회 성공 → 복제 구성 모드 실행
→ 조회 실패 (마스터 다운) + conf에 replica_host 있음 → 복제 구성 모드 실행 (폴백)
→ 조회 결과 없음 (Binlog Dump 커넥션 없음) + conf에 replica_host 없음 → 싱글 구성 모드 실행
[replication]
replica_host = irteamsu@infa-testsrv-cb801  # 폴백용 (동적 조회 실패 시 사용)
replica_user = irteamsu                      # 동적 조회 성공 시 IP 앞에 붙일 user명

 

참고

지금 코드 상에선 레플리카 서버 접속 정보로 'replica_host = irteamsu@infa-testsrv-cb801'를 사용하는데, ip 접속 정보를 바꿔도 정상적으로 동작 가능

 

주의사항

구현하며 추가한 부분

conf에 mysql 접속 비밀번호 추가함(그래야 processlist에서 레플리카 ip 수집 가능)

어차피 conf에 기록될 거라 보안 문제는 크게 걱정하지 않아도 됨


 

결과

 

기대효과: 이제 실행 시 --replica 옵션을 입력하지 않아도 됨

단순해진 실행 명령어

# 싱글/복제 구성 자동 판단 (두레이 등록 생략)
python3 collect_mysql_incident.py irteamsu@infa-testsrv-ca801 --no-dooray

# 싱글/복제 구성 자동 판단 (두레이 SSH 터널 사용)
python3 collect_mysql_incident.py irteamsu@infa-testsrv-ca801 --tunnel

한계: 수집 대상 DB가 달라질 경우, 여전히 conf의 설정값 수정 필요(기존에는 레플리카 서버 hostname을 수정해야 했다면, 이제는 마스터 MySQL DB의 비밀번호 수정)