Mysql cluster slave server的自动检测与修复

上一篇 / 下一篇  2005-01-05 17:52:36 / 个人分类:其他

需要DBIX及Mail等perl模块木铎校园 BBS 社区 n#nIJW,o3e}
注意,虽然能够自动修复,但是可能造成slave的数据条目少于master的条目!使用的时候自己注意些好了
7M8M_f i}0本脚本是修改版,原作者是Jeremy Zawodny
dOd6OQd0
}nV~0z!V0代码:
Y"~x2P&u9Yv;^*?0[code]木铎校园 BBS 社区 J5X$sJ@(c2A0z
#!/usr/local/bin/perl -w木铎校园 BBS 社区M&gz;|M[bY x
# chunshengsterATgmail.com木铎校园 BBS 社区 Iwc3z Jq,[v'x2b
# fix mysql replication if it encounters a problem木铎校园 BBS 社区 e2u$Q:e_|6|'T
# Useage:perl fix_repl.pl ip1 ip2 ip3
,vg8Zs9]2?pxtl4k0木铎校园 BBS 社区)HU:h,BISEl)C h
  $&line;=1;      # unbuffer stdout木铎校园 BBS 社区S1`'i5l:Jj9G\:Q
  use strict;
\2Q]`7|,a Ew0   use DBIx::DWIW;木铎校园 BBS 社区2sai}G5A
  use Mail::Mailer;木铎校园 BBS 社区d$a3XQ,UH(D
  my $ip;木铎校园 BBS 社区`Z}"Q9z-{
foreach $ip (@ARGV) &leftsign;木铎校园 BBS 社区/o5}*kB;{2[\9n.|#n qz
  &fixdb($ip);木铎校园 BBS 社区6EV3m/]%MI
&rightsign;
*o M0b'z+Mt4~)a0
!ROT.x^G!s ^%z0exit;
w&pqP-O0
_f8{j#tj\Y1M0sub fixdb()
&k#O#l H&m;Y8Qx8l(Pe0&leftsign;木铎校园 BBS 社区6]z,E}\-g
  my $host = shift &line;&line; \'localhost\';
Ke-|4U-a0   my $conn = DBIx::DWIW->Connect(木铎校园 BBS 社区0C [XiSd
     DB   => \"test\",
2fl8?;u6L3N"K*p5iC eS0      User => \"sqlmon\",木铎校园 BBS 社区;~#O xN M
     Pass => \'!@#$%^&*()\',木铎校园 BBS 社区 N4SP,C#t*F!A
      Host => $host,木铎校园 BBS 社区~(].kEx
     Port  => 3306) or die \"Couldn\'t connect to database!\";木铎校园 BBS 社区4W#]+D'Y)YY

g%b/D/E7U0   print \"checking $host ... \\n\";木铎校园 BBS 社区-D5C&d|,{
  my $info = $conn->Hash(\"SHOW SLAVE STATUS\") or die $@;木铎校园 BBS 社区&GS M]oE&T M
  my @version = $conn->Array(\"SHOW VARIABLES LIKE \'Version\'\");
#Cl7|V;{0   my $fix_cmd;
1Ka2lh+lT%BYx0   my $start_cmd;
*A8eyyW Q0# slave not start
2W:v[lE0   if ($info->&leftsign;Slave_IO_Running&rightsign; eq \'No\' and $info->&leftsign;Slave_SQL_Running&rightsign; eq \'No\')木铎校园 BBS 社区:U!o*m&atul
  &leftsign;木铎校园 BBS 社区^#Q8` OQ
     $fix_cmd = \"SET SQL_SLAVE_SKIP_COUNTER = 1\";
Ax1nGWU8k0      $start_cmd = \"SLAVE START\";木铎校园 BBS 社区H:ne m`(Sg Y'P{
  &rightsign;木铎校园 BBS 社区'z T"QNJ:d
# 4.0.0 - 4.0.2
B}9T*u4Jwyz5C8E0   elsif ($version[1] =~ /^4\\.0\\.[012]/ and $info->&leftsign;Slave_SQL_Running&rightsign; eq \'No\')木铎校园 BBS 社区9W bk%F+CC$G
  &leftsign;木铎校园 BBS 社区,{7Y#f)W(L}(J?
     $fix_cmd = \"SET SQL_SLAVE_SKIP_COUNTER = 1\";
0p)r6mU_Z0      $start_cmd = \"SLAVE START SQL_THREAD\";
` Y5McZ0   &rightsign;
0U#~ N|kF0# 4.0.3 - 4.0.xx, 4.1.xx.  Don\'t know what 5.0 will be like.木铎校园 BBS 社区 L$`K yUI1rh
  elsif ($version[1] =~ /^4\\.[01]\\./ and $info->&leftsign;Slave_SQL_Running&rightsign; eq \'No\')木铎校园 BBS 社区IQNbpj%G'I5N9O
  &leftsign;木铎校园 BBS 社区{(B~3Y0NZQ-d)[&p P
     $fix_cmd = \"SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1\";木铎校园 BBS 社区0z%c)U[ dCz4oq
     $start_cmd = \"SLAVE START SQL_THREAD\";
"q IHU$C*W#Va0   &rightsign;木铎校园 BBS 社区&z]1_+h8U:a+l
# things are okay or unknown version?木铎校园 BBS 社区[J~Z#w&_+[?^l
  else
.d?l6G Kr\!v0   &leftsign;木铎校园 BBS 社区;`Lq_D7a\
        print \"GOOD\\n\";
-Cu3y!a'knC0   &rightsign;木铎校园 BBS 社区W4d7V!xk
  if ($info->&leftsign;Slave_IO_Running&rightsign; eq \'No\'  or  $info->&leftsign;Slave_SQL_Running&rightsign; eq \'No\' )&leftsign;木铎校园 BBS 社区1U+EiHk?
  &mailtoadmin($info,$host);木铎校园 BBS 社区W4M#K/lNQ5^,V
  print \"FIXING ... \";
/WI-J!Yda#W b0   $conn->Execute($fix_cmd);木铎校园 BBS 社区h7g%H MTC`a
  $conn->Execute($start_cmd);
Q"]8C&t1r't$]i0   print \"DONE\\n\";木铎校园 BBS 社区,T3Di;GI#p?$M f
  &rightsign;木铎校园 BBS 社区od ^*|(kV/{

G"LI;?8Wu$p0&rightsign;
pw ub6K Z"f%Q~!V0
!rb$|?!`(kc0sub mailtoadmin()&leftsign;木铎校园 BBS 社区+l^ZQ.P;n
       my $body=shift;
J4PK ~}:e`0      my $host = shift;
6oqu6uKhzd0        my @MailTo=(\"xxxx\\@yyyy.com\");
{r3^)GD;?Gg0        my $subject = \"Mysql Self fix replication on $host \";木铎校园 BBS 社区c(k5cX$^
     my $mailer = Mail::Mailer->new() or die $@;木铎校园 BBS 社区W |Fj.R0X w
     $mailer->open(&leftsign; From    => $host,木铎校园 BBS 社区3S9s)eZ#A
     To      => \\@MailTo,木铎校园 BBS 社区,Q tkADK+\]4D
     Subject => $subject,木铎校园 BBS 社区y/jS/vC2qDp
     &rightsign;)or die \"Can\'t open: $!\\n\";
A@8g4zAa8Vy'o9H%c0#    while ( my ($key, $value) = each(%$body) ) &leftsign;木铎校园 BBS 社区2exijQ'[l
#        print $mailer \"$key => $value\\n\";
OW o/|i;U1n0#    &rightsign;木铎校园 BBS 社区'r(ouJ Z
  print $mailer <<MAILCONTENT;木铎校园 BBS 社区.a Z-ld3zO7hfZ7y

bK6P#}-{ x F0   *************************** show slave status***************************木铎校园 BBS 社区2sD$AT&w&RDM
木铎校园 BBS 社区_R!{_/wSs,C
  Master_Host         =>  $body->&leftsign;\'Master_Host\'&rightsign;木铎校园 BBS 社区 e-K$mSO
  Master_User         =>  $body->&leftsign;\'Master_User\'&rightsign;木铎校园 BBS 社区(G \\|j0T @ r
  Master_Port         =>  $body->&leftsign;\'Master_Port\'&rightsign;木铎校园 BBS 社区 Dn N&Y|T2eB5\3B8vjkO
  Connect_retry      =>  $body->&leftsign;\'Connect_retry\'&rightsign;
zL ^0w#o0   Master_Log_File   =>  $body->&leftsign;\'Master_Log_File\'&rightsign;木铎校园 BBS 社区0|%|tv({7U({
  Read_Master_Log_Pos =>$body->&leftsign;\'Read_Master_Log_Pos\'&rightsign;
r#_3bG/QI]+m9?8Z0   Relay_Log_File      =>  $body->&leftsign;\'Relay_Log_File\'&rightsign;
H:_:g2y6oa{b5OI0   Relay_Log_Pos      =>  $body->&leftsign;\'Relay_Log_Pos\'&rightsign;木铎校园 BBS 社区spy8PdG/G
  Relay_Master_Log_File =>$body->&leftsign;\'Relay_Master_Log_File\'&rightsign;木铎校园 BBS 社区6id'gh.c!a
  Slave_IO_Running =>$body->&leftsign;\'Slave_IO_Running\'&rightsign;木铎校园 BBS 社区 d"^5hM1p Mk0H%Zky
  Slave_SQL_Running =>$body->&leftsign;\'Slave_SQL_Running\'&rightsign;木铎校园 BBS 社区I`-W#yg g
  Replicate_do_db   =>   $body->&leftsign;\'Replicate_do_db\'&rightsign;木铎校园 BBS 社区3h$M$q8A}X-J:Hl
  Replicate_ignore_db =>$body->&leftsign;\'Replicate_ignore_db\'&rightsign;
\mml'x zIJ0   Last_errno            =>    $body->&leftsign;\'Last_errno\'&rightsign;木铎校园 BBS 社区3H,m@Kq LV
  Last_error            =>    $body->&leftsign;\'Last_error\'&rightsign;
s#nPU Q { vUW0   Skip_counter         =>    $body->&leftsign;\'Skip_counter\'&rightsign;
#lBJ4S`2j0   Exec_master_log_pos => $body->&leftsign;\'Exec_master_log_pos\'&rightsign;木铎校园 BBS 社区?{,p [2CFPA
  Relay_log_space   =>    $body->&leftsign;\'Relay_log_space\'&rightsign;
Sj'd6g9qu9Vsrl0MAILCONTENT
&k/x\ Ez+y#uV6X0   $mailer->close();
;g9b2PLm_"I.dQW0&rightsign;[/code]<θθθ>192|

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

关于作者