Windows下Postgre SQL数据库通过Slony-I实现数据库双机同步备份
Windows下Postgre SQL数据库通过Slony-I实现数据库双机同步备份
一、 我们要实现的环境是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”;建立Slony-I服务。
第二步:
建立联通性:
在主服务器上以及从服务器上,编辑%PG%/data/pg_hba.conf,使网络中的两个数据库服务器能相互访问;
都要加上主从服务器的ip,必须保留127.0.0.1
[plain] # IPv4 local connections: host all all 127.0.0.1/32 md5 host all all 192.168.101.128/32 md5 host all all 192.168.101.32/32 md5
第三步:
建立主服务器脚本文件“master.script”;
注:postgrecluster为群集名, test为需要复制的数据库名,testtable为复制表名(必须在两个库先建且要有主键),node 1 和 node 2 中的1,2为节点的别名,可以用别的。
以下为文件详细内容:
[plain] #----------------master.script-------------Start----------------- #定义集群名称 cluster name=postgrecluster; # 定义复制节点 #主节点 node 1 admin conninfo = 'dbname=test host=192.168.101.128 user=postgres password=123'; #从节点 node 2 admin conninfo = 'dbname=test host=192.168.101.32 user=postgres password=123'; # 初始化集群,id从1开始 init cluster ( id = 1, comment = 'Master Node' ); #设置参与同步的数据表,创建复制集,id也是从1开始,从复制集添加表 create set ( id = 1, origin = 1, comment = 'All test Tables' ); set add table ( set id = 1, origin = 1, id = 1, fully qualified name = 'public.testtable', comment = 'Table testtable' ); #设置存储节点,存储主从两个节点的信息 store node ( id = 2, comment = 'Slave Node', event node = 1); #设置存储路径 #主节点 store path ( server = 1, client = 2, conninfo = 'dbname= test host=192.168.101.128 user=postgres password=123'); #从节点 store path ( server = 2, client = 1, conninfo = 'dbname= test host=192.168.101.32 user=postgres password=123'); #设置侦听事件和订阅方向,复制中角色,主节点是原始提供者,从节点是接收者 store listen ( origin = 1, provider = 1, receiver = 2 ); store listen ( origin = 2, provider = 2, receiver = 1 ); #----------------master.script-------------End-----------------
第四步:
运行脚本文件
在主服务器里进入%PG%/bin运行“slonik master.script” ;
注:如果 master.script 不放在bin目录下,则需要加上路径!
第五步:
在主服务器上建立引擎配置文件“slony_master.conf”,其内容是集群名称以及指向从服务器的连接配置;
注:postgrecluster为群集名, test为需要复制的数据库名。
以下为文件详细内容:
[plain] #----------------slony_master.conf-------------Start----------------- #集群名称 cluster_name = postgrecluster #连接从服务器的信息 conn_info = 'dbname=test host=192.168.101.32 user=postgres password=123' #----------------slony_master.conf-------------End-----------------
第六步:
为服务添加引擎:
在主服务器里进入%PG%/bin运行“slon -addengine slony_master.conf”;
第七步:
建立从服务器脚本文件“slave.script”;
注:postgrecluster为群集名, test为需要复制的数据库名。
以下为文件详细内容:
[plain] #------------------slave.script-------------Start----------------- #定义集群名称 cluster name=postgrecluster; #定义复制节点 #主节点 node 1 admin conninfo = 'dbname=test host=192.168.101.128 user=postgres password=123'; #从节点 node 2 admin conninfo = 'dbname=test host=192.168.101.32 user=postgres password=123'; #定义订阅 SUBSCRIBE SET (ID = 1, PROVIDER = 1, RECEIVER = 2, FORWARD = YES); #------------------slave.script-------------End-------------------
第八步:
运行脚本文件:
在从服务器里进入%PG%/bin运行“slonik slave.script” ;
第九步:
在从服务器上建立引擎配置文件“slony_slave.conf”其内容是集群名称以及指向主服务器的连接配置;
注:postgrecluster为群集名 test为需要复制的数据库名
以下为文件详细内容:
[plain] #------------------slony_lave.conf-------------Start----------------- #集群名称 cluster_name = postgrecluster #连接主服务器的信息 conn_info ='dbname=test host=192.168.101.128 user=postgre
- 更多SQLServer疑问解答:
- 配置MSSQL复制指定快照文件夹提示:不是有效的路径或文件名
- 详细解读varchar和Nvarchar区别
- SQL SERVER 2005 同步复制技术
- 进程未能大容量复制到表 解决方法
- MSSql实例教程:MSSql数据库同步
- SQLServer2000同步复制技术实现(分发和订阅)
- sqlserver
- SQLSERVER
- 测试 sqlserver 最大用户数连接
- 写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的
- sqlserver2008的安装问题。
- 为什么安装的SQL server 2008我的没有MSSQLSERVER协议啊?
- 怎样把exel表里的数据复制到sqlserver表里
- sqlserver数据库主键和外键问题
- sqlserver 中的左表连接查询和右表连接查询有啥不同?有什么用?