使用shell进行mysql数据统计并上传
来源:互联网 发布:广数980锥螺纹编程实例 编辑:程序博客网 时间:2024/05/05 10:44
(这是批处理的旧版本)
需求如下:
- 对指定数据库进行统计,输出结果为文本格式,TAB进行分割,不带列标题,文件名为“日期_统计名.dat"
- 对统计结果计算md5,并写入“日期_统计名.dat.md5"
- 对统计结果进行压缩,并写入“日期_统计名.dat.7z"
- 上传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
#每日统计脚本
#每天零点开始统计前一天的数据,并打包上传到指定服务器
#当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数据统计并上传
- 使用批处理进行mysql数据统计并上传
- Mysql分表数据通过Shell进行导出与统计
- 如何使用hadoop对海量数据进行统计并排序
- 使用python读取mysql数据库并进行数据的操作
- 大数据之使用hadoop对海量数据进行统计并排序
- Linux下通过php对Mysql中的数据进行定时统计并入库
- 自动备份MySQL数据并上传到FTP上shell脚本
- mysql 按周、日进行数据统计
- MYSQL中GROUP BY进行数据统计
- listview虚拟列表加载上万数据并进行统计
- Shell 统计导出数据 awk 里使用shell变量 参数
- 使用Shell进行Mysql间数据以文本形式传输及注意事项
- 使用shell脚本进行mysql操作
- 使用libcurl进行文件、数据上传
- shell脚本查询MYSQL数据库并进行相应处理
- Mysql分表数据通过Python进行汇总统计
- 使用SharedPreferences进行数据存储并访问
- Linux配置PHP环境
- 110703 Euclid problem
- 【Javascript】一、Javascript的10个设计缺陷
- 微信公众平台消息接口开发(9)骑行西藏自定义菜单
- mysql主从同步配置实践
- 使用shell进行mysql数据统计并上传
- Choose a destination with a supported architecture in order to run on this device.
- 3-5年经验的Java工程师招聘(上海)
- Unidac:解决“trying to modify read-only Field”问题!
- Git学习记录
- Ubuntu 下安装 Yar 扩展遇到的问题以及解决方案
- NSBundle介绍
- 微信公众平台消息接口开发(10)语音触发(非识别)
- HDFS文件的tail