欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Bucardo5實(shí)現(xiàn)PostgreSQL的主數(shù)據(jù)庫復(fù)制

 更新時(shí)間:2015年04月21日 15:26:14   投稿:goldensun  
這篇文章主要介紹了使用Bucardo5實(shí)現(xiàn)PostgreSQL的主數(shù)據(jù)庫復(fù)制,作者基于AWS給出演示,需要的朋友可以參考下

下一代異步多個(gè)主數(shù)據(jù)庫復(fù)制系統(tǒng)Bucardo 5發(fā)布了。這個(gè)版本刪除了老版本中兩個(gè)數(shù)據(jù)庫源的限制,允許有更多的源數(shù)據(jù)庫(即主數(shù)據(jù)庫)以及更多的目標(biāo)數(shù)據(jù)庫(即備份數(shù)據(jù)庫)。Bucardo還可以復(fù)制到其他類型的目標(biāo)數(shù)據(jù)庫,其中包括MySQL、MariaDB、Oracle、SQLite、MongoDB和Redis。Bucardo已經(jīng)被完全重寫了,這個(gè)版本比前一版本Bucardo 4功能更強(qiáng)大,效率更高。你可以訪問Bucardo wiki查找最新版本的Bucardo。

這篇文章快速的介紹了一下Bucardo。以后的博客文章將會介紹Bucardo的強(qiáng)大功能,現(xiàn)在我們將介紹如何簡單地實(shí)現(xiàn)多主數(shù)據(jù)庫復(fù)制。


為了演示方便,我使用了亞馬遜Web服務(wù)(AWS)提供的可快速創(chuàng)建、隨意使用的服務(wù)器,即運(yùn)行Amazon Linux的基本t1.micro服務(wù)器。如果你按照提示繼續(xù)的話,它將免費(fèi)而且簡單地給你創(chuàng)建一個(gè)服務(wù)器實(shí)例。一旦實(shí)例創(chuàng)建成功,我們就可以使用ec2-user賬戶通過SSH協(xié)議登陸到服務(wù)器,這時(shí)就可以開始安裝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

此時(shí),我們?nèi)匀徊荒芷诖赌銈€(gè)PostgreSQL,因?yàn)檫@個(gè)發(fā)布版的socket通信目錄使用的是/var/run/postgresql和/tmp。我們調(diào)整了第一個(gè)目錄的權(quán)限后就可以啟動(dòng)PostgreSQL了,然后創(chuàng)建第一個(gè)測試數(shù)據(jù)庫:
 

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


接下來我們就可以進(jìn)行數(shù)據(jù)庫復(fù)制了!為了得到樣例數(shù)據(jù),我使用了開放源代碼的Shakespeare項(xiàng)目。它有一個(gè)易于裝載的小型的、可任意使用的、簡單的數(shù)據(jù)庫模式。github上的這個(gè)小型項(xiàng)目就包含了一個(gè)現(xiàn)成的PostgreSQL數(shù)據(jù)庫模式,現(xiàn)在我們將可以把它裝載到新的數(shù)據(jù)庫了:
 

$ 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

我們打算創(chuàng)建這個(gè)數(shù)據(jù)庫的副本,這些副本可被當(dāng)作其他數(shù)據(jù)源。換個(gè)說法,這些服務(wù)器擁有相同的數(shù)據(jù)而且可以寫入。實(shí)現(xiàn)這些非常簡單:
 

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

Bucardo需要安裝一些依賴包。如果你安裝的操作系統(tǒng)發(fā)布不同,那么你可能要安裝的依賴包就不同:下面是我寫這篇文章的時(shí)候Amazon Linux需要安裝的依賴包。(如果幸運(yùn)的話,你的發(fā)布包可能已經(jīng)包含了Bucardo,在這種情況下,下面的執(zhí)行步驟就不需要執(zhí)行了,你只要運(yùn)行"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


在這個(gè)系統(tǒng)的yum軟件倉庫里不包含Perl模塊DBIx::Safe,因此我們需要通過CPAN來安裝這個(gè)模塊。一旦上面的所有依賴都安裝成功,這時(shí)我們就準(zhǔn)備安裝Bucardo。我們將獲取官方壓縮包,驗(yàn)證、解壓,接著安裝:
 

$ 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文件(設(shè)置某些全局信息的文件)進(jìn)行某些小的調(diào)整。然后運(yùn)行"bucardo install",這條命令將創(chuàng)建bucardo的主數(shù)據(jù)庫,其中包含Bucardo服務(wù)進(jìn)程所需的信息:
 

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


現(xiàn)在已經(jīng)安裝好Bucardo,接下來就準(zhǔn)備復(fù)制了。此時(shí),我們有了三個(gè)可以彼此復(fù)制的數(shù)據(jù)庫。下面我們只使用了兩條命令就可以實(shí)現(xiàn)三數(shù)據(jù)庫彼此復(fù)制:
 

 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如何連接到三個(gè)數(shù)據(jù)庫,我們告訴Bucardo數(shù)據(jù)庫的名字,然后Bucardo把這三個(gè)數(shù)據(jù)庫看作(s1,s2,s3)。你還可以指定端口和主機(jī),不過在這個(gè)例子里,默認(rèn)的端口為5432,而且不需要主機(jī)(采用的是Unix Socket通信機(jī)制)。


第二條命令創(chuàng)建了一個(gè)已命名的復(fù)制系統(tǒng),其sync名稱為bard。Bucardo需要知道復(fù)制到哪兒和如何復(fù)制,因此我們告訴它使用三個(gè)數(shù)據(jù)庫s1,s2和s3。每一個(gè)數(shù)據(jù)庫都可以作為源數(shù)據(jù)庫,因此我們給它們添加了這樣的信息。最后我們需要知道要復(fù)制什么。在這個(gè)例子里,我們需要復(fù)制的是所有表(或者更精確點(diǎn),復(fù)制具有主鍵或者唯一索引的所有數(shù)據(jù)庫)。注意: Bucardo總是把數(shù)據(jù)庫和表放在命名組里-在這個(gè)例子里我們只是硬編碼其為10,然而通常這個(gè)值是表格視圖控制器數(shù)組的長度?,F(xiàn)在例子里,這一切都是自動(dòng)進(jìn)行的,dbgroup和relgroup都是以sync的名字命名的。

我們驗(yàn)證一下復(fù)制是否運(yùn)行,即檢查一下更新行是否復(fù)制到sync里包含的所有數(shù)據(jù)庫了:
 

$ 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",看看是否有復(fù)制操作:
 

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


上面出現(xiàn)了兩條delete和兩條insert命令,這是因?yàn)楦乱恍幸馕吨谄渌麅蓚€(gè)數(shù)據(jù)庫上首先運(yùn)行的是delete,然后才運(yùn)行insert(技術(shù)上采用的COPY)。接下來我們看看Bucardo是怎么處理沖突的。我們將對所有服務(wù)器上的同一行進(jìn)行更新,這樣就會產(chǎn)生沖突:
 

$ 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

查看日志表明確實(shí)存在沖突,而且也很好的解決了沖突。默認(rèn)的沖突解決方案表明:最后一個(gè)更新的數(shù)據(jù)庫是獲勝者,現(xiàn)在所有三個(gè)數(shù)據(jù)庫具有與最后一個(gè)更新數(shù)據(jù)庫相同的行。
 

$ 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

我們開發(fā)這個(gè)示例的時(shí)候,Bucardo有時(shí)運(yùn)行的非??欤詻]有發(fā)生沖突。也就是說,因?yàn)楦聲r(shí)順序執(zhí)行的。所以在下一個(gè)更新之前,存在一個(gè)時(shí)間窗口可以讓Bucardo完成更新的復(fù)制。另外,“暫停sync"功能也非常方便,只要在你需要暫時(shí)停止運(yùn)行sync的情況下,運(yùn)行下面命令即可:
 

$ 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比我們在這兒演示的功能多很多。以后的博客文章里我們將包含它可以完成的其他功能,從復(fù)制到比如Oracle、Mysql或者M(jìn)ongoDB等非PostgreSQL系統(tǒng)到使用自定義的沖突解決方案。以及復(fù)制時(shí)對正在運(yùn)行的數(shù)據(jù)實(shí)行轉(zhuǎn)換。如果你有任何問題,請?jiān)谙旅娴脑u論里說明,或者寫一封短信給Bucardo郵件列表bucardo-general@bucardo.org。

這么多年,如果沒有許多人貢獻(xiàn)代碼、提出漏洞、測試Bucardo以及詢問(或者回答?。┲卮髥栴},就不可能有這個(gè)重大版本的發(fā)布。查看 Changes文件,你就可以看到部分貢獻(xiàn)者的列表。謝謝你們所有人,特別感謝Jon Jensen,是他在很久之前就開啟了這個(gè)項(xiàng)目。

相關(guān)文章

  • 數(shù)據(jù)庫之Hive概論和架構(gòu)和基本操作

    數(shù)據(jù)庫之Hive概論和架構(gòu)和基本操作

    Hive是一個(gè)構(gòu)建在Hadoop上的數(shù)據(jù)倉庫框架,最初,Hive是由Facebook開發(fā),后臺移交由Apache軟件基金會開發(fā),并做為一個(gè)Apache開源項(xiàng)目,感興趣的同學(xué)可以參考閱讀
    2023-04-04
  • 設(shè)置CA證書來強(qiáng)化PostgreSQL的安全性的教程

    設(shè)置CA證書來強(qiáng)化PostgreSQL的安全性的教程

    這篇文章主要介紹了設(shè)置CA證書來強(qiáng)化PostgreSQL的安全性的教程,主要用到了CA私鑰,需要的朋友可以參考下
    2015-04-04
  • 簡單聊一聊SQL注入及防止SQL注入

    簡單聊一聊SQL注入及防止SQL注入

    眾所周知SQL注入是比較常見的網(wǎng)絡(luò)攻擊方式之一,它不是利用操作系統(tǒng)的BUG來實(shí)現(xiàn)攻擊,而是針對程序員編程時(shí)的疏忽,通過SQL語句,實(shí)現(xiàn)無帳號登錄,下面這篇文章主要給大家介紹了關(guān)于SQL注入及防止SQL注入的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • SQL注入篇學(xué)習(xí)之盲注/寬字節(jié)注入

    SQL注入篇學(xué)習(xí)之盲注/寬字節(jié)注入

    盲注是注入的一種,指的是在不知道數(shù)據(jù)庫返回值的情況下對數(shù)據(jù)中的內(nèi)容進(jìn)行猜測,實(shí)施SQL注入,下面這篇文章主要給大家介紹了關(guān)于SQL注入篇之盲注/寬字節(jié)注入的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • SQL利用Function創(chuàng)建長整形的唯一ID示例代碼

    SQL利用Function創(chuàng)建長整形的唯一ID示例代碼

    這篇文章主要給大家介紹了關(guān)于SQL利用Function創(chuàng)建長整形的唯一ID的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • MySQL mysqldump命令使用詳解

    MySQL mysqldump命令使用詳解

    MySQL有很多可以導(dǎo)入數(shù)據(jù)的方法,然而這些只是數(shù)據(jù)傳輸中的一半,另外的一般是從MySQL數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù)。有許多的原因我們需要導(dǎo)出數(shù)據(jù)。一個(gè)重要的原因是用于備份數(shù)據(jù)庫。數(shù)據(jù)的造價(jià)常常是昂貴的,需要謹(jǐn)慎處理它們。
    2006-12-12
  • influxdb數(shù)據(jù)庫常用命令及SpringBoot整合

    influxdb數(shù)據(jù)庫常用命令及SpringBoot整合

    這篇文章主要介紹了influxdb數(shù)據(jù)庫常用命令及SpringBoot整合,Influxdb是一個(gè)開源的分布式時(shí)序、時(shí)間和指標(biāo)數(shù)據(jù)庫,使用go語言編寫,無需外部依賴,需要的朋友可以參考下
    2023-07-07
  • 數(shù)據(jù)庫語言分類DDL、DCL、DML詳解

    數(shù)據(jù)庫語言分類DDL、DCL、DML詳解

    今天小編就為大家分享一篇關(guān)于數(shù)據(jù)庫語言分類DDL、DCL、DML詳解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 使用SQL Mail收發(fā)和自動(dòng)處理郵件中的擴(kuò)展存儲過程簡介

    使用SQL Mail收發(fā)和自動(dòng)處理郵件中的擴(kuò)展存儲過程簡介

    使用SQL Mail收發(fā)和自動(dòng)處理郵件中的擴(kuò)展存儲過程簡介...
    2006-12-12
  • neo4j實(shí)現(xiàn)創(chuàng)建多個(gè)數(shù)據(jù)庫

    neo4j實(shí)現(xiàn)創(chuàng)建多個(gè)數(shù)據(jù)庫

    這篇文章主要介紹了neo4j實(shí)現(xiàn)創(chuàng)建多個(gè)數(shù)據(jù)庫方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02

最新評論