将1个2G的Nginx访问日志文件写入数据库

 这是转换出来的数据,有相同需求的朋友可以参考。

function unixtime()
{
        if [ -n "$!"] ;
            then
                TIME=`echo ${1:1} | awk -F'[:\b/]' '{print $3"-"$2"-"$1" "$4":"$5":"$6}'`
                array=(${TIME// / })
                ti=${array[0]}
                arr=(${ti//-/ })
                num=$(convertMonth ${arr[1]})
                echo ${arr[0]}-$num-${arr[2]}' '${array[1]}
        fi
}


function convertMonth(){
    case $1 in
        Jan)
            echo '01'
        ;;
        Feb)
            echo '02'
        ;;
        Mar)
            echo '03'
        ;;
        Apr)
            echo '04'
        ;;
        May)
            echo '05'
        ;;
        Jun)
            echo '06'
        ;;
        Jul)
            echo '07'
        ;;
        Aug)
            echo '08'
        ;;
        Sep)
           echo '09'
        ;;
        Oct)
           echo '10'
	;;
        Nov)
           echo '11'
        ;;
        Dec)
           echo '12'            
        ;;
    esac
        return 0
}

FILENAME="/www/wwwlogs/access.log"
function while_read_LINE_bottm()
{
        #连接数据库的账号密码及其数据库
        SQLCNT='/usr/bin/mysql -uroot -proot db'
        SQL="INSERT INTO log(ip,url,time,date)VALUES"
        while read LINE
        do
                DATA=`echo $LINE | awk '$7 ~ /(\/$|\.html.*|\.php.*)/ {print $1"--"$4"--"$7}'  `
                QRYSQL=''
                #计算器 , 插入的数据超过1000条先提前插入
                I=1
                for D in ${DATA[@]} ;
                do
                  #将上面时间获取ip—时间—访问的url进行转化为数组
                  DD=(`echo ${D//--/ }`)
                  if [ ${DD[2]} != '/sub/chat_pull.php' ] ;
                  then
                        QRYSQL=$QRYSQL"('${DD[0]}','${DD[2]}','`unixtime ${DD[1]}`','$DATE'),"
                        #超过1000条先插入
                        if [ $I == 1000 ] ;
                        then

                                QRYSQL=$SQL${QRYSQL%%,}";"
                                echo $QRYSQL
                                echo $QRYSQL | $SQLCNT &> /dev/null
                                I=0
                                QRYSQL=''
                        fi
                        I=`expr $I+1`
                  fi
                done
                if [ -n $WRYSQL ] ; then
                  QRYSQL=$SQL${QRYSQL%%,}";"
                  echo $QRYSQL | $SQLCNT &> /dev/null
                fi
        done  < $FILENAME
}
while_read_LINE_bottm

由于没有做日志文件切割,已经形成了一个2G多的日志文件,现在想把它转到数据库里面去,所以写了这个脚本

$FILENAME的值换为你的日志文件的路径

-proot这里的root换为你的数据库密码

db换成你的数据库名字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

reg183

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值