一、 我们要实现的环境是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插入一条数据,到从服务器查看是否有数据。

Windows下Postgre SQL数据库通过Slony-I 实现数据库双机同步备份的更多相关文章

  1. 同一台windows下配置安装多个mysql实例,实现主从同步

    一.安装多个mysql 参见: https://blog.csdn.net/wrh_csdn/article/details/80198795 https://www.cnblogs.com/qjoa ...

  2. Windows下cwrsync客户端与rsync群辉存储客户端数据同步

    cwRsync简介 cwRsync是Rsync在Windows上的实现版本,Rsync通过使用特定算法的文件传输技术,可以在网络上传输只修改了的文件. cwRsync主要用于Windows上的远程文件 ...

  3. Linux和windows下执行sql脚本文件

    利用 sqlplus 登录数据库之后 键入: @/全路径/文件名      即可执行*.sql 文件            例 假设有一个 test.sql 文件 所在路径是/home/oracle/ ...

  4. maven在windows下的安装配置及手动引入oracle数据库jar包

    一.maven的安装配置 注意:在进行如下配置之前,有个前提是你的java的jdk安装配置正确才行 1.首先,下载maven,网址http://maven.apache.org/download.cg ...

  5. Windows下使用CMD命令进入和退出MySQL数据库

    一.进入 1.在CMD命令窗口敲入命令 mysql -hlocalhost -uroot -p 后按回车(注意这里的"-h"."-u"."-p&quo ...

  6. Windows下通过CMD命令行程序操作MySQL数据库

    注意:如果您的MySQL没有安装在C盘下,先使用命令进入MySQL的安装目录下的bin目录中才可以进行后续操作. 方法如下:例如您安装在D盘.先输入 D:  回车即可进入D盘,再输入cd D:\您my ...

  7. 个人整理的 Windows 下 .NET 开发必装的软件

    注: 最后更新时间:2019-03-15 一..NET 开发 1. 必装 软件名称 说明 下载地址 JetBrains Toolbox JetBrins 全家桶管理工具. 下载地址 JetBrains ...

  8. 在 Windows 下安装 Oracle 11g XE (Express Edition)

    Oracle 11g XE 是 Oracle 数据库的免费版本,支持标准版的大部分功能,11g XE 提供 Windows 和 Linux 版本. 做为免费的 Oracle 数据库版本,XE 的限制是 ...

  9. windows下sqli-labs的搭建及学习(GET篇)

    环境搭建: 源码下载地址:https://github.com/Audi-1/sqli-labs 需要搭建以下环境: apache+mysql+php Tomcat+mysql+java(部分关卡需要 ...

随机推荐

  1. corejava-chap01

    <java是什么:>Programming language 程序语言Development environment 开发环境Application environment 应用环境Dep ...

  2. LeetCode OJ -Happy Number

    题目链接:https://leetcode.com/problems/happy-number/ 题目理解:实现isHappy函数,判断一个正整数是否为happy数 happy数:计算要判断的数的每一 ...

  3. WHU 1579 Big data (DP)

    题意: f[0]=0,f[i]=f[i-1]+a or b. 求满足L<=∑f[n]<=R的序列的种数 n<100.  |a|,|b|<=10000.  |L|,|R|< ...

  4. gvim 常用命令

    插入: insert 强退: :q! 退出: :q 保存: :w 保存退出::wq 复制: yy(单行)   多行:8yy 删除: dd(单行)   多行:8dd 或者 :4,8d 执行脚本: :! ...

  5. win7下.NET 2.0未在web服务器上注册的问题(转)

    转自:http://blog.sina.com.cn/s/blog_6d15b547010192hx.html 电脑装了win7操作系统,装上vs2008后运行dotnetnuke项目后出现" ...

  6. ubuntu 14.04.02 LTS 启动项误写入 /dev/sda1 (win 7 loader) 修复

    问题描述: 在win7下安装Ubuntu14.04,由于启动项 /boot loader 安装位置错误(/dev/sda1 (win 7 loader) )导致无法进入Windows(在GRUB界面能 ...

  7. js 表达式与运算符 详解(上)

    表达式: 表达式是用于JavaScript脚本运行时进行计算的式子,可以包含常量.变量.运算符 <script> var r = 2 var pi = 3.14 var circle = ...

  8. ng的数据绑定

    ng创建了一个自己的事件循环,当浏览器事件(常用的dom事件,xhr事件等)发生时,对DOM对应的数据进行检查,若更改了,则标记为脏值,并进入更新循环,修改对应的(可能是多个) DOM的参数.这样就实 ...

  9. js 去除字符串开头或者前几个字符。slice 也可以用于截取某一部分

    摘草自w3 slice() 方法可从已有的数组中返回选定的元素. 语法 arrayObject.slice(start,end) 参数 描述 start 必需.规定从何处开始选取.如果是负数,那么它规 ...

  10. Python - 多元组(tuple)

    声明一个多元组 (4, 5, 6) 这是列表 [4, 5, 6] 与列表不一样在于多元组使用() 来组织元素而list使用方括号[] 而且多元组不能更改,用于当你的数组不想像list一样会被更改时就使 ...