使用shell进行mysql数据统计并上传

原创 2013年12月05日 18:03:24

(这是批处理的旧版本)

需求如下:

  1. 对指定数据库进行统计,输出结果为文本格式,TAB进行分割,不带列标题,文件名为“日期_统计名.dat"
  2. 对统计结果计算md5,并写入“日期_统计名.dat.md5"
  3. 对统计结果进行压缩,并写入“日期_统计名.dat.7z"
  4. 上传md5,和7z文件

#!/bin/sh
#每日统计脚本
#每天零点开始统计前一天的数据,并打包上传到指定服务器


#当crontab执行时,在其他目录,所以要转到当前脚本目录先,后面的路径才会正确
seftdir=$(cd "$(dirname "$0")"; pwd)
cd ${seftdir}


# 设置变量
# 我们的Time是UNIX_TIMESTAMP
today=`date +%Y-%m-%d`
endDay=`date -d"$today" +%s`
startDay=$[ $endDay - 86400]
echo today=$today, startDay=$startDay, endDay=$endDay




GameId=1101
ParterID=1
WrolDID=1


#设置查询的sql,为了方便查看,我们换行了
getUserInfo_sql="select $GameId as 'gameid', $ParterID as 'ParterID', $WrolDID as 'WrolDID', \
User, UserID \
from  accountinfo  where Time >= $startDay and Time < $endDay;"


getLoginLog_sql="select $GameId as 'gameid', $ParterID as 'ParterID', $WrolDID as 'WrolDID', \
UserId, ActorID, RoleLv \
from  UserLoginLog \
where (TimeLogin < $endDay and TimeLogout = 0) \
or (TimeLogout >= $startDay and TimeLogout < $endDay);"






#要统计的数据库用户信息-运维修改
mysqlIp=192.168.0.1
mysqlPort=3306
user=Dbuser
password=dbPassword




# 上传的统计库信息
server_ip=192.168.0.2
server_port=21
server_user=ftpUser
server_password=ftpPassword






# 建立本次处理的临时目录
tname=`date +%Y-%m-%dT%H%M%S.000`
mkdir ${tname}
echo target dir : ${tname}
cd ${tname}


#初始化FTP命令
tempFtpCmdFile=ftp.cmd
echo open ftp://$server_user:$server_password@$server_ip:$server_port >> $tempFtpCmdFile
#echo mkdir WBGmae_Receive >> $tempFtpCmdFile
#echo mkdir WBGmae_Receive/${mysqlIp} >> $tempFtpCmdFile




# 处理子函数
function __stat__ () {
#参数 要执行的SQL文件,保存的文件名
dbname=$1
sqlfile=$2
uploadfile=$3


echo
echo ---- [$uploadfile run] ---- 
#执行SQL统计
curFilename=${tname}_${uploadfile}.dat
echo ${curFilename}
echo ---- SQL -----
echo $sqlfile
mysql -u$user -p$password -h $mysqlIp -P $mysqlPort --default-character-set=gbk --skip-column-names --execute="$sqlfile" $dbname  1>${curFilename} 2>${curFilename}.err
echo ---- *** -----


# 转成DOS格式,这是很浪费时间和磁盘的事情
unix2dos ${curFilename}


#压缩结果
echo [$uploadfile  compress ...]
7z a ${curFilename}.7z ${curFilename}




# 生成MD5
#md5result=`md5 ${curFilename}.7z`
#echo ${md5result:0:32} > ${curFilename}.md5
md5 ${curFilename}.7z > ${curFilename}.md5


#生成FTP命令
echo mkdir -p /WGStatCenterSource/${uploadfile}/${mysqlIp} >> $tempFtpCmdFile
echo mput ~/dbStat/${tname}/${curFilename}.7z -O /WGStatCenterSource/${uploadfile}/${mysqlIp} >> $tempFtpCmdFile
echo mput ~/dbStat/${tname}/${curFilename}.md5 -O /WGStatCenterSource/${uploadfile}/${mysqlIp} >> $tempFtpCmdFile
echo [$uploadfile  ok]
echo ------------------------------------------------------
}




# 统计部分
echo start get mysql stat 开始统计




__stat__ gameroledb "$getUserInfo_sql"      WGAccountInfo_Tmp
__stat__ logdb      "$getLoginLog_sql"      WGUserLoginLog_Tmp




# FTP 上传
echo start upload ftp: $server_ip:$server_port 上传
echo bye>> $tempFtpCmdFile
#cat $tempFtpCmdFile
# lftp -f 和 -u 不能一起使用
lftp -f $tempFtpCmdFile  $server_ip:$server_port
rm $tempFtpCmdFile

============ 结束 ============
与批处理不同的是,lftp只需要一次登录就可以把文件全部上传,效率高很多。
还有就是变量可以换行,sql语句可以分多行写,好看很多,不容易出错。

shell简单处理mysql查询结果

shell mysql
  • u014462287
  • u014462287
  • 2017年01月07日 11:04
  • 2450

shell 统计mysql数据库的表的行数

shell 统计mysql数据库的表的行数 #!/bin/bash echo -n "MySQL username: " ; read username echo -n "MySQL passwo...
  • e421083458
  • e421083458
  • 2014年11月13日 11:16
  • 3085

使用shell分页读取600万+的MySQL数据脚本

shell-mysql 脚本背景 由于要在Linux上,远程读取mysql的表的数据,然后做一定清洗后,把数据上传至Hadoop集群中,使用Java写吧,感觉太麻烦了,得在Win上开发好,还得打成...
  • u010454030
  • u010454030
  • 2015年07月15日 12:54
  • 702

Mysql分表数据通过Shell进行导出与统计

1、分表数据的统计 [root@master tv]# cat submeter_data_static.sh  #!/bin/bash #/usr/bin/mysql -hsrchostip -P...
  • BabyFish13
  • BabyFish13
  • 2016年10月10日 14:56
  • 670

Shell导出MySql部分表及数据

#!/bin/bash #export MySql table and table's data #table's name in single file,shell to read this f...
  • okhelp
  • okhelp
  • 2016年02月26日 13:32
  • 381

shell获取mysql运行状态

auth:农夫-Benemail:szjava#126.com(请把#换成@)blog:http://blog.csdn.net/zll_liang #!/bin/sh select_num=`/...
  • zll_liang
  • zll_liang
  • 2012年09月07日 13:38
  • 880

使用批处理进行mysql数据统计并上传

需求如下: 对指定数据库进行统计,输出结果为文本格式,TAB进行分割,不带列标题,文件名为“日期_统计名.dat"对统计结果计算md5,并写入“日期_统计名.dat.md5"对统计结果进行压缩,并...
  • greenery
  • greenery
  • 2013年11月25日 18:56
  • 886

MYSQL统计每年、每月、每日的数据

日常我们经常需要查询每年、或者每月等等的数据信息(例如访问记录、订单信息等等),以下方法是查询每年、每月、或每日的方法! 这是测试的订单信息,包括了上一年的交易信息,还有每月的多条交易信息(下面会附上...
  • JACKO_CHAN
  • JACKO_CHAN
  • 2017年11月01日 10:49
  • 976

shell脚本对apache日志分割并统计保存到数据库

apache的日志主要是access_log和error_log,定时有效的将日志进行分割和统计能够减少access_log的大小以及拿到对自己的有用的信息。 一、目的 对access_log进行分...
  • qq_20441521
  • qq_20441521
  • 2016年12月05日 20:23
  • 716

mysql获取group by的总记录行数方法

mysql获取group by的总记录行数方法原方法:1. group by 后分组的前十条,在页面展示:SELECT column_id,count(*) as count FROM my_tabl...
  • ydyang1126
  • ydyang1126
  • 2017年04月01日 16:12
  • 1321
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用shell进行mysql数据统计并上传
举报原因:
原因补充:

(最多只允许输入30个字)