前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用shell分页读取600万+的MySQL数据脚本

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

作者头像
我是攻城师
发布2018-05-11 18:09:22
1.9K0
发布2018-05-11 18:09:22
举报
文章被收录于专栏:我是攻城师

shell-mysql (1)脚本背景: 由于要在Linux上,远程读取mysql的表的数据,然后做一定清洗后,把数据上传至Hadoop集群中,使用Java写吧,感觉太麻烦了,得在Win上开发好,还得打成jar包, 上传到Linux上,如果那里出了问题,还得重复这样,非常不方便,那就用shell写一个吧,也不需要什么jdbc驱动包,只需要在Linux上装个MySQL的 客户端即可,用一行yum命令即可搞定,所以就花了点时间,封装了一个小脚本 (2)功能介绍: 直接在Linux下使用shell脚本远程分页读取MySQL表的数据的一个小脚本,已测过读取600万+的数据 效率与jdbc相差无几 (3)脚本介绍: 主要有三个脚本构成 1,page.sh 这是一主脚本,里面定义了分页的条件,大家看下便知 2,f.sh 一个小包装的脚本吧,里面会用sed去掉表头一些信息 3,port.sh 分页读取数据的执行脚本 (4)如何使用? 使用非常简单,需要改下page.sh里面的查询字段,以及分页查询的数量,默认是10000,然后执行sh page.sh databaseName tableName传入数据库名和表名即可 Github项目地址

Shell代码

  1. #第一个参数表名
  2. #第二个参数是start
  3. #第三个参数是offset
  4. #分页读取数据后,删除第一行表头,并写入一个文件中,文件名与表名一样
  5. sh port.sh $1 $2 $3 | sed '1d' >> tables/$1
  6. #删除无用的html字符
  7. #sed -i 's/<[^>]*>//g;/^$/d' tables/$1
  8. #删除无用的一些特殊符号
  9. #sed -i 's/[a-zA-Z\.():;><-]//g' tables/$1

Shell代码

  1. #登陆mysql,负责查询某个表数据总量
  2. MYSQL=`which mysql`
  3. count=`$MYSQL -hmysqlhost --default-character-set=utf8 -P3306 -uname -ppwd <<EOF
  4. use $1;
  5. select count(1) from $2 ;
  6. EOF`
  7. #得到某一个表的总数量
  8. count=`echo "$count" | sed '1d' `
  9. #定义一个每页读取的最大数量
  10. pageSize=10000
  11. #计算总共的分页数
  12. totalPage=0;
  13. #判断总数量,求模是否等于0,等于0,就是相除多少页
  14. temp=` echo "$count%$pageSize" | bc `
  15. if [ 0 -eq $temp ] ;then
  16. totalPage=`echo "$count/$pageSize" | bc`
  17. else
  18. #否则,就是相除后+1,作为总的分页数
  19. totalPage=`echo "$count/$pageSize+1" | bc`
  20. fi
  21. echo "总数量:$count 每页读取数量:$pageSize 分页数量:$totalPage"
  22. #把总页数减一,方便分页处理,因为后面咱的下标从0开始
  23. totalPage=`echo "$totalPage-1" | bc `
  24. #echo "处理后:$totalPage"
  25. #for循环遍历总页数
  26. for page in `seq 0 $totalPage`
  27. do
  28. #计算每页的偏移量
  29. offset=`echo "$page*$pageSize" | bc `
  30. echo "当前处理到第$page页,分页信息: limit $offset $pageSize "
  31. ###第一个参数表名
  32. ###第二个参数偏移量
  33. ###第三个参数每页读取数据
  34. #调用f.sh获取数据
  35. sh f.sh $1 $offset $pageSize
  36. done
  37. #sed -i 's/<[^>]*>//g;/^$/d' tables/$1
  38. #sed -i 's/[a-zA-Z\.():;><-]//g' tables/$1

Shell代码

  1. #连接mysql
  2. # -h主机地址 -u用户名 -p密码
  3. #下面的语句,是登陆到数据库后,使用某个数据库,然后根据条件查询表
  4. MYSQL=`which mysql`
  5. $MYSQL -hmysqlhost --default-character-set=utf8 -P3306 -uname -ppwd <<EOF
  6. use db_conform;
  7. select concat_ws('#',ifNull(id,''),ifNULL(title,''),ifNULL(replace(replace(replace(content ,'\n','' ), '\r' , '' ),'#','' ) ,''),ifNULL(doc_no,'')) from $1 limit $2 , $3 ;
  8. EOF
  9. #echo $query
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我是攻城师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档