多项目百库百表慢日志切割
发表于:2025-11-06 作者:千家信息网编辑
千家信息网最后更新 2025年11月06日,问题描述:多个项目,有些项目分库分表分布在多个节点,因此,对慢日志的切割并且收集对于慢日志分析来说是极其必要的。实现方案:①环境准备Host1 : ftp服务器(192.168.xx.xxx),用于集
千家信息网最后更新 2025年11月06日多项目百库百表慢日志切割问题描述:
多个项目,有些项目分库分表分布在多个节点,因此,对慢日志的切割并且收集对于慢日志分析来说是极其必要的。
实现方案:
①环境准备
Host1 : ftp服务器(192.168.xx.xxx),用于集中存储各项目每天(可脚本自定义)的日志
Host2 : mysql服务器(192.168.xx.xxx),用于存储配置相关的参数(如需要收集的日志host,user,pwd,日志位置等信息),之后用于脚本的查询调用。
Host3 : 执行操作的机器(192.168.xx.xxx) ,即执行脚本设置定时任务的机器
②脚本准备
涉及到两个脚本,logrotate.sh 以及 job.sh
其中job.sh用于批量执行的mysql中存储的相关host的操作,job.sh调用logrotate.sh
logrotate.sh用于在各台需要收集日志的机器上实际的执行操作
mysql配置表结构及数据如下(注意添加一个所有机器都能查询该表的一个账号):


job.sh脚本如下:
logrotate.sh脚本内容如下:
在Host2(ftp)上查看操作结果
③过程描述
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表中添加相应的记录即可。
多个项目,有些项目分库分表分布在多个节点,因此,对慢日志的切割并且收集对于慢日志分析来说是极其必要的。
实现方案:
①环境准备
Host1 : ftp服务器(192.168.xx.xxx),用于集中存储各项目每天(可脚本自定义)的日志
Host2 : mysql服务器(192.168.xx.xxx),用于存储配置相关的参数(如需要收集的日志host,user,pwd,日志位置等信息),之后用于脚本的查询调用。
Host3 : 执行操作的机器(192.168.xx.xxx) ,即执行脚本设置定时任务的机器
②脚本准备
涉及到两个脚本,logrotate.sh 以及 job.sh
其中job.sh用于批量执行的mysql中存储的相关host的操作,job.sh调用logrotate.sh
logrotate.sh用于在各台需要收集日志的机器上实际的执行操作
mysql配置表结构及数据如下(注意添加一个所有机器都能查询该表的一个账号):


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脚本内容如下:
点击(此处)折叠或打开
- #!/bin/bash
- declare game
- declare slow_log
- declare ftp_host
- declare ftp_user
- declare ftp_pwd
- declare ssh_pwd
- declare local_ip
- declare log_name
- declare old_dir
- declare tmp_conf
- declare tran_log_dir
- declare tran_log
- dev=eth2
- mysql_host=192.168.xx.xxx
- mysql_port=3456
- mysql_user=xxx
- mysql_pwd=xxxxx
- mysql_db=DB_SPLIT_LOG
- date=`date +%Y%m%d`
- function get_ip {
- local_ip=`/sbin/ifconfig| grep -A 1 "$dev" | grep -i 'inet addr' | head -1 | awk -F[:] '{print $2}' | cut -d' ' -f1`
- }
- 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
- }
- function change_logname {
- echo ""
- for file in `find $old_dir -maxdepth 1 -type f -name "*slow*${date}*"`
- do
- echo $file
- done
- echo "change log name $file to ${old_dir}/${log_name}"
- mv $file ${old_dir}/${log_name}
- }
- function ftp_put {
- echo ""
- echo "start ftp put $log_name"
- ftp -in <<EOF
- open $ftp_host
- user $ftp_user $ftp_pwd
- mkdir $game
- cd $game
- lcd $old_dir
- mput $log_name
- quit
- EOF
- echo "ftp put $log_name over!"
- }
- function clear_tmp_file {
- echo ""
- echo "clear tmp file"
- cd $old_dir
- echo "cd $old_dir "
- echo "rm -f $tmp_conf "
- echo "rm -f $log_name "
- rm -f $tmp_conf
- rm -f $log_name
- }
- get_ip
- get_info
- operation_log
- create_rotate_conf
- start_logrotate
- change_logname
- ftp_put
- clear_tmp_file
在Host2(ftp)上查看操作结果
③过程描述
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表中添加相应的记录即可。
脚本
日志
文件
机器
查询
项目
结果
存储
配置
两个
任务
信息
多个
服务器
本机
准备
服务
必要
成功
上将
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发一般工资水平
食谱视频软件开发
太仓正规网络技术参考价格
绿园区网络技术口碑推荐
济宁数字化城管软件开发系统
jsp加载驱动连接数据库
通信管理局网络安全
徐汇区智能软件开发注意事项
神易pc网络安全隔离卡
农行软件开发中心一般加班吗
计算机网络技术知识点精讲
数据库切换按钮和复选框
访问oracle数据库时异常
车主邦加油软件开发
unity3d与数据库
2022年网络安全日
崂山区软件开发公司有哪些
我国成立中央网络技术
思诚网络技术
虚拟机 2003服务器
ibm刀片服务器管理口
网络安全的法律建设
鹤岗软件开发培训
sql数据库密码复杂度
ogg方式的数据库同步技术
服务器事件视频教程
数据库系统依靠
河南软件开发公司联系电话
mc国际服服务器java
dns服务器地址 路由器