一 环境说明:我有100多台机器,需要去每台机器上面的数据库导出对应的数据,并且需要传两个参数服务器ip和数据库id,导出来之后,再把所有的文件合成一个excle文件


二 实现过程:

1 首先自己整理一份ip对应id的文件,例如:

`3070c023c4294c6faff627467a2ba8b0  58.116.1.1`


2 写一个导出数据的脚本

#!/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的文件信息

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实现的

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")