亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > PostgreSQL > 正文

使用Bucardo5實現PostgreSQL的主數據庫復制

2020-10-29 21:49:53
字體:
來源:轉載
供稿:網友

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

這篇文章快速的介紹了一下Bucardo。以后的博客文章將會介紹Bucardo的強大功能,現在我們將介紹如何簡單地實現多主數據庫復制。


為了演示方便,我使用了亞馬遜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 --quietCreating superuser 'bucardo'


現在已經安裝好Bucardo,接下來就準備復制了。此時,我們有了三個可以彼此復制的數據庫。下面我們只使用了兩條命令就可以實現三數據庫彼此復制:
 

 bucardo add dbs s1,s2,s3 dbname=shake1,shake2,shake3Added databases "s1","s2","s3"$ bucardo add sync bard dbs=s1:source,s2:source,s3:source tables=allAdded 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,然而通常這個值是表格視圖控制器數組的長度?,F在例子里,這一切都是自動進行的,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'"; doneUPDATE 1UPDATE 1UPDATE 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 bardSyncs 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 bardSyncs 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比我們在這兒演示的功能多很多。以后的博客文章里我們將包含它可以完成的其他功能,從復制到比如Oracle、Mysql或者MongoDB等非PostgreSQL系統到使用自定義的沖突解決方案。以及復制時對正在運行的數據實行轉換。如果你有任何問題,請在下面的評論里說明,或者寫一封短信給Bucardo郵件列表bucardo-general@bucardo.org。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩视频在线免费| 欧美性猛交xxxx免费看| 日韩电影中文 亚洲精品乱码| 国产精品日日摸夜夜添夜夜av| 韩剧1988免费观看全集| 欧美一区二区色| 久久久久国产精品免费| 国产成人综合精品在线| 日韩美女视频中文字幕| 亚洲综合av影视| 97精品国产91久久久久久| 亚洲精品美女在线| 亚洲人在线观看| 久久久久久噜噜噜久久久精品| 91国产一区在线| 国产精品日日摸夜夜添夜夜av| 欧美日韩一区二区免费视频| 国产精品va在线播放| 青草青草久热精品视频在线观看| 亚洲男人天堂网| 国产色视频一区| 亚洲品质视频自拍网| 亚洲电影天堂av| 国产999精品视频| 国产精品中文字幕久久久| 国产91av在线| 久久影视电视剧免费网站| 九色成人免费视频| 久久午夜a级毛片| 亚洲欧美国产日韩中文字幕| 欧美视频在线免费| 欧美午夜精品久久久久久浪潮| 国产色视频一区| 亚洲第一福利网站| 亚洲无限av看| 久久免费观看视频| 精品视频久久久久久久| 中文字幕v亚洲ⅴv天堂| 欧美成人一区在线| 在线观看免费高清视频97| 国产成人综合一区二区三区| 最近2019好看的中文字幕免费| 久久99精品视频一区97| 中文字幕久热精品视频在线| 性日韩欧美在线视频| 亚洲精品视频在线播放| 成人a在线观看| 亚洲嫩模很污视频| 亚洲a区在线视频| 日韩成人小视频| 欧美福利视频在线观看| 国产成人久久久精品一区| 久久伊人色综合| 国产偷亚洲偷欧美偷精品| 久久av.com| 亚洲天堂影视av| 日韩视频亚洲视频| 国产人妖伪娘一区91| 亚洲第一页中文字幕| 欧美激情一二区| 尤物九九久久国产精品的特点| 国产在线高清精品| 国产99久久精品一区二区| 国模视频一区二区三区| 欧美又大粗又爽又黄大片视频| 久久亚洲影音av资源网| 一区二区福利视频| 在线播放日韩av| 欧美成人一区在线| 欧美日韩免费在线| 中文字幕欧美亚洲| 欧美裸体xxxx| 国产精品视频区| 亚洲欧美三级伦理| 亚洲一区二区久久久久久久| 91大神在线播放精品| 欧洲亚洲免费视频| 日韩精品免费看| 成人国产精品久久久| 亚洲精品网站在线播放gif| 久久久久久久一区二区| 国产成人极品视频| 国产欧美亚洲视频| 精品视频在线播放免| 日本19禁啪啪免费观看www| 日本免费久久高清视频| 欧美激情精品久久久久| 中文字幕亚洲第一| 欧美日韩国产色视频| 在线视频日本亚洲性| 一本大道久久加勒比香蕉| 欧美一区视频在线| 丝袜美腿精品国产二区| 亚洲国产日韩欧美在线图片| 欧美香蕉大胸在线视频观看| 日韩欧美福利视频| 亚洲专区国产精品| 亚洲国产精品热久久| 日韩精品欧美激情| 92看片淫黄大片看国产片| 亚洲国产成人精品一区二区| 国产精品久久久久7777婷婷| 日韩av电影免费观看高清| 欧美精品videosex牲欧美| 亚洲图片欧洲图片av| 亚洲国产精品电影在线观看| 在线不卡国产精品| 国产精品电影网站| 日韩大陆毛片av| 色综合久久天天综线观看| 亚洲人成在线观看网站高清| 欧美成年人视频网站| 国产精品高潮呻吟久久av黑人| 一区二区三区美女xx视频| 韩国精品久久久999| 亚洲视频日韩精品| 日韩电视剧在线观看免费网站| 欧美黑人xxx| 亚洲va欧美va国产综合剧情| 国模精品系列视频| 国产美女精品免费电影| 日日狠狠久久偷偷四色综合免费| 91久久在线视频| 国产精品露脸自拍| 2019av中文字幕| 欧美巨猛xxxx猛交黑人97人| 亚洲成人亚洲激情| 欧美成人一区在线| 亚洲成人激情视频| 亚洲自拍偷拍色片视频| 在线观看国产欧美| 91在线视频九色| 欧美在线观看网站| 中文字幕在线看视频国产欧美在线看完整| 亚洲网在线观看| 日韩激情在线视频| 欧美日韩免费在线观看| 亚洲www永久成人夜色| 91色琪琪电影亚洲精品久久| 欧美日韩国产在线| 日韩经典中文字幕| 久久影视电视剧免费网站| 国产99视频精品免视看7| 国模精品系列视频| 国产在线观看精品一区二区三区| 久久天天躁狠狠躁老女人| 一本一本久久a久久精品牛牛影视| 国产日韩欧美在线播放| 日日摸夜夜添一区| 精品成人乱色一区二区| 91中文精品字幕在线视频| 美女视频黄免费的亚洲男人天堂| 国内精品视频一区| 成人写真视频福利网| 精品国产精品自拍| 在线观看国产精品91| 精品福利一区二区| 精品日韩中文字幕| 欧美一级电影免费在线观看| 日韩欧美中文第一页| 亚洲大胆人体视频| 欧美激情久久久久| 国产一区二区三区日韩欧美| 欧美性xxxx极品hd满灌|