使用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语句可以分多行写,好看很多,不容易出错。

相关文章推荐

Linux下自动备份MySQL数据库并上传到远程FTP服务器且删除指定日期前的备份Shell脚本

说明:  1、备份MySQL数据库存放目录/var/lib/mysql下面的vos3000db数据库到/home/mysql_data里面,并且保存为vos3000db_bak_2012_06_30...

Hadoop2.5.2+Sqoop-1.4.6(2.0以上的版本hadoop使用)伪分布式实现mysql数据上传到ndfs

详细图文文档 http://download.csdn.net/detail/u014449653/9730434

php上传xls文件导入到mysql数据表

2010-03-30 12:36:42 标签:php mysql 数据 xls 文件 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任...

使用canal进行mysql数据同步到Redis

写这篇博文时,自己一定是含着误删数据库的眼泪写完的,文中的后续部分会谈到这个“从删库到**”的悲惨故事,这个故事深刻地教训了我,我也想以此来警示大家,注意数据安全和数据备份。1. 可行方案回归正题:我...

Shell创建MySQL数据表

  • 2015年07月22日 17:08
  • 1KB
  • 下载

用mysqldump备份windows 下的MySql,并上传到ftp服务器

功能:用mysqldump备份windows 下的MySql,并上传到ftp服务器 用法:1. 将下述脚本保存为bat文件,如backup.bat             2.  通过window...

阿里云服务器配置php+apache+mysql+phpMyadmin开发环境并上传本地代码

配置阿里云服务器开发环境是如今项目开发中至关重要的一步,许多人在折腾这件事上面就耗费了大量的精力,然而收获甚微,网上许多人写的博客大多无用或者高深得让人看不懂。 记录这一操作流程一是为了方便...

mysql数据转换的shell

mysql数据转换的shell

Android 监听应用卸载:弹出反馈界面并上传客户端数据

/* 头文件begin */ #include "UninstalledObserver.h" /* 头文件end */ #ifdef __cplusplus extern "C" { #endi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用shell进行mysql数据统计并上传
举报原因:
原因补充:

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