注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

PostgreSQL 数据同步  

2011-09-02 16:17:46|  分类: Postgres基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

    
       今天接到个需求,有个业务需要数据同步,源库和目标库都是 PostgreSQL , 由于表都是日志表,
表数据只有插入,不会更新;所以只需要将源库新增数据同步到目标库即可,下面是同步脚本,供参考。


--1 环境
源库:          source_db
目标库:    des_db
源库表:
                  skytf.hk_tbl_charge_oversea
                  skytf.hk_tbl_charge_oversea_dsm
目标库表: 
                   hk_tbl_charge_oversea
                   hk_tbl_charge_oversea_dsm
需求:        每天将源库指定表的前一天数据同步到目标库


--2 脚本功能
  这套脚本有两个功能;
 1 每天定时执行,同步源库 source_db 指定表的前一天数据;
 2 如果由于种种原因,数据同步失败,可以用这套脚本补数据。


--3 exec_sync_crp.sh 脚本代码
#!/bin/bash

export PGPORT=1921
export PGDATA=/database/pgdata1921
export LANG=en_US.utf8
export PGHOME=/app/pgsql
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib
export DATE=`date +"%Y%m%d%H%M"`
export PATH=$PGHOME/bin:$PATH:.
export MANPATH=$PGHOME/man:$MANPATH


yesterday=`date -d '-1 day' +%F`
script_dir=/home/postgres/script/tf/sync_script


#Call script sync_crp.sh
${script_dir}/sync_crp.sh ${yesterday}

  备注:这个脚本调用来调用脚本 sync_crp_part.sh
 
 
--4 sync_crp.sh  脚本代码
#!/bin/bash

if [ $# != 1 ]; then
echo Usage: ./sync_crp.sh arg1
echo   Examples:
echo    To get the date of  2011-09-01, enter:
echo '     sync_crp.sh  2011-09-01 > 2011-09-01.out'
exit 0
fi


export PGPORT=1921
export PGDATA=/database/pgdata1921
export LANG=en_US.utf8
export PGHOME=/app/pgsql
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib
export DATE=`date +"%Y%m%d%H%M"`
export PATH=$PGHOME/bin:$PATH:.
export MANPATH=$PGHOME/man:$MANPATH

today=$1
nextday=`date -d  "${today} +1 days" +%F`
host_ip='192.168.xx.xx'
v_email="Francs3@163.com"


#Make SQL strings, the sql of getting database source_db  data
sql1="select * from  skytf.hk_tbl_charge_oversea             where createtime >= '${today}' and createtime <'${nextday}' "    
sql2="select * from  skytf.hk_tbl_charge_oversea_dsm         where createtime >= '${today}' and createtime <'${nextday}' "


##################  The real get data process  ######################
## 同步表 crp.hk_tbl_charge_oversea
echo "`date +%F\ %T` Begin sync report data from data source_db to crp database ! "
psql -h 192.168.xx.xx -p 1921 source_db francs -c "copy ($sql1) to stdout " | psql des_db des_db -c "copy crp.hk_tbl_charge_oversea from stdin"

if [ $? -ne 0 ]             
then
     echo "`date +%F\ %T` ERROR: Sync table hk_tbl_charge_oversea  error  "
     echo -e "`date +%F\ %T`\nIP: ${host_ip}\nHostname: `hostname`\n\nAuthor: francs(DBA)" | mutt -s "   ERROR: Sync table hk_tbl_charge_oversea  error " ${v_email}
else 
     echo "`date +%F\ %T` Table hk_tbl_charge_oversea is finished "
fi


## 同步表 crp.hk_tbl_charge_oversea_dsm
psql -h 192.168.xx.xx -p 1921 source_db francs -c "copy ($sql2) to stdout " | psql des_db des_db -c "copy crp.hk_tbl_charge_oversea_dsm from stdin"

if [ $? -ne 0 ]             
then
     echo "`date +%F\ %T` ERROR: Sync table hk_tbl_charge_oversea_dsm  error  "
     echo -e "`date +%F\ %T`\nIP: ${host_ip}\nHostname: `hostname`\n\nAuthor: francs(DBA)" | mutt -s "   ERROR: Sync table hk_tbl_charge_oversea_dsm  error " ${v_email}
else 
     echo "`date +%F\ %T` Table hk_tbl_charge_oversea_dsm is finished "
fi

    备注:脚本里只同步了两张表,如果还有其它表,可以继续加代码,如果表名一样,可以写个 for 循环;
              由于这里源表名,目标表名不一样,所以没用 for 循环, 这个脚本按天同步数据,如果需要补数据,
              只要加上日期参数即可;
         
 
--5 放入 crontabl 里,定时执行
# Sync crp data from data warehouse
6* * * * /home/postgres/script/tf/sync_script/exec_sync_crp.sh >> /home/postgres/script/tf/sync_script/exec_sync_crp.log 2>&1 
       

  评论这张
 
阅读(27422)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016