同步方法
- 将如下脚本写入sync.sh文本文件中
- 需提前配置好源数据库与目标数据库的地址、用户名、密码、shema信息,及shema中的哪些table需同步
- 需提前在目标数据中建好相关的表,且表结构与源数据库相同
- 配置增量数据的本地下载地址
- 配置好增量更新的sql where条件子句,如”createDate >= ‘2016-07-01’”
- 从操作系统级别启动定时任务执行sync.sh
配置信息
#!/bin/sh
# 远程数据库服务器信息(从此数据库下载数据)
remoteMysqlServer="远程数据库ip"
remoteMysqlUser="远程数据库用户名"
remoteMysqlPassword="远程数据库密码"
remoteMysqlDB="远程数据库表shema"
# 本地数据库服务器信息(将数据导入到此数据库)
localMysqlServer="本地数据库ip"
localMysqlUser="本地数据库用户名"
localMysqlPassword="本地数据库密码"
localMysqlDB="本地数据库schema"
# 数据下载目录
dataDownloadPath="/usr/local/data/download/"
# 处理哪些数据库表(注意,需提前在localMysql中建好相关的表,且表结构与remoteMysql相同)
array_name=(
table1 table2 table3 table4 table5
)
根据不同操作系统计算日期
today=$(date +%Y%m%d)
case "$OSTYPE" in
linux*)
echo "LINUX"
deleteDay=$(date -d "-7 day" +%Y%m%d)
;;
darwin*)
echo "OSX"
deleteDay=$(date -v -7d +%Y%m%d)
;;
win*)
echo "Windows"
;;
cygwin*)
echo "Cygwin"
;;
bsd*)
echo "BSD"
;;
solaris*)
echo "SOLARIS"
;;
*)
echo "unknown: $OSTYPE"
;;
esac
下载远程数据到本地
# 判断${dataDownloadPath}/$today目录是否存在
if [ ! -d "${dataDownloadPath}/${today}" ]; then
mkdir -p ${dataDownloadPath}/${today}
fi
echo "下载远程数据库到本地文件${dataDownloadPath}/${today}-----------------"
for i in ${array_name[@]}
do
echo " "正在下载远程数据库表 ${i} 的数据
# 获取本地数据库最新一条记录的时间
mysql -h ${localMysqlServer} -P3306 -u${localMysqlUser} -p${localMysqlPassword} --compress ${localMysqlDB} -e "select max(datatime) from ${i}" > ${dataDownloadPath}/${today}/tmp.txt
mysqldump -t -h ${remoteMysqlServer} -u${remoteMysqlUser} -p${remoteMysqlPassword} --single-transaction --compress ${remoteMysqlDB} ${i} --where="createDate > '`tail -1 ${dataDownloadPath}/${today}/tmp.txt`'">${dataDownloadPath}/${today}/${i}_${today}.sql
echo " "远程数据库表 ${i} 的增量数据下载成功
done
echo "-----------------------------------------------------------------"
将文件中的数据导入到本地数据库
echo "从${dataDownloadPath}中提取数据,导入本地数据库中----------------------"
for i in ${array_name[@]}
do
echo " "即将从本地 ${dataDownloadPath}/${today}/${i}_${today}.sql 提取数据并导入到 ${i} 的数据库表
mysql -h ${localMysqlServer} -P3306 -u${localMysqlUser} -p${localMysqlPassword} ${localMysqlDB} -e "source ${dataDownloadPath}/${today}/${i}_${today}.sql"
echo " "成功导入数据到数据库表 ${i}
echo
echo
done
echo "-----------------------------------------------------------------"
echo
删除1周前的本地旧数据
if [ -z "${deleteDay}" ]; then
echo "deleteDay is empty----------------------------------------------"
exit
fi
if [ -d "${deleteDay}" ]; then
echo "${deleteDay}文件夹即将删除-----------------------------------------"
rm -rf ${dataDownloadPath}/${deleteDay}/
echo "${deleteDay}文件夹删除成功-----------------------------------------"
fi
exit