忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12下一页
最近访问板块 发新帖
查看: 19683 | 回复: 13

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

论坛徽章:
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
发表于 2005-01-05 17:14 |显示全部楼层

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

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

论坛徽章:
0
发表于 2005-01-06 10:18 |显示全部楼层

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

不错~~~保留

论坛徽章:
0
发表于 2005-03-29 17:11 |显示全部楼层

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

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

论坛徽章:
0
发表于 2005-03-29 17:14 |显示全部楼层

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

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

论坛徽章:
0
发表于 2006-10-28 18:50 |显示全部楼层
yejr 你中文的MYSQL 手册能打个包给我吗?
先谢谢拉.
ba20000@163.com

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-03-12 06:20:00
发表于 2006-10-29 10:36 |显示全部楼层
不错
不过生产环境中还是shell脚本来的方便

论坛徽章:
0
发表于 2007-01-09 16:54 |显示全部楼层
原帖由 yejr 于 2005-1-5 17:14 发表
呵呵,谢谢楼主,其实如果用shell来做的话,是粉简单的,而且以前也已经有现成的了.


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

论坛徽章:
0
发表于 2007-01-09 20:24 |显示全部楼层
http://imysql.cn/?q=node/77
中的 mysql日常维护 里头有类似的

论坛徽章:
0
发表于 2007-01-10 09:04 |显示全部楼层
你可以把perl的翻译成shell
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10张SACC2017门票等你来拿~

在数字化转型时代,云已成为万物智能的数字化大脑。而随着大数据应用、人工智能、移动互联网等技术的飞速发展,“智慧 +” 的概念正在深入到各行各业,提升企业效率,释放商业潜能,创造全新机遇。作为国内顶级技术盛会之一,2017 中国系统架构师大会(SACC2017)将于 10 月 19-21 日在北京新云南皇冠假日酒店震撼来袭。今年,大会以 “云智未来” 为主题,云集国内外顶级专家,围绕云计算、人工智能、大数据、移动互联网、产业应用等热点领域展开技术探讨与交流。本届大会共设置 2 大主会场,18 个技术专场;邀请来自互联网、金融、制造业、电商等多个领域,100 余位技术专家及行业领袖来分享他们的经验;并将吸引 4000 + 人次的系统运维、架构师及 IT 决策人士参会,为他们提供最具价值的交流平台。
----------------------------------------
优惠时间:2017年10月19日前

活动链接>>
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP