shell脚本进行数据库查询(分库分表)
来源:互联网 发布:云南卫生网络直报系统 编辑:程序博客网 时间:2024/06/07 11:12
背景:
前阵子遇到一个问题,需要从Mysql数据库中查询一些数据,这些数据分布在多个数据库和表中,也就是分库分表。
按照某种规则,我们把数据存储在100个表中(10个数据库,每个数据库10个表)。
库名为:db_app_info_$i,其中$i取值为整数0~9;
表名为:t_app_info_$j,其中$j取值为整数0~9。
为了完成多表多库查询,我们需要通过shell脚本,遍历每个表进行查询,然后将查询结果保存、汇总起来。
第一个例子,统计表中 type=2的记录的总数:
#!/bin/bash cnt=0# execute sql stat for ((i=0; i<=9;i++))do for ((j=0; j<=9;j++)) do tmp=$(mysql -hYourHost -PYourPort -uYourUserName -pYourPwd -s -e " select count(*) from db_app_info_$i.t_app_info_$j where `type`=2;") cnt=$[cnt+tmp] donedoneecho $cntexit;
第二个例子,将所有type为2的记录的tag字段取出来,tag字段的格式为:tag1|tag2|tag3。
#!/bin/bash #get_tag.shtags=''# execute sql stat for ((i=0; i<=9;i++))do for ((j=0; j<=9;j++)) do tmp=$(mysql -hYourHost -PYourPort -uYourUserName -pYourPwd -s -e " select tag from db_app_info_$i.t_app_info_$j where `type`=2;") tags=$tags'|'$tmp donedoneecho $tagsexit;
对于单个表的查询结果,由于一个表中有多条记录,赋值给tmp时是以空格来分隔的,因此后续处理需要将空格替换为’|’,之后再将’|’统一替换为换行符,然后排序、去重。
$ ./get_tag.sh | sed -e 's/[][]*/|/g' | sed 's/|/\n/g' | sort | uniq > tag_list.txt
于是我们就可以得到一个去重后的标签列表了。
tips: uniq去重功能,只能针对连续的多行进行去重,因此进行uniq之前需要先sort,使得相同的记录变得连续。
阅读全文
0 0
- shell脚本进行数据库查询(分库分表)
- shell脚本查询数据库
- shell脚本查询MYSQL数据库并进行相应处理
- shell脚本进行数据库操作
- 通过shell脚本进行数据库操作
- 通过shell脚本进行数据库操作
- 通过shell脚本进行数据库操作
- 通过shell脚本进行数据库操作
- 通过shell脚本进行数据库操作
- 通过shell脚本进行数据库操作
- 用shell脚本进行MySQL数据库定时备份
- 编写shell脚本对mysql数据库进行定时备份
- shell使用sql脚本进行sqlite3数据库更新
- 简单的通过shell脚本接收参数进行数据库操作
- shell脚本实现查询数据库上传到ftp
- shell脚本查询mysql
- shell脚本执行数据库脚本
- 数据库备份脚本shell
- 详细谈一下自己对IOC跟AOP的详细理解
- Leetcode 680 Valid Palindrome II
- 国内计算机三大期刊+ JCST
- 实验二 线性表综合实验之双链表
- vue之登录路由验证
- shell脚本进行数据库查询(分库分表)
- 平衡树+并查集 string
- 自由幻想UI之切换成就列表
- stack usage
- 深度学习在目标跟踪中的应用
- 设计模式_1:简单工厂模式
- 计算机应用发展过程理论
- DataPicker和TimePicker
- Java 中带参带返回值方法的使用