#!/usr/bin/perl -w # written by philo vivero - 2005 # released under the terms of the GNU GPL use strict; my $errCodeVals; $errCodeVals->{1060} = "Column you're adding already exists"; $errCodeVals->{1061} = "Index you're adding already exists"; $errCodeVals->{1062} = "Primary key of row you're inserting already exists"; $errCodeVals->{1091} = "Index/column you're dropping doesn't exist"; my $errCodesList = ""; foreach my $key (keys %{$errCodeVals}) { $errCodesList .= "$key|"; } $errCodesList =~ s/\|$//; open (SQLCMD, "| mysql -uroot"); my $errNo = getErrNo(); while ($errNo) { if ($errNo !~ /$errCodesList/) { print " - Can't deal with errNo=$errNo ($errCodeVals->{$errNo})! Aborting fatally dead.\n"; exit 255; } print " - Skipping past error: $errNo ($errCodeVals->{$errNo})\n"; print SQLCMD "set global sql_slave_skip_counter = 1;\n"; print SQLCMD "slave start;\n"; $errNo = getErrNo(); unless ($errNo) { print " - Sleeping 2 seconds to see if slave dies again.\n"; sleep 2; $errNo = getErrNo(); } } close SQLCMD; # ----------------------------------------------------- # ----------------------------------------------------- # ----------------------------------------------------- sub getErrNo { my ($err, $errNo); $err = `mysql -uroot -e "show slave status\\G"| grep Last_Errno`; if ($err =~ /: (\d+)/) { $errNo = $1; } return $errNo; }