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 即可.
- chmod 755 ignore-mysql-error.php
- crontab -e # 寫入下述
*/1 * * * * /FILE_PATH/ignore-mysql-error.php
註: 此篇 MySQL Replication Slave 忽略所有錯誤訊息
並不適用處理 Duplicate Key.