设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 重新 试卷 文件
当前位置: 首页 > 站长学院 > MySql教程 > 正文

多项目百库百表慢日记切割

发布时间:2022-04-04 10:47 所属栏目:115 来源:互联网
导读:问题描述: 多个项目,有些项目分库分表分布在多个节点,因此,对慢日志的切割并且收集对于慢日志分析来说是极其必要的。 实现方案: 环境准备 Host1 : ftp服务器(192.168.xx.xxx),用于集中存储各项目每天(可脚本自定义)的日志 Host2 : mysql服务器(192.168
      问题描述:
 
     多个项目,有些项目分库分表分布在多个节点,因此,对慢日志的切割并且收集对于慢日志分析来说是极其必要的。
 
实现方案:
 
     环境准备
 
    Host1 : ftp服务器(192.168.xx.xxx),用于集中存储各项目每天(可脚本自定义)的日志
    Host2 : mysql服务器(192.168.xx.xxx),用于存储配置相关的参数(如需要收集的日志host,user,pwd,日志位置等信息),之后用于脚本的查询调用。
    Host3 : 执行操作的机器(192.168.xx.xxx) ,即执行脚本设置定时任务的机器
  
    job.sh脚本如下:
    
点击(此处)折叠或打开
 
#!/bin/bash
 
 
mysql_host=192.168.xx.xxx
mysql_port=3456
mysql_user=xxx
mysql_pwd=xxxxxx
  
function get_info {
    cmd=`which mysql`
    $cmd -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_pwd -BNe "select * from DB_SPLIT_LOG.t_log_info;" | while read line
    do
        host_ip=`echo $line | awk '{print $3}'`
        ssh_user=`echo $line | awk '{print $9}'`
        ssh_pwd=`echo $line | awk '{print $10}'`
        /usr/bin/sshpass -p $ssh_pwd ssh -o StrictHostKeyChecking=no $ssh_user@$host_ip "bash " < logrotate.sh
    done
}
 
get_info
 
    logrotate.sh脚本内容如下:
点击(此处)折叠或打开
 
function get_info {
    cmd=`which mysql`
    argvs=`$cmd -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_pwd -BNe "select * from DB_SPLIT_LOG.t_log_info where host_ip='${local_ip}' limit 1;"`
    game=`echo $argvs | awk '{print $2}'`
    local_ip=`echo $argvs | awk '{print $3}'`
    old_dir=`echo $argvs | awk '{print $4}'`
    slow_log=`echo $argvs | awk '{print $5}'`
    ftp_host=`echo $argvs | awk '{print $6}'`
    ftp_user=`echo $argvs | awk '{print $7}'`
    ftp_pwd=`echo $argvs | awk '{print $8}'`
 
 
    log_name=${game}_`date +%Y%m%d`_$local_ip.slow
    tmp_conf=$old_dir/logrotate_${date}.conf
    mkdir -p /tmp/slow_tran_log
    tran_log_dir=/tmp/slow_tran_log
    tran_log=$tran_log_dir/${date}.log
}
 
 
function operation_log {
    exec 1>$tran_log
    exec 2>$tran_log
}
 
function create_rotate_conf {
    echo """
    $slow_log {
        daily
        copytruncate
        dateext
        create 0660 mysql mysql
        olddir $old_dir
        rotate 1
    }
    """ > $tmp_conf
}
 
 
function start_logrotate {
    echo ""
    /usr/sbin/logrotate -vf $tmp_conf
}
 
       ③过程描述
        1 .  job.sh 查询DB_SPLIT_LOG.t_log_info表中的所有host_ip ssh_user ssh_pwd ,然后循环远程执行脚本logrotate.sh
        2 . logrotate.sh 首先查询本机ip ,然后根据本机ip获取DB_SPLIT_LOG.t_log_info表中对应的log_dir lot_file game ftp相关信息
        3 . 生成logrotate的配置文件
        4 . 进行切割
        5 . 更改切割出来的日志名称
        6 . 上传到ftp
        7 . 清空临时文件
    
    注意点:logrotate所切割的文件产生的结果必须和源文件在一个分区上(即你切割的结果文件slow.log-2016-10-25和原来的slow.log文件),不然切割会不成功。
 
    另 : 该脚本适用于任何日志文件的切割与收集。只需要在DB_SPLIT_LOG.t_log_info表中添加相应的记录即可。

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读