将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换成你的数据库名字