我使用这样的某些my.cnf设置。 RDS实例是否允许这样的选项?
slave-skip-errors = 1062,1054
replicate-ignore-db=verv_raw
replicate-ignore-table=verv.ox_session
replicate-wild-ignore-table=verv_raw.ox%
replicate-wild-ignore-table=verv_raw.ox%
我知道一次跳过一个错误的过程。
CALL mysql.rds_skip_repl_error;
但我正在寻找的是跳过奴隶上所有错误的选项。是否可以在RDS环境中使用?
答案 0 :(得分:1)
我通过创建一个像这样的mysql事件调度程序来解决它:
CREATE EVENT repl_error_skipper
ON SCHEDULE
EVERY 15 MINUTE
COMMENT 'Calling rds_skip_repl_error to skip replication error'
Do
CALL mysql.rds_skip_repl_error;
/*also you can add other logic */
要设置其他全局变量,您可以在rds参数组中找到并设置这些变量(如果可以更改)(您必须创建新参数组并设置变量值)。
答案 1 :(得分:1)
如前所述,此命令仅跳过一个复制错误。我编写了一个 PHP 脚本来循环遍历它,并通过 cron 作业每分钟运行一次(我的副本被日志卡住了一系列错误查询,而不是在主数据库上执行的)
for($i = 1; $i <= 30; $i++) {
$db = new mysqli('someserver.rds.amazonaws.com', 'root', 'password');
$res = $db->query('CALL mysql.rds_skip_repl_error;');
if(!$res) {
//echo 'Query failed: ' . $db->error . "\n";
return;
}
//var_dump($res->fetch_assoc());
$db->close();
sleep(1);
}
您需要对此进行一些修补(并非每个服务器都只能容忍呼叫之间的一秒和每分钟 30 次呼叫),但它确实有效(尽管以蛮力方式)。您必须每次都创建一个新的数据库连接来运行它。循环打开、运行然后关闭连接。