返回顶部
首页 > 资讯 > 数据库 >使用Bucardo5怎么实现PostgreSQL主数据库复制
  • 677
分享到

使用Bucardo5怎么实现PostgreSQL主数据库复制

2024-04-02 19:04:59 677人浏览 独家记忆
摘要

这期内容当中小编将会给大家带来有关使用Bucardo5怎么实现postgresql主数据库复制,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。为了演示方便,我使用了亚马逊W

这期内容当中小编将会给大家带来有关使用Bucardo5怎么实现postgresql数据库复制,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

为了演示方便,我使用了亚马逊WEB服务(AWS)提供的可快速创建、随意使用的服务器,即运行Amazon linux的基本t1.micro服务器。如果你按照提示继续的话,它将免费而且简单地给你创建一个服务器实例。一旦实例创建成功,我们就可以使用ec2-user账户通过ssh协议登陆到服务器,这时就可以开始安装Postgresql和Bucardo了。
 

# Always a Good idea:
$ sudo yum update
# This also installs other postgresql packages:
$ sudo yum install postgresql-plperl
# Create a new Postgres cluster:
$ initdb btest

此时,我们仍然不能期待哦你个PostgreSQL,因为这个发布版的Socket通信目录使用的是/var/run/postgresql和/tmp。我们调整了第一个目录的权限后就可以启动PostgreSQL了,然后创建第一个测试数据库
 

$ sudo chmod 777 /var/run/postgresql
$ pg_ctl -D btest -l logfile start
$ createdb shake1


接下来我们就可以进行数据库复制了!为了得到样例数据,我使用了开放源代码的Shakespeare项目。它有一个易于装载的小型的、可任意使用的、简单的数据库模式。GitHub上的这个小型项目就包含了一个现成的PostgreSQL数据库模式,现在我们将可以把它装载到新的数据库了:
 

$ sudo yum install git
$ git clone -q https://github.com/catherinedevlin/opensourceshakespeare.git
$ psql shake1 -q -f opensourceshakespeare/shakespeare.sql
# You can safely ignore the 'role does not exist' errors

我们打算创建这个数据库的副本,这些副本可被当作其他数据源。换个说法,这些服务器拥有相同的数据而且可以写入。实现这些非常简单:
 

$ createdb shake2 -T shake1
$ createdb shake3 -T shake1

Bucardo需要安装一些依赖包。如果你安装的操作系统发布不同,那么你可能要安装的依赖包就不同:下面是我写这篇文章的时候Amazon Linux需要安装的依赖包。(如果幸运的话,你的发布包可能已经包含了Bucardo,在这种情况下,下面的执行步骤就不需要执行了,你只要运行"yum install bucard"就可以了-不过要确定一下你使用的是版本5或者更好的版本!(通过yum info bucardo查看))
 

$ sudo yum install perl-ExtUtils-MakeMaker perl-DBD-Pg \
> perl-Encode-Locale perl-Sys-Syslog perl-boolean \
> perl-Time-HiRes perl-Test-Simple perl-Pod-Parser
$ sudo yum install cpan
$ echo y | cpan DBIx::Safe


在这个系统的yum软件仓库里不包含Perl模块DBIx::Safe,因此我们需要通过CPAN来安装这个模块。一旦上面的所有依赖都安装成功,这时我们就准备安装Bucardo。我们将获取官方压缩包,验证、解压,接着安装:
 

$ wget -nv Http://bucardo.org/Bucardo.tar.gz
$ wget -nv http://bucardo.org/Bucardo.tar.gz.asc
$ gpg -q --keyserver pgp.mit.edu --recv-key 14964AC8
$ gpg --verify Bucardo.tar.gz.asc
$ tar xfz Bucardo.tar.gz $ ln -s Bucardo-5.0.0 bucardo
$ cd bucardo
$ perl Makefile.PL
$ make
$ sudo make install

我们对bucardorc文件(设置某些全局信息的文件)进行某些小的调整。然后运行"bucardo install",这条命令将创建bucardo的主数据库,其中包含Bucardo服务进程所需的信息:
 

$ mkdir pid
$ echo -e "piddir=pid\nlogdest=." > .bucardorc
$ bucardo install --batch --quiet
Creating superuser 'bucardo'


现在已经安装好Bucardo,接下来就准备复制了。此时,我们有了三个可以彼此复制的数据库。下面我们只使用了两条命令就可以实现三数据库彼此复制:
 

 bucardo add dbs s1,s2,s3 dbname=shake1,shake2,shake3
Added databases "s1","s2","s3"
$ bucardo add sync bard dbs=s1:source,s2:source,s3:source tables=all
Added sync "bard"
Created a new relgroup named "bard"
Created a new dbgroup named "bard"
 Added table "public.chapter"
 Added table "public.character"
 Added table "public.character_work"
 Added table "public.paragraph"
 Added table "public.WordfORM"
 Added table "public.work"

第一条命令,我们告诉Bucardo如何连接到三个数据库,我们告诉Bucardo数据库的名字,然后Bucardo把这三个数据库看作(s1,s2,s3)。你还可以指定端口和主机,不过在这个例子里,默认的端口为5432,而且不需要主机(采用的是Unix Socket通信机制)。


第二条命令创建了一个已命名的复制系统,其sync名称为bard。Bucardo需要知道复制到哪儿和如何复制,因此我们告诉它使用三个数据库s1,s2和s3。每一个数据库都可以作为源数据库,因此我们给它们添加了这样的信息。最后我们需要知道要复制什么。在这个例子里,我们需要复制的是所有表(或者更精确点,复制具有主键或者唯一索引的所有数据库)。注意: Bucardo总是把数据库和表放在命名组里-在这个例子里我们只是硬编码其为10,然而通常这个值是表格视图控制器数组的长度。现在例子里,这一切都是自动进行的,dbgroup和relgroup都是以sync的名字命名的。

我们验证一下复制是否运行,即检查一下更新行是否复制到sync里包含的所有数据库了:
 

$ bucardo start
$ psql shake1 -c \
> "update character set speechcount=123 where charname='Hamlet'"
UPDATE 1
$ for i in {1,2,3}; do psql shake$i -tc "select \
> current_database(), speechcount from character \
> where charname='Hamlet'"; done | grep s
 shake1    |   123
 shake2    |   123
 shake3    |   123

我们还可以查看Bucardo的日志文件"log.bucardo",看看是否有复制操作:
 

$ tail -2 log.bucardo
(25181) KID (bard) Delta count for s1.public."character": 1
(25181) KID (bard) Totals: deletes=2 inserts=2 conflicts=0


上面出现了两条delete和两条insert命令,这是因为更新一行意味着在其他两个数据库上首先运行的是delete,然后才运行insert(技术上采用的COPY)。接下来我们看看Bucardo是怎么处理冲突的。我们将对所有服务器上的同一行进行更新,这样就会产生冲突:
 

$ for i in {1,2,3}; do psql shake$i -tc \
> "update character set speechcount=$i$i$i \
> where charname='Hamlet'"; done
UPDATE 1
UPDATE 1
UPDATE 1

查看日志表明确实存在冲突,而且也很好的解决了冲突。默认的冲突解决方案表明:最后一个更新的数据库是获胜者,现在所有三个数据库具有与最后一个更新数据库相同的行。
 

$ tail log.bucardo
(25181) KID (bard) Delta count for s1.public."character": 1
(25181) KID (bard) Delta count for s2.public."character": 1
(25181) KID (bard) Delta count for s3.public."character": 1
(25181) KID (bard) Conflicts for public."character": 1
(25181) KID (bard) Conflicts have been resolved
(25181) KID (bard) Totals: deletes=2 inserts=2 conflicts=1
 
$ for i in {1,2,3}; do psql shake$i -tc \
> "select current_database(), speechcount \
> from character where charname='Hamlet'"; done | grep s
 shake1    |   333
 shake2    |   333
 shake3    |   333

我们开发这个示例的时候,Bucardo有时运行的非常快,所以没有发生冲突。也就是说,因为更新时顺序执行的。所以在下一个更新之前,存在一个时间窗口可以让Bucardo完成更新的复制。另外,“暂停sync"功能也非常方便,只要在你需要暂时停止运行sync的情况下,运行下面命令即可:
 

$ bucardo pause bard
Syncs paused: bard
$ psql shake1 -c "update character set speechcount=1234 where charname='Hamlet'"
UPDATE 1
$ psql shake2 -c "update character set speechcount=4321 where charname='Hamlet'"
UPDATE 1
$ bucardo resume bard
Syncs resumed: bard
 
$ tail log.bucardo
(27344) KID (bard) Delta count for s1.public."character": 1
(27344) KID (bard) Delta count for s2.public."character": 1
(27344) KID (bard) Conflicts for public."character": 1
(27344) KID (bard) Conflicts have been resolved
(27344) KID (bard) Totals: deletes=2 inserts=2 conflicts=1


Bucardo 5比我们在这儿演示的功能多很多。以后的博客文章里我们将包含它可以完成的其他功能,从复制到比如oracleMysql或者mongoDB等非PostgreSQL系统到使用自定义的冲突解决方案。以及复制时对正在运行的数据实行转换。如果你有任何问题,请在下面的评论里说明,或者写一封短信给Bucardo邮件列表bucardo-general@bucardo.org。

上述就是小编为大家分享的使用Bucardo5怎么实现PostgreSQL主数据库复制了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 使用Bucardo5怎么实现PostgreSQL主数据库复制

本文链接: https://lsjlt.com/news/56971.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用Bucardo5怎么实现PostgreSQL主数据库复制
    这期内容当中小编将会给大家带来有关使用Bucardo5怎么实现PostgreSQL主数据库复制,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。为了演示方便,我使用了亚马逊W...
    99+
    2024-04-02
  • 怎么使用PHP实现MongoDB数据库主从复制
    这篇文章主要介绍“怎么使用PHP实现MongoDB数据库主从复制”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用PHP实现MongoDB数据库主从复制”文章能帮助大家解决问题。MongoDB主...
    99+
    2023-07-06
  • 怎么使用PHP实现Memcached数据库主从复制
    本篇内容主要讲解“怎么使用PHP实现Memcached数据库主从复制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用PHP实现Memcached数据库主从复制”吧!主从模式介绍主从模式是M...
    99+
    2023-07-06
  • 怎么使用PHP实现数据库主从复制故障恢复
    这篇文章主要介绍“怎么使用PHP实现数据库主从复制故障恢复”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用PHP实现数据库主从复制故障恢复”文章能帮助大家解决问题。主从复制简介数据库主从复制是...
    99+
    2023-07-06
  • 数据库实现主从复制
    MySQL的主从复制,依赖于二进制日志的拉取和sql线程的转换。确认主备关系后,IO线程负责将主库的二进制日志拉取到备库,由SQL线程将二进制日志回读成具体的操作等。主备搭建主库的配置 vi /etc/my.cnf [mysqld] #在...
    99+
    2016-02-20
    数据库实现主从复制 数据库入门 数据库基础教程 数据库 mysql
  • MySQL数据库中怎么实现多主复制
    这篇文章给大家介绍MySQL数据库中怎么实现多主复制,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。MySQL 管理每个复制通道,都是通过一个Master_info类(sql/rpl_m...
    99+
    2024-04-02
  • 怎么使用PHP实现数据库主从复制故障切换
    今天小编给大家分享一下怎么使用PHP实现数据库主从复制故障切换的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、主从复制的基...
    99+
    2023-07-06
  • 如何使用PHP实现Redis数据库主从复制
    这篇文章主要介绍“如何使用PHP实现Redis数据库主从复制”,在日常操作中,相信很多人在如何使用PHP实现Redis数据库主从复制问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用PHP实现Redis数...
    99+
    2023-07-06
  • postgresql数据库|数据库实操----表复制详解
    前言: 通常情况下,我们对数据库的增删改查的时候,为了确保数据的安全,需要备份表,那么,一种方法是通过pg_dump 这个工具做SQL转储操作,此方法比较复杂,麻烦,但十分的安全,可靠性也基本是百分百,但对于大表备份,十分耗时并且可能有锁表...
    99+
    2023-10-27
    数据库 postgresql mysql oracle 运维
  • MongoDB数据库中怎么实现M-S主从复制
    本篇文章为大家展示了MongoDB数据库中怎么实现M-S主从复制,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。[root@localhost ~]#&nb...
    99+
    2024-04-02
  • postgresql怎么恢复数据库
    要恢复 PostgreSQL 数据库,可以按照以下步骤操作: 确保 PostgreSQL 服务已经启动,并且数据库文件在正确的目...
    99+
    2024-04-17
    postgresql
  • Mysql数据库主从复制的实现原理
    这篇文章主要介绍“Mysql数据库主从复制的实现原理”,在日常操作中,相信很多人在Mysql数据库主从复制的实现原理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mysql数...
    99+
    2024-04-02
  • PHP实现数据库主从复制的方法
    随着业务的不断发展和业务量的不断增加,单个数据库的性能往往难以满足需求,因此数据库集群成为了一个非常重要的方向。在数据库集群中,主从复制是一个非常常见且重要的技术,通过主从复制可以将主数据库中的数据实时同步到从数据库中,保证数据的安全性和可...
    99+
    2023-05-17
    数据库 PHP 主从复制
  • sqllite数据库中怎么实现表复制
    这篇文章给大家介绍sqllite数据库中怎么实现表复制,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.通过sql lite打开目的库,然后选中目的库右键,弹出有个date trans...
    99+
    2024-04-02
  • Mysql数据库的主从复制与读写分离怎么实现
    这篇文章主要介绍“Mysql数据库的主从复制与读写分离怎么实现”,在日常操作中,相信很多人在Mysql数据库的主从复制与读写分离怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mysql数据库的主从复制...
    99+
    2023-06-21
  • PHP实现Memcached数据库主从复制的方法
    Memcached是一个开源的高性能分布式内存对象缓存系统,可用于加快web应用程序,尤其是在大规模数据缓存方面表现良好。对于该系统而言,主从复制是一种非常重要的功能,它可以用于保证数据的可靠性和高可用性。本文将介绍如何使用PHP实现Mem...
    99+
    2023-05-15
    PHP memcached 主从复制
  • PHP实现Redis数据库主从复制的方法
    近年来随着Web应用的快速发展,数据库的处理量也越来越大,性能的要求也越来越高,所以分布式数据库的需求也日渐增加。而Redis是一种流行的NoSQL数据库,支持多种分布式方案,其中主从复制是一种常用且实现起来比较简单的分布式方案。本文将介绍...
    99+
    2023-05-15
    PHP redis 主从复制
  • PHP实现MongoDB数据库主从复制的方法
    在现代的网络应用程序中,数据处理和管理是至关重要的任务。随着Web应用程序变得越来越复杂,需要处理海量数据,存储和处理这些数据的数据库也越来越多了。MongoDB是一种NoSQL数据库,在Web应用程序中被广泛使用。与MySQL等关系型数据...
    99+
    2023-05-16
    PHP MongoDB 主从复制
  • PHP实现Oracle数据库主从复制的方法
    随着互联网应用的不断发展,数据库的稳定性和性能需求越来越高。为了保证数据库的高可用性和数据安全性,数据库主从复制已经成为了一种比较普遍的解决方案。在本文中,我们将介绍如何使用PHP实现Oracle数据库主从复制。一、主从复制介绍数据库主从复...
    99+
    2023-05-16
    PHP 主从复制 Oracle数据库
  • 使用Docker怎么实现Redis主从复制
    今天就跟大家聊聊有关使用Docker怎么实现Redis主从复制,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。安装docker的命令如下所示curl -sSL ht...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作