一 环境说明:我有100多台机器,须要去每台机器上面的数据库导出对应的数据,而且须要传两个参数服务器ip和数据库id,导出来以后,再把全部的文件合成一个excle文件python
二 实现过程:mysql
1 首先本身整理一份ip对应id的文件,例如:sql
`3070c023c4294c6faff627467a2ba8b0 58.116.1.1`
2 写一个导出数据的脚本shell
#!/bin/bash ip=$1 id=$2 mysql -uedu_platform -pedu_platform -h$ip --database edu_platform -e" SELECT COALESCE(bc.name,'-') AS '学校',t.device_count AS '绑定数量' FROM ( SELECT bs.school_business_key, COUNT(DISTINCT bu.device_number) AS device_count FROM base_user bu INNER JOIN bd_student bs ON bs.id = bu.id WHERE bu.category = 'student' AND bu.device_number IS NOT NULL AND bu.device_number <> '' AND bs.school_business_key = '$id' GROUP BY bs.school_business_key) t LEFT JOIN bd_school bc ON bc.business_key = t.school_business_key">/home/shell9-12/file/$1_$2.xls # 导出的数据都放到指定目录下面 if [ $? == 0 ];then echo "INFO:导出成功" else echo "Error:导出失败" fi
3 写一个传参数的脚本start.sh,注意:两个参数不要写反了
数据库
c1 和c2是要传递的两个参数,school.txt是你包含id和ip的文件信息bash
while read c1 c2 do sh /home/shell9-12/tongji.sh $c2 $c1 #执行第二个脚本, done < school.txt
而后你执行.start.sh脚本,会在/home/shell0-12/file这个目录下生成不少xls文件
服务器
4 整理数据,把每一个文件的内容放到一个文件里我用的python实现的ide
import os dir = "./file" # print(os.listdir(dir)) for name in os.listdir(dir): with open("%s/%s" % (dir, name), encoding="utf-8") as f, open("tongji02.xls", "a") as f1: for i in f: s = i.replace("学校 绑定数量", "").strip() if s: f1.write(s.strip()+"\n")