>  기사  >  백엔드 개발  >  Linux_php 팁에서 mysql 동기화 상태를 감지하는 PHP 방법

Linux_php 팁에서 mysql 동기화 상태를 감지하는 PHP 방법

WBOY
WBOY원래의
2016-05-16 20:25:461313검색

이 기사의 예에서는 PHP가 Linux에서 MySQL의 동기화 상태를 감지하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.

mysql 동기화 상태 감지 구현 방법을 소개하는 두 가지 예를 소개합니다. 코드는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.
#!/bin/sh

#MySQL_Slave 상태 확인
#crontab 시간 00:10
MYSQL_USER="루트"
MYSQL_PWD="123456"
MYSQL_SLAVE_LOG="/tmp/check_mysql_slave.log"
이메일="1351010****@139.com"

MYSQL_PORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "] '{print $5}'`
MYSQL_IP=`ifconfig eth0|grep "inet addr" awk -F[:" "] '{print $4}'`
MYSQL_SLAVE_STATUS=$(/usr/local/webserver/mysql/bin/mysql -u root -psylc23hua -S /tmp/mysql.sock -e

"슬레이브 상태 표시G" grep -i "실행 중")
IO_ENV=`echo $MYSQL_SLAVE_STATUS | grep IO ' {print $2}'`
SQL_ENV=`echo $MYSQL_SLAVE_STATUS | grep SQL '{print $2}'`
NOW=$(날짜 -d 오늘 '%Y-%m-%d %H:%M:%S')

if [ "$MYSQL_PORT" = "3306" ];then
echo "mysql이 실행 중입니다!"
그렇지 않으면
mail -s "warn!server: $MYSQL_IP mysql is down" "$EMAIL"
파이

if [ "$IO_ENV" = "예" -a "$SQL_ENV" = "예" ];then
echo "슬레이브가 실행 중입니다!" 그렇지 않으면
echo "[ $NOW ] 슬레이브가 실행 중이 아닙니다! >> "$MYSQL_SLAVE_LOG"
cat "$MYSQL_SLAVE_LOG" | mail -s "경고! ${MySQL_IP}_replicate_error" "$EMAIL"
파이

0번 출구
PHP 예제 코드, 코드는 다음과 같습니다.
check_rep.php:

코드 복사 코드는 다음과 같습니다.
if(emptyempty($_REQUEST["key"])) die(':) 키 누락'); if($_REQUEST["key"] != 'xupeng') die(':) 오류 키');
include("mysql_instance.php")
include("check_status_api.php")

정의("USERNAME", "사용자 이름")
정의("비밀번호", "비밀번호")
정의("DEBUGMODE", false)

$인스턴스 = get_instances()

if($인스턴스){
에코


종료
에코 "
n";
if(!DEBUGMODE){
에코 "
n";
}그밖에{
에코 "
n";
}
foreach($instances를 $host로){
$res = check_mysql_replication_status($host, USERNAME, PASSWORD)
if(!DEBUGMODE){
스위치($res["result"]){
사례 -4:
​​ $memo = "알 수 없는 예외"
휴식
사례 -3:
​​ $memo = "쿼리 실패"
휴식
사례 -2:
$memo = "포트에 연결할 수 없습니다"
휴식
사례 -1:
​​ $memo = "알 수 없는 상태"
휴식
사례 0:
$memo = "확인"
휴식
사례 1:
​​ $memo = "동기화 실패"
If($res["Slave_IO_Running"] <> "예"){
$memo .= $res["Last_IO_Error"] . "(" . $res

["Last_IO_Errno"] . ")"; }  
If($res["Slave_SQL_Running"] <> "예"){
$memo .= $res["Last_SQL_Error"] . "(" . $res

["Last_SQL_Errno"] . ")"; }  
휴식
사례 2:
​​ $memo = "데이터베이스가 동기화되지 않았습니다"
휴식
}
에코 "

n";
}그밖에{
에코 "

n";
}
}
에코 "
<테이블 테두리="">

인스턴스 결과 Slave_IO_Running Slave_SQL_Running 마스터_호스트
마스터_포트
Replicate_Do_DB
메모
인스턴스 결과 Slave_IO_Running Slave_SQL_Running 마스터_호스트
마스터_포트
Replicate_Do_DB
Slave_IO_State Last_IO_Errno Last_IO_Error Last_SQL_Errno Last_SQL_Error
{$호스트} {$res['result']} {$res['Slave_IO_Running']} {$res['Slave_SQL_Running']} {$res['Master_Host']} {$res['Master_Port']}
{$res['Replicate_Do_DB']} {$memo}
{$호스트} {$res['result']} {$res['Slave_IO_Running']} {$res['Slave_SQL_Running']} {$res['Master_Host']} {$res['Master_Port']}
{$res['Replicate_Do_DB']} {$res['Slave_IO_State']}{$res['Last_IO_Errno']} {$res['Last_IO_Error']} {$res['Last_SQL_Errno']} {$res['Last_SQL_Error']}
n";
에코

종료
}그밖에{
die("mysql 인스턴스가 정의되지 않았습니다."); }

check_status_api.php:




코드 복사


코드는 다음과 같습니다. $r = 배열(
"결과" => -1
);
시도해 보세요{
$dbh = @mysql_connect($host, $username, $password)
if(!$dbh){
//연결할 수 없습니다
$r["결과"] = -2; 반품($r)
}
$query = "슬레이브 상태 표시"
$res = @mysql_query($query, $dbh)
$err = @mysql_error()
if($err){
//연결할 수 없습니다
$r["결과"] = -3; 반품($r)
}
$row = mysql_fetch_array($res)
$r = $행
if(($r["Slave_IO_Running"] == "예") && ($r["Slave_SQL_Running"] == "예"))
{
$r["결과"] = 0
}그밖에{
if(!emptyempty($row)){
$r["결과"] = 1
}그밖에{
$r["결과"] = 2
}
}
}catch(예외 $e){
$r["결과"] = -4; }
반환($r)
}

mysql_instance.php:




코드 복사


코드는 다음과 같습니다.

//GRANT REPLICATION CLIENT ON *.* TO 'Username'@' 모니터링 호스트 IP'는 'password'로 식별됩니다. $mysql_instances =
배열(); $mysql_instances[] = "원격 IP:포트" 함수 get_instances() {  글로벌 $mysql_instances $mysql_instances 반환 }
위 3개의 PHP 파일을 가상 디렉터리에 넣고 URL을 통해 접근하세요.

액세스 방법: http://ip/check_repl.php?key=xupeng
이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.