发现mysql slave服务器经常因为一些特殊字符或者符号产生的更新语句报错,整个同步也会因此而卡在那,最初的办法只是手动去出错的机器,执行下面三条sql语句,跳过错误即可。
slave stop;set global sql_slave_skip_counter=1;slave start;
一台slave机器用这样方法还行,多台就麻烦了,就顺手写了个简单的perl脚本,方便统一跳过错误,代码如下:
#!/usr/bin/env perluse strict;use warnings;# get slave statussub get_status { my ($ip, $usr, $pass) = @_; my $info = `mysql -u$usr -p$pass -h$ip -e 'show slave status\\g;'`; if (($info =~ /slave_io_running: yes/) && ($info =~ /slave_sql_running: no/)) { return 1; } return 0;}# mysql slave skipsub slaveskip { my ($ip, $usr, $pass) = @_; print slave error **\n; system(mysql -u$usr -p$pass -h$ip -e 'slave stop;'); system(mysql -u$usr -p$pass -h$ip -e 'set global sql_slave_skip_counter=1;'); system(mysql -u$usr -p$pass -h$ip -e 'slave start;');}my @hosts = qw/192.168.0.101:root:tt1234192.168.0.102:root: tt1234192.168.0.103:root: tt1234/;foreach (@hosts) { my ($ip, $usr, $pass) = split ':'; print // ----- $ip\n; my $count = 1; while ($count 原文地址:perl 批量跳过 mysql slave 复制错误, 感谢原作者分享。