이 기사의 예에서는 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 =
위 3개의 PHP 파일을 가상 디렉터리에 넣고 URL을 통해 접근하세요.
액세스 방법: http://ip/check_repl.php?key=xupeng
이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.