Windows下Postgre SQL数据库通过Slony-I 实现数据库双机同步备份

标签: windows postgre sql | 发表时间:2013-07-31 14:43 | 作者:ma12shuai
出处:http://blog.csdn.net

一、 我们要实现的环境是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

# 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为节点的别名,可以用别的。

以下为文件详细内容:

#----------------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为需要复制的数据库名。

以下为文件详细内容:

#----------------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为需要复制的数据库名。

以下为文件详细内容:

#------------------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为需要复制的数据库名

以下为文件详细内容:

#------------------slony_lave.conf-------------Start-----------------

#集群名称

cluster_name = postgrecluster


#连接主服务器的信息

conn_info ='dbname=test host=192.168.101.128 user=postgres password=123'


#------------------slony_lave.conf-------------End-------------------


第十步:

为服务添加引擎:

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


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

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

作者:ma12shuai 发表于2013-7-31 14:43:47 原文链接
阅读:35 评论:0 查看评论

相关 [windows postgre sql] 推荐:

Windows下Postgre SQL数据库通过Slony-I 实现数据库双机同步备份

- - CSDN博客数据库推荐文章
一、 我们要实现的环境是windows xp、windows2003上安装Postgre SQL数据库,实现目的是两台数据库服务器进行数据库同步,即数据库同步更新、删除、插入等对数据库的操作. 二、 使用的工具是数据库版本Postgre SQL 9.2,配置集群的工具是Stack Builder自己的可安装的Slony-I v2.1.3-1.

Postgre的常用系统表

- - 数据库 - ITeye博客
可以基于某个基本数据类型,定义一个domain,并在这个domain上定义一个或多个check,举例:. N个表都有一个邮政编码字段,为了防止用户输入非法的邮政编码,我们需要在这个字段上定义一个check来验证用户的输入数据,显然,如果有100个表有这个字段,那么我需要定义100次这个验证规则,而且一旦规则发生变化,又需要做100次的修改.

PL/SQL动态SQL(原创)

- - ITeye博客
使用动态SQL是在编写PL/SQL过程时经常使用的方法之一. 很多情况下,比如根据业务的需要,如果输入不同查询条件,则生成不同的执行SQL查询语句,对于这种情况需要使用动态SQL来完成. 再比如,对于分页的情况,对于不同的表,必定存在不同的字段,因此使用静态SQL则只能针对某几个特定的表来形成分页.

Derby SQL 分页

- - ITeye博客
    之前在网上看到有人问 Derby SQL 分页实现的问题,网上有人给出这样的解决方案,SQL 如下:. 其实,这样的分页查询,性能不理想,我试过在 300W 数据量中采用这种分页方式,需要 20~30秒之久;其实 Derby 10.6 以上版本有更好的分页支持,直接给出 SQL 实现如下:.

SQL Server--索引

- - CSDN博客推荐文章
         1,概念:  数据库索引是对数据表中一个或多个列的值进行排序的结构,就像一本书的目录一样,索引提供了在行中快速查询特定行的能力..             2.1优点:  1,大大加快搜索数据的速度,这是引入索引的主要原因..                             2,创建唯一性索引,保证数据库表中每一行数据的唯一性..

MySql动态SQL

- - SQL - 编程语言 - ITeye博客
13.7. 用于预处理语句的SQL语法. MySQL 5.1对服务器一方的预制语句提供支持. 如果您使用合适的客户端编程界面,则这种支持可以发挥在MySQL 4.1中实施的高效客户端/服务器二进制协议的优势. 候选界面包括MySQL C API客户端库(用于C程序)、MySQL Connector/J(用于Java程序)和MySQL Connector/NET.

sql优化

- - 数据库 - ITeye博客
是对数据库(数据)进行操作的惟一途径;. 消耗了70%~90%的数据库资源;独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低;. 可以有不同的写法;易学,难精通. 固定的SQL书写习惯,相同的查询尽量保持相同,存储过程的效率较高. 应该编写与其格式一致的语句,包括字母的大小写、标点符号、换行的位置等都要一致.

birt动态SQL

- - ITeye博客
birt动态SQL实现有三种方式:拼接SQL、绑定变量和让应用程序拼接,birt得到返回结果集方式. 在数据集中写SQL,如下:. 选中数据集,点script方式,在beforeOpen事件中写如下SQL:. 然后就可以了,当然,也可以不写第一步,直接所有的SQL都在beforeOpen中拼接. 但是,拼接SQL方式不仅复杂容易错,还会导致SQL注入风险.

SQL Server 面试

- - SQL - 编程语言 - ITeye博客
在SQL语言中,一个SELECT…FROM…WHERE语句称为一个查询块,将一个查询块嵌套在另一个查询块的WHERE子句中的查询称为子查询. 子查询分为嵌套子查询和相关子查询两种. 嵌套子查询的求解方法是由里向外处理,即每个子查询在其上一级查询处理之前求解,子查询的结果作为其父查询的查询条件. 子查询只执行一次,且可以单独执行;.

MongoDB sql操作

- - 数据库 - ITeye博客
1.  基本查询:. 下面的示例等同于SQL语句的where name = "stephen" and age = 35.      --返回指定的文档键值对. 下面的示例将只是返回name和age键值对.      --指定不返回的文档键值对. 下面的示例将返回除name之外的所有键值对.