Linux下MySQL主从同步监控shell脚本–修正版

2016年1月16日 2 条评论

原理:
1)监控MYSQL的运行状态;
2)Slave机器的IO和SQL状态都必须为YES,缺一不可;
注意,请结合自身的实际环境使用。

ps:网上搜了下,大致都存在同一个坑,echo输出的时候没有注意默认不转义换行的问题,会导致对Slave_SQL_Running的监控失去意义,实际上是把Slave_IO_Running的值重复监控了。

#!/bin/sh
ip=eth0  #网卡名称
mysql_binfile=/usr/bin/mysql
mysql_user=root  #MySQL数据库账号
mysql_pass=123456  #密码
datetime=`date +"%Y-%m-%d/%H:%M:%S"`   #获取当前时间
mysql_slave_logfile=/var/log/mysql/check_mysql_slave.log   #日志文件路径,必须提前创建好
slave_ip=`ifconfig $ip|grep "inet " | awk -F[:" "]+ '{print $4}'`
 
status=$($mysql_binfile -u$mysql_user -p$mysql_pass -e "show slave status\G" | grep -i "running")
#验证方式:Slave_IO_Running=`echo -n "$status" | grep Slave_IO_Running | awk ' {print $1}'` (输出Slave_IO_Running为正常)
Slave_IO_Running=`echo -n "$status" | grep Slave_IO_Running | awk ' {print $2}'`
#验证方式:Slave_IO_Running=`echo -n "$status" | grep Slave_SQL_Running | awk ' {print $1}'` (输出Slave_SQL_Running为正常)
Slave_SQL_Running=`echo -n "$status" | grep Slave_SQL_Running | awk '{print $2}'` #网上有类似的代码,这里的echo应该加-n参数,并且变量应加引号,否则不转义换行符,实际匹配出来的结果是Slave_IO_Running参数的值
 
if [ "$Slave_IO_Running" = "Yes" -a "$Slave_SQL_Running" = "Yes" ]
then
    echo "Slave is Running!"
    echo "$datetime $slave_ip Slave is Running!" >> $mysql_slave_logfile
else
    echo "$datetime $slave_ip Slave is not running!"
    echo "$datetime $slave_ip Slave is not running!" >> $mysql_slave_logfile
fi
分类: MySQL 标签:

linux 之间传输数据分享一个小技巧

2015年8月4日 2 条评论

1.从远程服务器下载到当前服务器
scp -P 端口号 用户名@远程服务器ip地址:/文件绝对路径 本地存放路径
例:

scp -P 3333 root@192.168.199.110:/tmp/a.txt /tmp/a.txt

2.从前服务器上传到远程服务器
scp -P 端口号 本地存放路径 用户名@远程服务器ip地址:/文件绝对路径
例:

scp -P 3333 /tmp/tmp/a.txt root@192.168.199.110:/tmp/a.txt

ps:windows系统下有一款叫WinSCP的软件可实现。

分类: Linux 标签:

两个简单的并发测试方案

2015年4月23日 3 条评论

发现项目里边经常有并发测试的需求,就记录两条,免得每次都重写。bash的方案主要是方便在Linux下调试,php方案主要是方便在非Linux的操作系统下调试。

  • Linux bash实现
  • #!/bin/bash
    for ((i=0;i<100;i++));do 
    {
        #并发测试代码可放这儿
        echo $i>>aa && echo $i
    }&
    done
    wait
    cat aa|wc -l
    rm aa
  • php方案
  • #!/usr/bin/php5
    <?php
    $n =  10; // 并发条数
    $ch = array();
    for($i=0; $i<$n; $i++) {
        $ch[$i] = curl_init();
        $m = microtime();
        curl_setopt($ch[$i], CURLOPT_URL, "http://www.fengdingbo.com?concurrency_test");
        curl_setopt($ch[$i], CURLOPT_HEADER, 0);
    }
    $mh = curl_multi_init();
     
    // 增加n个句柄
    foreach ($ch as $v) {
        curl_multi_add_handle($mh,$v);
    }
     
    $running=null;
    // 执行批处理句柄
    do {
        curl_multi_exec($mh,$running);
    } while($running > 0);
     
    // 关闭全部句柄
    foreach ($ch as $v) {
        curl_multi_remove_handle($mh, $v);
    }
    curl_multi_close($mh);
     
    /* End of file */
    分类: Linux, PHP 标签:

    curl: (35) error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error

    2014年8月19日 3 条评论

    当使用php的扩展模块curl抓取某些https类站点数据时,php莫名的没有数据返回!

    回到curl命令本身,测试发现报错

    curl https://www.heshidai.com
    curl: (35) error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error

    解决方案,指定SSL的版本即可校验即可!
    curl https://www.heshidai.com –sslv3

    分类: PHP 标签:

    linux查看占用内存/cpu最高的进程情况

    2014年4月8日 1 条评论

    linux查看占用cpu最高的进程

    ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head

    或者top (然后按下M,注意这里是大写)

    linux查看占用内存最高的进程

    ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head

    或者top (然后按下P,注意这里是大写)

    该命令组合实际上是下面两句命令:

    ps aux|head -1
    ps aux|grep -v PID|sort -rn -k +3|head

    其中第一句主要是为了获取标题(USER PID %CPU %MEM VSZ RSS TTY STAT START TIM[......]

    Read more

    分类: Linux 标签: ,

    MySQL Repair with keycache

    2014年3月8日 没有评论

    今天给一个MyISAM的大表加索引,临时表MYD文件的大小增长非常慢,到了MYD文件创建完成后,却发现MYI文件很小,ALTER TABLE语句始终不能结束,登录MYSQL查看show processlist;发现,ALTER TABLE语句在“Repair with keycache”状态。
    于是想到,myisam_max_sort_file_size参数我们设置的是10G,但是现在这个文件正好>10G一点点,于是不能用tmpdir指定的目录排序索引。于是增加myisam_max_sort_file_size参数到20G,再次ALTER TABLE,首先MYD文件的创建速度就快了非常多,MY[......]

    Read more

    分类: MySQL 标签: ,

    nc: invalid option — ‘e’

    2014年2月13日 1 条评论

    nc反弹shell的时候出现错误
    nc: invalid option — ‘e’
    This is nc from the netcat-openbsd package. An alternative nc is available
    in the netcat-traditional package.

    以下是修复思路

    $ which nc
    /bin/nc
    $ ls -ld /bin/nc
    lrwxrwxrwx 1 root root 20 1024  2012 /bin/nc -> /etc/alternatives/nc
    $ ls -ld /etc/alternatives/nc
    lrwxrwxrwx 1 root root 19  213 10:03 /etc/alternatives/nc -> /bin/nc.traditional
     
    实际上我们要找的这是个文件 /bin/nc.traditional :
     
    $ /bin/nc.openbsd -l -p 9999 -e /bin/bash
    /bin/nc.openbsd: invalid option -- 'e'
    usage: nc [-46DdhklnrStUuvzC] [-i interval] [-P proxy_username] [-p source_port]
       [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protocol]
       [-x proxy_address[:port]] [hostname] [port[s]]
    $ /bin/nc.traditional -l -p 9999 -e /bin/bash
    ^C
    $

    结合以上的输出消息,我们可以通过下面这段命令修复:

    $ sudo rm /etc/alternatives/nc && sudo ln -s /bin/nc.traditional /etc/alternatives/nc

    修复后再试试,没错误提示就shell反弹成功!

    0c[......]

    Read more

    分类: Linux 标签: ,

    Memcache安全配置

    2014年1月21日 1 条评论
  • 0×00 Memcache简介
  • Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
    Memcache是danga的一个项目,最早是LiveJournal 服务的,最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用。
    Memcached是以守护程序方式运行于一个或多个服务器中,随时会接收客户端的连接和操作。

  • 0×01 搭建Memcache服务
  • yum instal[......]

    Read more

    分类: PHP 标签: ,

    利用taskset有效控制cpu资源

    2013年11月22日 没有评论

    常常感觉系统资源不够用,一台机子上跑了不下3个比较重要的服务,但是每天我们还要在上面进行个备份压缩等处理,网络长时间传输,这在就很影响本就不够用的系统资源。
    这个时候我们就可以把一些不太重要的比如copy/备份/同步等工作限定在一颗cpu上,或者是多核的cpu的一颗核心上进行处理,虽然这不一定是最有效的方法,但可以最大程度上利用了有效资源,降低那些不太重要的进程占用cpu资源。
    查看系统下cpu信息:#cat /proc/cpuinfo
    taskset就可以帮我们完成这项工作,而且操作非常简单;
    该工具系统默认安装,rpm包名util-linux
    #taskset –help
    t[......]

    Read more

    分类: Linux 标签:

    JavaScript对cookie的增删改查

    2013年10月21日 1 条评论

    JavaScript写cookie

    function setCookie(c_name,value,expiredays,path) {
        var exdate=new Date();
        exdate.setDate(exdate.getDate()+expiredays);
        document.cookie=c_name+ "=" +escape(value)+ ((expiredays==null) ? "" : ";expires="+exdate.toGMTString()) + ";" + ((path==null) ? "" : "path=" + escape(path));
    }
    setCookie("qiufeng","www.fengdingbo.com",24);

    JavaScript读cookie

    function getCookie(c_name) {
        if (document.cookie.length>0) {
            c_start=document.cookie.indexOf(c_name + "=");
            if (c_start!=-1) { 
                c_start=c_start + c_name.length+1 ;
                c_end=document.cookie.indexOf(";",c_start);
            if (c_end==-1) c_end=document.cookie.length;
                return unescape(document.cookie.substring(c_start,c_end));
            }
        }
        return "";
    }

    JavaScript删除cookie

    function delCookie(name) {
        var date = new Date();
        date.setTime(date.getTime() - 10000);   
        document.cookie = name + "=a; expires=" + date.toGMTString() + ";path=*";
    }

    JavaScript清除所有cookie

    function removeCookie() {
        var cookie = document.cookie.split(";");
        for (var i in cookie) {
            delCookie(cookie[i].substring(cookie[i].indexOf("="),0));
        }
    }
    分类: JavaScript 标签: