셸 모니터링 MySQL 마스터 상태 스 크 립 트 제작 및 해석

주종 복제 의 정상 여 부 를 감시 하 다.
주종 이 정상적으로 작 동 하 는 지 감시 하고 명령 은 다음 과 같다 는 것 을 여러분 은 알 아야 합 니 다.
1
show slave status\G;
그러면 우리 가 주목 해 야 할 매개 변 수 는 다음 과 같다.
1. 먼저 SQL 과 IO 스 레 드 가 YES 상태 인지 확인 합 니 다.
2. 지연 이 0 보다 큰 지 여부  #일반 생 성 환경 지연 이 500 초 이상 인지, 500 초 이상 이면 경찰 에 신고 하고 1000 이상 이면 심각 한 경찰 에 신고 합 니 다.
\ # 예 를 들 어 하나의 sql 을 slave 에 전달 합 니 다. binlog 에 eventshear 에 time stamp 시간 스탬프 가 존재 합 니 다. 다음 binlog 에서 받 은 시간 을 비교 합 니 다. 현재 시간 이 얼마 면 얼마나 표시 되 는 지, 업데이트 가 매우 빈번 하면 500 초 동안 더 많은 sql 축적 이 발생 합 니 다.
적어도 생산 과정 에서 모니터링 은 이렇게 이 루어 지고 nagios 를 포함 한 모니터링 플러그 인 도 이렇게 이 루어 집 니 다.
주요 관심 사http://yijiu.blog.51cto.com/블 로 거들 의 동 의 를 받 아
1
Master_Log_File 
Read_master_log_Pos
  
2.
Relay_Master_Log_File
Exec_Master_log_pos
  
3.
Seconds_Behind_master
하나의 라 이브 러 리 를 판단 할 때 주로 상기 몇 가 지 를 관찰 합 니 다. 만약 에 메 인 라 이브 러 리 가 끊 기 면 SecondsBehind_master 는 이미 NULL 이 되 었 습 니 다.
그러면 라 이브 러 리 에서 로그 가 동기 화 되 었 는 지 어떻게 관찰 합 니까? 다음 과 같 습 니 다.
셸 을 통 해 동기 화 를 감시 하 는 방법
잔말 말고 바로 나 와.
1. status 를 이용 하여 동기 화 완료 여 부 를 관찰
판단 공식
다음은 판단 근거 로 다음 과 같은 값 을 판단 한다.
Master_Log_File 과 RelayMaster_Log_File 의 값 은 같 아야 합 니 다.
동기 화 오프셋 판단
Read_master_log_Pos 와 ExecMaster_log_pos 의 값 은 반드시 같 아야 합 니 다.
위 와 같은 가장 기본 적 인 판단 근거 에 따라 라 이브 러 리 에서 주 라 이브 러 리 로 올 릴 수 있 는 지 여 부 는 라 이브 러 리 에서 master log file 이 읽 은 위 치 를 판단 하고 가장 앞 에 있 는 노드 를 찾 아 올 리 는 것 을 위주 로 합 니 다.
셸 내용 은 다음 과 같다.
#!/bin/bash
user='root'
password='mypass'
thread_status=`/usr/local/mysql/bin/mysql -u"$user" -p"$password" -S /tmp/mysql_3308.sock -e 'show slave status\G'|grep -i yes|wc -l`
status=(`/usr/local/mysql/bin/mysql -u"$user" -p"$password" -S /tmp/mysql_3308.sock -e 'show slave status\G'| egrep -i "Master_Log_File|Relay_Master_Log_File|Read_master_log_Pos|Exec_Master_log_pos|Seconds_Behind_Master" |awk -F':' '{print $2}'`)
echo ${status[4]}
 
if [[ "$thread_status" != 2 ]]; then
        echo "the Replication is Fault , at $(date)" > $catalog
        echo `uname -n` | mail [email protected] < $catalog
        exit 1
fi
 
if [[ "${status[4]}" > '300' ]];then
        echo "yan chi guo gao, at $(date)"  > $catalog
        echo `uname -n` | mail [email protected] < $catalog
        exit 2
fi
 
if [[ ${status[0]} == ${status[2]} ]] && [[ ${status[1]} == ${status[3]} ]]; then
        echo 'The Replication is Normal'
        exit 0  
  else
        echo "the Replication is Fault , at $(date)" > $catalog
        echo `uname -n` | mail [email protected] < $catalog
        exit 2
fi

2. 프로그램 검 측 본문 에 의존http://yijiu.blog.51cto.com/전재 는 블 로 거들 의 동 의 를 받 아야 한다.
예 를 들 어 프로그램 이 master 에서 표를 만 들 고 필드 를 임의로 설정 하 며 master 에서 시간 을 가 져 와 기록 합 니 다.
now 의 시간 은 프로그램 에서 스스로 얻 고 기록 하 며, 마지막 으로 slave 에서 select 를 실행 하여 결과 가 시간 과 일치 하 는 지 확인 합 니 다.
시간 이 같 으 면 정상 이 라 고 생각 합 니 다. master 의 시간 에서 slave 의 시간 을 빼 면 지연 이 존재 한 다 는 것 을 증명 합 니 다. 그러나 이런 방법 에 결함 이 있 습 니 다. 예 를 들 어 메 인 라 이브 러 리 가 끊 기 면 사용 할 수 없습니다.
#!/bin/bash
user='root'
password='mypass'
/usr/local/mysql/bin/mysql -u"$user" -p"$password" -e 'replace into master.repl_heart set t=now(),id=1;' >/dev/null 2>&1
 
master_select=`/usr/local/mysql/bin/mysql -u"$user" -p"$password" -S /tmp/mysql.sock -e 'select t from master.repl_heart where id=1;' | awk '{print $2}' | tail -1`
slave_select=`/usr/local/mysql/bin/mysql -u"$user" -p"$password" -S /tmp/mysql_3308.sock -e 'select t from master.repl_heart where id=1;' | awk '{print $2}' | tail -1`
 
master_date=`date -d "$master_select" +%s`
slave_date=`date -d "$slave_select" +%s`
delay=`echo "$master_date"-"$slave_date" | bc`
 
if [[ $master_date == $slave_date  ]];then
    echo 'is ok'
   elif [[ $delay -le 500 ]];then
     echo cun zai yan chi "$delay"
   else
        echo "the Replication delay too large "$delay" , at $(date)" > $catalog
    echo `uname -n` | mail [email protected] < $catalog
fi

주의해 야 할 것 은 복사 중 줄 형식 이 라면 주 라 이브 러 리 의 시간 입 니 다.줄 이 아니라면, 이 방법 은 now () 내 장 된 함 수 를 s 스 크 립 트 에 생 성하 여 다시 쓸 수 있 습 니 다.
이상, my sql 주종 을 감시 하기 위 한 두 가지 셸 의 쓰기 방법 입 니 다. 부족 하 시 면 지적 해 주 십시오. 감사합니다.

좋은 웹페이지 즐겨찾기