bucardo5.3 postgres主从同步

标签: bucardo5 postgres 同步 | 发表时间:2014-12-30 12:26 | 作者:xmarker
出处:http://xmarker.blog.163.com
  最近在pg官网上看到bucardo5.3 release了,bucardo可以实现postgresql的多主复制、主从同步,甚至可以以postgresql为源库,可以和oracle、mysql、mongodb等很多数据库进行数据异步同步,很多企业都有数据同步到业务需求,特别是不同数据库间的同步更是个大难题,bucardo5.3暂时只支持以pg为主库的异构数据库同步,将来会支持以别的数据库为源库的数据同步。在报表应用、olap等领域,bucardo可以把数据实时异步的传输到备库,然后在备库中可以进行数据转换、建临时表、报表等操作,而pg原生的stream replication只能是只读操作,所以bucardo的应用领域还是很广的。今天分两篇分别记录下pg到pg的主从同步和pg到mysql的主从同步。

1.bucardo5.3 安装:
1.1 首先安装依赖包:
[root@db164 soft]# wget http://bucardo.org/downloads/dbix_safe.tar.gz  
tar xvfz dbix_safe.tar.gz
 cd DBIx-Safe-1.2.5
 perl Makefile.PL
 make
 make test
 make install
也可以用yum install perl-DBIx-Safe (centos)或 apt-get install libdbix-safe-perl (ubuntu平台)安装
1.2 下载并安装bucardo
[root@db164 soft]# wget http://bucardo.org/downloads/Bucardo-5.3.0.tar.gz
 cd Bucardo-5.3.0
 perl Makefile.PL
 make
 make install
1.3 安装postgresql perl扩展
 yum install postgresql-plperl 或者apt-get install postgresql-plperl-9.0
1.4 初始化安装bucardo到数据库中:
#bucardo install
Enter a number to change it, P to proceed, or Q to quit: P

Postgres version is: 9.3
Creating superuser 'bucardo'
Attempting to create and populate the bucardo database and schema

INSTALLATION FAILED! (psql:/usr/local/share/bucardo/bucardo.schema:45: ERROR:  language "plperlu" does not exist
HINT:  Use CREATE LANGUAGE to load the language into the database.)
解决:创建plperlu语言: create language plperlu;
如果提示没有plperlu语言,可能是编译时没有支持plperlu,需要重新编译以支持plperlu。
问题2:install_driver(Pg) failed: Can't locate DBD/Pg.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at (eval 9) line 3.
解决:安装perl dbd模块:yum install perl-DBD-Pg
以上问题都没问题后就可以安装了:
postgres:/home/postgres@db164>bucardo install
This will install the bucardo database into an existing Postgres cluster.
Postgres must have been compiled with Perl support,
and you must connect as a superuser

Current connection settings:
1. Host:           <none>
2. Port:           5432
3. User:           postgres
4. Database:       bucardo
5. PID directory:  /var/run/bucardo
Enter a number to change it, P to proceed, or Q to quit: 1

Change the host to: 127.0.0.1

Changed host to: 127.0.0.1
Current connection settings:
1. Host:           127.0.0.1
2. Port:           5432
3. User:           postgres
4. Database:       bucardo
5. PID directory:  /var/run/bucardo
Enter a number to change it, P to proceed, or Q to quit: P

Postgres version is: 9.3
Attempting to create and populate the bucardo database and schema
Database creation is complete

Updated configuration setting "piddir"
Installation is now complete.
If you see errors or need help, please email [email protected]

You may want to check over the configuration variables next, by running:
bucardo show all
Change any setting by using: bucardo set foo=bar
注意要先创建pid directory
mkdir -p /var/run/bucardo 
chown postgres:postgres  /var/run/bucardo 


2.配置复制:
这里我用postgresql9.3.5为源库,数据库为mcldb,并且在同一台机器上安装postgres9.4作为目标库,数据库为mcldb2,并且在源库和目标库创建相同表结构的表t_new,建表语句为:create table t_new (id int,name varchar(20),remark text),因为bucardo不支持创建表等ddl同步操作。

2.1 添加源数据库:
postgres:/home/postgres@db164>bucardo add db source_mcldb dbname=mcldb port=5432 host=127.0.0.1 user=postgres pass=123456
Added database "source_mcldb"

2.2 添加目标数据库
postgres:/home/postgres@db164>bucardo add database destination_mcldb2 dbname=mcldb2 port=5434 host=127.0.0.1 user=pg94 pass=123456
Added database "destination_mcldb2"

2.3 添加表:
postgres:/home/postgres@db164>bucardo add table public.t_new db=source_mcldb 
Added the following tables or sequences:
  public.t_new
如果要添加所有的表,则可以bucardo add all table 

2.4 添加复制群组(即复制一组表):
postgres:/home/postgres@db164>bucardo add relgroup test_relgroup public.t_new
Created relgroup "test_relgroup"
The following tables or sequences are now part of the relgroup "test_relgroup":

2.5 添加数据库复制组(即一对复制关系):
postgres:/home/postgres@db164>bucardo add dbgroup test_dbgroup source_mcldb:source destination_mcldb2:target
Created dbgroup "test_dbgroup"
Added database "source_mcldb" to dbgroup "test_dbgroup" as source
Added database "destination_mcldb2" to dbgroup "test_dbgroup" as target

2.6 添加同步:
postgres:/home/postgres@db164>bucardo add sync test_sync relgroup=test_relgroup dbs=test_dbgroup
Added sync "test_sync"

2.7 启动bucardo:
bucardo start
问题:
postgres:/home/postgres@db164>bucardo start
Checking for existing processes
Can't locate boolean.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/local/share/perl5/Bucardo.pm line 34.
BEGIN failed--compilation aborted at /usr/local/share/perl5/Bucardo.pm line 34.
Compilation failed in require at /usr/local/bin/bucardo line 820.
解决:  apt-get install libboolean-perl 或 yum install perl-boolean
然后就可以启动了。

2.8 查看复制状态:
postgres:/home/postgres@db164>bucardo list all
-- customcodes:
There are no entries in the 'customcode' table.
-- customnames:
No customnames have been added yet
-- customcols:
No customcols have been added yet
-- dbgroups:
dbgroup: test_dbgroup  Members: destination_mcldb2:target source_mcldb:source
-- databases:
Database: destination_mcldb2  Status: active  Conn: psql -p 5434 -U pg94 -d mcldb2 -h 127.0.0.1
Database: source_mcldb        Status: active  Conn: psql -p 5432 -U postgres -d mcldb -h 127.0.0.1
-- relgroup:
Relgroup: test_relgroup  DB: source_mcldb  Members: public.t_new
  Used in syncs: test_sync
-- syncs:
Sync "test_sync"  Relgroup "test_relgroup" [Active]
  DB group "test_dbgroup" destination_mcldb2:target source_mcldb:source
-- tables:
8. Table: public.t_new  DB: source_mcldb  PK: id (integer)
-- sequences:
There are no sequences.

2.9 验证同步:
在源库中插入一条记录,可以看到目标库中立即有一条数据同步过来。
另外可以在/var/log/bucardo/log.bucardo中看到新插入的数据的日志:
mcldb=# insert into t_new values(7,'mcl7');

目标库:
mcldb2=# select * from t_new ;
 id |  name   
----+---------
  7 | mcl7
(1 row)

2.10 其他:
虽然bucardo中通过bucardo show all可以看到autosync_ddl配置:
[root@db164 ~]# bucardo show all
autosync_ddl              = newcol
但真正增加一个新列并不能复制过去,在文档中也没有找到autosync_ddl的可选值的详细说明

相关 [bucardo5 postgres 同步] 推荐:

bucardo5.3 postgres主从同步

- - x-marker的博客
在报表应用、olap等领域,bucardo可以把数据实时异步的传输到备库,然后在备库中可以进行数据转换、建临时表、报表等操作,而pg原生的stream replication只能是只读操作,所以bucardo的应用领域还是很广的. 今天分两篇分别记录下pg到pg的主从同步和pg到mysql的主从同步.

postgres创建表分区

- - 数据库 - ITeye博客
       PostgreSQL支持基本的表分区功能.      分区的意思是把逻辑上的一个大表分割成物理上的几块. 某些类型的查询性能可以得到极大提升. 特别是表中访问率较高的行位于一个单独分区或少数几个分区上的情况下. 分区可以减少索引体积从而可以将高使用率部分的索引存放在内存中. 如果索引不能全部放在内存中,那么在索引上的读和写都会产生更多的磁盘访问.

监控Postgres数据库

- - 数据库 - ITeye博客
官方文档中有关监控的章节:. 这个可以实时监控数据库,但是没有系统cpu和内存图表. 大多数带有系统监控的,都是通过插件实现的,要多安装和配置一些东西. 下面是安装powa的步骤,Centos系统. 在官网下载代码,现在是2.0版,这个版本需要postgresql是9.4以上版本. 我的pg是9.3版,所以下载的1.2.1版本.

Postgres 数据库分析工具

- - CSDN博客数据库推荐文章
Postgres号称是开源免费DBMS最强大的,并且支持二次开发. 本文就该DBMS的分析工具进行讨论. pg_class表记载表和几乎所有有 字段或者是那些类似表的东西. pg_index),序列,视图,复合类型和一些特殊关系类型. 也有pg_index这张表,包含关于索引的一部分信息.    relname(表,索引,视图等的名字); .

spring boot与spring batch、postgres及elasticsearch整合

- - 互联网 - ITeye博客
当系统有大量数据需要从数据库导入elasticsearch时,使用sping batch可以提高导入的效率. 这篇文章使用spring batch将数据从postgres导入elasticsearch. 本文使用spring data jest连接ES(也可以使用spring data elasticsearch连接ES),ES版本为5.5.3.

Postgres-XL:基于PostgreSQL的开源分布式实现

- - 标点符
Postgres-XL 全称为 Postgres eXtensible Lattice,是TransLattice公司及其收购数据库技术公司–StormDB的产品. Postgres-XL是一个横向扩展的开源数据库集群,具有足够的灵活性来处理不同的数据库任务. Postgres-XL 功能特性. 开放源代码:(源协议使用宽松的“ Mozilla Public License”许可,允许将开源代码与闭源代码混在一起使用.

管理大型 Postgres 数据库的 3 个技巧

- - Linux 中国◆开源社区
在处理庞大的数据库时,请尝试这些方便的解决方案,以解决常见的问题. 关系型数据库 PostgreSQL(也被称为 Postgres)已经越来越流行,全球各地的企业和公共部门都在使用它. 随着这种广泛的采用,数据库已经变得比以前更大了. 在 Crunchy Data,我们经常与 20TB 以上的数据库打交道,而且我们现有的数据库还在继续增长.

linux时间同步

- - BlogJava-首页技术区
第一步的意思是设置时间,设置完了可以用date命令查看对不对...注意是月日时分年  . 第二步的意思是写入主板的rtc芯片..  . su -c 'date -s 月/日/年'  . su -c 'date -s 时:分:秒'  . 由于Linux时钟和Windows时钟从概念的分类、使用到设置都有很大的不同,所以,搞清楚Linux时钟的工作方式与设置操作,不仅对于Linux初学者有着重大意义,而且对于使用Linux服务器的用户来说尤为重要.

nginx + memcached session 同步

- - 企业架构 - ITeye博客
squid 缓存疑问 问题归纳:. 1 squid 缓存的数据,何时过期,如何判断缓存的数据已经过期,如何把最新的数据缓入squid 并且替换掉旧的内容. 2 如何判断数据是否应该被缓存. 3 校验失败时,是否给出缓存中旧的内容. 上面的几个问题  都可以通过 squid中的 refresh_pattern 配置项 找到答案.

用wget同步ftp

- - 天空极速
wget 可以下载整个网站或者ftp. 如果有两个ftp站点,需要同步,可以使用以下命令:. 解释下,前面是ftp的授权用户,密码,ftp的站点,端口. -r 是表示递归,-x表示强制创建目录,-c表示断点续传. Tags - windows , wget , ftp , 备份 , 同步.