免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 31623 | 回复: 13
打印 上一主题 下一主题

贡献一个mysql replication出错自动检测的脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-01-05 11:13 |只看该作者 |倒序浏览
需要DBIX及Mail等perl模块
注意,虽然能够自动修复,但是可能造成slave的数据条目少于master的条目!使用的时候自己注意些好了
本脚本是修改版,原作者是Jeremy Zawodny

  1. #!/usr/local/bin/perl -w
  2. #
  3. # fix mysql replication if it encounters a problem
  4. # Useage:perl fix_repl.pl ip1 ip2 ip3

  5.         $|=1;      # unbuffer stdout
  6.         use strict;
  7.         use DBIx::DWIW;
  8.         use Mail::Mailer;
  9.         my $ip;
  10. foreach $ip (@ARGV) {
  11.         &fixdb($ip);
  12. }

  13. exit;

  14. sub fixdb()
  15. {
  16.         my $host = shift || 'localhost';
  17.         my $conn = DBIx::DWIW->;Connect(
  18.                 DB   =>; "test",
  19.                 User =>; "sqlmon",
  20.                 Pass =>; '!@#$%^&*()',
  21.             Host =>; $host,
  22.                 Port  =>; 3306) or die "Couldn't connect to database!";

  23.         print "checking $host ... \n";
  24.         my $info = $conn->;Hash("SHOW SLAVE STATUS") or die $@;
  25.         my @version = $conn->;Array("SHOW VARIABLES LIKE 'Version'");
  26.         my $fix_cmd;
  27.         my $start_cmd;
  28. # slave not start
  29.         if ($info->;{Slave_IO_Running} eq 'No' and $info->;{Slave_SQL_Running} eq 'No')
  30.         {
  31.                 $fix_cmd = "SET SQL_SLAVE_SKIP_COUNTER = 1";
  32.                 $start_cmd = "SLAVE START";
  33.         }
  34. # 4.0.0 - 4.0.2
  35.         elsif ($version[1] =~ /^4\.0\.[012]/ and $info->;{Slave_SQL_Running} eq 'No')
  36.         {
  37.                 $fix_cmd = "SET SQL_SLAVE_SKIP_COUNTER = 1";
  38.                 $start_cmd = "SLAVE START SQL_THREAD";
  39.         }
  40. # 4.0.3 - 4.0.xx, 4.1.xx.  Don't know what 5.0 will be like.
  41.         elsif ($version[1] =~ /^4\.[01]\./ and $info->;{Slave_SQL_Running} eq 'No')
  42.         {
  43.                 $fix_cmd = "SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1";
  44.                 $start_cmd = "SLAVE START SQL_THREAD";
  45.         }
  46. # things are okay or unknown version?
  47.         else
  48.         {
  49.                         print "GOOD\n";
  50.         }
  51.         if ($info->;{Slave_IO_Running} eq 'No'  or  $info->;{Slave_SQL_Running} eq 'No' ){
  52.         &mailtoadmin($info,$host);
  53.         print "FIXING ... ";
  54.         $conn->;Execute($fix_cmd);
  55.         $conn->;Execute($start_cmd);
  56.         print "DONE\n";
  57.         }

  58. }

  59. sub mailtoadmin(){
  60.         my $body=shift;
  61.                 my $host = shift;
  62.         my @MailTo=("xxxx\@yyyy.com");
  63.         my $subject = "Mysql Self fix replication on $host ";
  64.                 my $mailer = Mail::Mailer->;new() or die $@;
  65.                 $mailer->;open({ From    =>; $host,
  66.                 To      =>; \@MailTo,
  67.                 Subject =>; $subject,
  68.                 })or die "Can't open: $!\n";
  69. #    while ( my ($key, $value) = each(%$body) ) {
  70. #        print $mailer "$key =>; $value\n";
  71. #    }
  72.         print $mailer <<MAILCONTENT;

  73.         *************************** show slave status***************************

  74.         Master_Host                        =>;  $body->;{'Master_Host'}
  75.         Master_User                        =>;  $body->;{'Master_User'}
  76.         Master_Port                        =>;  $body->;{'Master_Port'}
  77.         Connect_retry                =>;  $body->;{'Connect_retry'}
  78.         Master_Log_File        =>;  $body->;{'Master_Log_File'}
  79.         Read_Master_Log_Pos =>;$body->;{'Read_Master_Log_Pos'}
  80.         Relay_Log_File                =>;  $body->;{'Relay_Log_File'}
  81.         Relay_Log_Pos                =>;  $body->;{'Relay_Log_Pos'}
  82.         Relay_Master_Log_File =>;$body->;{'Relay_Master_Log_File'}
  83.         Slave_IO_Running =>;$body->;{'Slave_IO_Running'}
  84.         Slave_SQL_Running =>;$body->;{'Slave_SQL_Running'}
  85.         Replicate_do_db        =>;   $body->;{'Replicate_do_db'}
  86.         Replicate_ignore_db =>;$body->;{'Replicate_ignore_db'}
  87.         Last_errno                                =>;    $body->;{'Last_errno'}
  88.         Last_error                                =>;    $body->;{'Last_error'}
  89.         Skip_counter                        =>;    $body->;{'Skip_counter'}
  90.         Exec_master_log_pos =>; $body->;{'Exec_master_log_pos'}
  91.         Relay_log_space        =>;    $body->;{'Relay_log_space'}
  92. MAILCONTENT
  93.         $mailer->;close();
  94. }

复制代码

论坛徽章:
0
2 [报告]
发表于 2005-01-05 17:14 |只看该作者

贡献一个mysql replication出错自动检测的脚本

呵呵,谢谢楼主,其实如果用shell来做的话,是粉简单的,而且以前也已经有现成的了.

论坛徽章:
0
3 [报告]
发表于 2005-01-06 10:18 |只看该作者

贡献一个mysql replication出错自动检测的脚本

不错~~~保留

论坛徽章:
0
4 [报告]
发表于 2005-03-29 17:11 |只看该作者

贡献一个mysql replication出错自动检测的脚本

看你的脚本作用不错,能高诉我怎么用吗?

论坛徽章:
0
5 [报告]
发表于 2005-03-29 17:14 |只看该作者

贡献一个mysql replication出错自动检测的脚本

看你的脚本作用不错,能高诉我怎么用吗?

论坛徽章:
0
6 [报告]
发表于 2006-10-28 18:50 |只看该作者
yejr 你中文的MYSQL 手册能打个包给我吗?
先谢谢拉.
ba20000@163.com

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-12 06:20:00
7 [报告]
发表于 2006-10-29 10:36 |只看该作者
不错
不过生产环境中还是shell脚本来的方便

论坛徽章:
0
8 [报告]
发表于 2007-01-09 16:54 |只看该作者
原帖由 yejr 于 2005-1-5 17:14 发表
呵呵,谢谢楼主,其实如果用shell来做的话,是粉简单的,而且以前也已经有现成的了.


请版主帮帮忙,能提供shell脚本的连接吗? 我翻了好久以前的帖子都没翻到啊

论坛徽章:
0
9 [报告]
发表于 2007-01-09 20:24 |只看该作者
http://imysql.cn/?q=node/77
中的 mysql日常维护 里头有类似的

论坛徽章:
0
10 [报告]
发表于 2007-01-10 09:04 |只看该作者
你可以把perl的翻译成shell
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP