整理这个原因很简单,最近做数据采集遇到有N多MYSQL数据库需要采集、同步,原有对接系统单一库、REST等形式的采集实现起来略显麻烦。考虑到是内部系统,且采集、同步时间一般在晚上,故而打算开个先例,抛弃之前的采集方案,直接使用MYSQL命令导出远程库表再还原至本地。思路有了,实现起来就更简单了,这里只介绍大概,不详细讲解枯燥的业务及实现。

首先,得知道MYSQL导入、导出命令:

导出:mysqldump -u用户名 -p密码 -h主机 数据库 a -w “sql条件” –lock-all-tables > 路径

导入:mysql -u用户名 -p密码 -h主机 数据库 < 路径 有很多文章描述的导入是登录后使用source,这里因为我们要连多个库、多个表,频繁登录操作也不方便,还是选择这样的方式了,具体内部实现是否一样,不在我们探究范围。

知道命令了,后面就是为了方便调用,我们使用批处理将以上命令存储起来,与此同时,因为库表很多,我们要维护一份配置,批处理里面根据配置读取参数,进行操作。我们的批处理如下,可接收五个参数。

mysqldump –u%1 –p%2 –h%3 %4 a -w “%5” –lock-all-tables > %3.sql

mysql –u%1 –p%2 –h%3 %4 < %3.sql 如此写,只是一个简单的方式,实际应用中,我们还要增加不创建建表语句等参数配置,下面就是最主要的配置了,按BAT照参数格式,一个字段一个空格,我们将配置文件写成如下文本: root root 10.78.65.101 test condition root root 10.78.65.102 test condition root root 10.78.65.103 test condition root root 10.78.65.104 test condition root root 10.78.65.105 test condition ... root root 10.78.65.199 test condition 最后另外建一批处理文件,读取该配置文件,按行遍历,直接拿每行数据当做参数传入,然后将此批处理文件配置入Windows计划任务,定时执行即可。 其实还忽视了一个重点,上面例子仅仅说了固定的内容,我们要实现增量并不是每天备份还原就行了,当然每天清空数据库重新插入也不是不可,但对于服务器压力却会越来越大,所以,我们可以在配置文件中抽取出condition部分,当做动态值,第一次取全量,取过之后在指定文件夹下生成唯一的关键字标示的增量condition文件,比如,config/10.78.65.101.date下次读取文件获取增量标识,加入参数,即可实现增量。 当然,这里所说的也是简单的实现,实际应用中很可能遇到比较复杂的情况,所以不建议使用。譬如,我们业务复杂的情况,这个初步设想已经不能满足,所以我的小伙伴已经转投Python来实现这个定时脚本了,至于Python怎么实现的,这里就不再赘述了。