X

MySQL Replication Slave 使用 PHP 來忽略錯誤語法

MySQL 使用量越來越大時, 就會遇到不少莫名奇妙的事, 不管是 Replication 還是 Data Import 等等.

最常見的就是這個: MySQL Replication 出現 Duplicate Key

註: 此狀況只會發生在 MySQL Replication 的 Slave, 所以下述程式也是給 Slave 用, Master 不需要.

MySQL Slave 已經快跟不上, 又常常出現這個錯誤時, 就會想用程式解決, 眼不見為淨.... 於是就有不該出現的程式產生: (ignore-mysql-error.php)


#!/usr/bin/php
<?php
/*
Last_Error:
stop slave; SET GLOBAL SQL_SLAVE_SKIP_COUNTER =1; start slave;
show slave status;
*/
$dbh = mysql_connect('localhost', 'root', 'password');
$r = mysql_query('SHOW SLAVE STATUS', $dbh);
while ($t = mysql_fetch_assoc($r)) {
    if ($t['Last_Errno'] != 0) {
        //echo $t['Last_Error'] . "\n";
        mysql_query('STOP SLAVE', $dbh);
        mysql_query('SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1', $dbh);
        mysql_query('START SLAVE', $dbh);
        $r = mysql_query('SHOW SLAVE STATUS', $dbh);
    }
}
?>

再將此程式設進 Crontab 即可.

  1. chmod 755 ignore-mysql-error.php
  2. crontab -e # 寫入下述

    */1 * * * *  /FILE_PATH/ignore-mysql-error.php

註: 此篇 MySQL Replication Slave 忽略所有錯誤訊息 並不適用處理 Duplicate Key.

Tsung: 對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
Related Post