postgresql 数据库同步复制

一、 我们要实现的环境是windows xp、windows2003上安装Postgre SQL数据库,实现目的是两台数据库服务器进行数据库同步,即数据库同步更新、删除、插入等对数据库的操作。

二、 使用的工具是数据库版本Postgre SQL 9.2,配置集群的工具是Stack Builder自己的可安装的Slony-I v2.1.3-1。

三、 Slony-I实现数据库集群同步的原理简述:Slony-i是采用一主多从式集群方式,通过在主服务器和从服务器上建立同步节点,设置远程访问路径,启动监听进程(slon守护进程)进行监听,当主服务器进行了修改操作时,通过触发器触发,从进程进行异步修改来达到数据库同步。但是这种同步只能是从服务器备份主服务器,不能修改从服务器让主服务器同步。也即这种同步是单方向的。而且主、从服务器的postgres服务和slony-I服务都必须启动。

四、 先在两台机子上安装 Postgre SQL和Slony-I,且都建立一个test的数据库。并在test库上建立需要同步的表,例如testtable,这些表必须要有主键(Slony-I只是实现某个数据库,某些设定好的表的同步更新,新建表不行)。需要多个表则建立多个。

五、详细配置步骤如下:

1.环境 

 

Master 192.168.101.128

Slave 192.168.101.32

操作系统

Windows XP SP3

Windows Server 2003 SP1

Postgre SQL

9.2.4

9.2.4

Slony-I

2.1.3

2.1.3

2.实现要求

单向同步主服务器“192.168.101.128”到从服务器的“192.168.101.32”;

 

Master 192.168.101.128

Slave 192.168.101.32

数据库名

test

test

用户名

postgres

postgres

密码

123

123

3.配置步骤:

第一步:

注册服务:

在主服务器上以及从服务器上,进入%PG%/bin目录,运行“slon -regservice”;建立SlonyI服务。


第二步:

建立联通性:

在主服务器上以及从服务器上,编辑%PG%/data/pg_hba.conf,使网络中的两个数据库服务器能相互访问;

都要加上主从服务器的ip,必须保留127.0.0.1

[plain]  view plain copy
  1. # IPv4 local connections:  
  2.   
  3. host    all         all         127.0.0.1/32           md5  
  4.   
  5. host    all         all         192.168.101.128/32         md5  
  6.   
  7. host    all         all         192.168.101.32/32          md5  


第三步:

建立主服务器脚本文件“master.script”;

注:postgrecluster为群集名, test为需要复制的数据库名,testtable为复制表名(必须在两个库先建且要有主键),node 1 和 node 2 中的1,2为节点的别名,可以用别的。

以下为文件详细内容:

[plain]  view plain copy
  1. #----------------master.script-------------Start-----------------  
  2.   
  3. #定义集群名称  
  4.   
  5. cluster name=postgrecluster;  
  6.   
  7.    
  8.   
  9. # 定义复制节点  
  10.   
  11. #主节点  
  12.   
  13. node 1 admin conninfo = 'dbname=test host=192.168.101.128 user=postgres password=123';  
  14.   
  15. #从节点  
  16.   
  17. node 2 admin conninfo = 'dbname=test host=192.168.101.32 user=postgres password=123';  
  18.   
  19.    
  20.   
  21. # 初始化集群,id从1开始  
  22.   
  23. init cluster ( id = 1, comment = 'Master Node' );  
  24.   
  25.    
  26.   
  27. #设置参与同步的数据表,创建复制集,id也是从1开始,从复制集添加表  
  28.   
  29. create set ( id = 1, origin = 1, comment = 'All test Tables' );  
  30.   
  31. set add table ( set id = 1, origin = 1, id = 1, fully qualified name = 'public.testtable', comment = 'Table testtable' );  
  32.   
  33.    
  34.   
  35. #设置存储节点,存储主从两个节点的信息  
  36.   
  37. store node ( id = 2, comment = 'Slave Node', event node = 1);  
  38.   
  39.    
  40.   
  41. #设置存储路径  
  42.   
  43. #主节点  
  44.   
  45. store path ( server = 1, client = 2, conninfo = 'dbname= test host=192.168.101.128 user=postgres password=123');  
  46.   
  47. #从节点  
  48.   
  49. store path ( server = 2, client = 1, conninfo = 'dbname= test host=192.168.101.32 user=postgres password=123');  
  50.   
  51.    
  52.   
  53. #设置侦听事件和订阅方向,复制中角色,主节点是原始提供者,从节点是接收者  
  54.   
  55. store listen ( origin = 1, provider = 1, receiver = 2 );  
  56.   
  57. store listen ( origin = 2, provider = 2, receiver = 1 );   
  58.   
  59. #----------------master.script-------------End-----------------  


第四步:

运行脚本文件

在主服务器里进入%PG%/bin运行“slonik master.script” ;


注:如果 master.script 不放在bin目录下,则需要加上路径!

第五步:

在主服务器上建立引擎配置文件“slony_master.conf”,其内容是集群名称以及指向从服务器的连接配置;

注:postgrecluster为群集名, test为需要复制的数据库名。

以下为文件详细内容:

[plain]  view plain copy
  1. #----------------slony_master.conf-------------Start-----------------  
  2.   
  3. #集群名称  
  4.   
  5. cluster_name = postgrecluster  
  6.   
  7.    
  8.   
  9. #连接从服务器的信息  
  10.   
  11. conn_info = 'dbname=test host=192.168.101.32 user=postgres password=123'  
  12.   
  13. #----------------slony_master.conf-------------End-----------------  


第六步:

为服务添加引擎:

在主服务器里进入%PG%/bin运行“slon -addengine slony_master.conf”;


第七步:

建立从服务器脚本文件“slave.script”;

注:postgrecluster为群集名, test为需要复制的数据库名。

以下为文件详细内容:

[plain]  view plain copy
  1. #------------------slave.script-------------Start-----------------  
  2.   
  3. #定义集群名称  
  4.   
  5. cluster name=postgrecluster;  
  6.   
  7. #定义复制节点  
  8.   
  9. #主节点  
  10.   
  11. node 1 admin conninfo = 'dbname=test host=192.168.101.128 user=postgres password=123';  
  12.   
  13. #从节点  
  14.   
  15. node 2 admin conninfo = 'dbname=test host=192.168.101.32 user=postgres password=123';  
  16.   
  17. #定义订阅  
  18.   
  19. SUBSCRIBE SET (ID = 1, PROVIDER = 1, RECEIVER = 2, FORWARD = YES);  
  20.   
  21. #------------------slave.script-------------End-------------------  


第八步:

运行脚本文件:

在从服务器里进入%PG%/bin运行“slonik slave.script” ;


第九步:

在从服务器上建立引擎配置文件“slony_slave.conf”其内容是集群名称以及指向主服务器的连接配置;

注:postgrecluster为群集名 test为需要复制的数据库名

以下为文件详细内容:

[plain]  view plain copy
  1. #------------------slony_lave.conf-------------Start-----------------  
  2.   
  3. #集群名称  
  4.   
  5. cluster_name = postgrecluster  
  6.   
  7.   
  8. #连接主服务器的信息  
  9.   
  10. conn_info ='dbname=test host=192.168.101.128 user=postgres password=123'  
  11.   
  12.   
  13. #------------------slony_lave.conf-------------End-------------------  


第十步:

为服务添加引擎:

在从服务器里进入%PG%/bin运行“slon -addengine slony_slave.conf”;


至此,所有配置已完成。进入主从服务器计算机管理,检查两台机器的postgresqlSlony-I服务是否已启动,若未启动,请手动点击启动。

测试是否成功:在主服务器testtable插入一条数据,到从服务器查看是否有数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值