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

首頁 > 數據庫 > PostgreSQL > 正文

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

2020-03-12 23:53:47
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了使用Bucardo5實現PostgreSQL的主數據庫復制,作者基于AWS給出演示,需要的朋友可以參考下

下一代異步多個主數據庫復制系統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了。

 

 
  1. # Always a good idea: 
  2. $ sudo yum update 
  3. # This also installs other postgresql packages: 
  4. $ sudo yum install postgresql-plperl 
  5. Create a new Postgres cluster: 
  6. $ initdb btest 

此時,我們仍然不能期待哦你個PostgreSQL,因為這個發布版的socket通信目錄使用的是/var/run/postgresql和/tmp。我們調整了第一個目錄的權限后就可以啟動PostgreSQL了,然后創建第一個測試數據庫:

 

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

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

 

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

我們打算創建這個數據庫的副本,這些副本可被當作其他數據源。換個說法,這些服務器擁有相同的數據而且可以寫入。實現這些非常簡單:

 

  
  1. $ createdb shake2 -T shake1 
  2. $ createdb shake3 -T shake1 

Bucardo需要安裝一些依賴包。如果你安裝的操作系統發布不同,那么你可能要安裝的依賴包就不同:下面是我寫這篇文章的時候Amazon Linux需要安裝的依賴包。(如果幸運的話,你的發布包可能已經包含了Bucardo,在這種情況下,下面的執行步驟就不需要執行了,你只要運行"yum install bucard"就可以了-不過要確定一下你使用的是版本5或者更好的版本!(通過yum info bucardo查看))

 

 
  1. $ sudo yum install perl-ExtUtils-MakeMaker perl-DBD-Pg / 
  2. > perl-Encode-Locale perl-Sys-Syslog perl-boolean / 
  3. > perl-Time-HiRes perl-Test-Simple perl-Pod-Parser 
  4. $ sudo yum install cpan 
  5. $ echo y | cpan DBIx::Safe 

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

 

 
  1. $ wget -nv http://bucardo.org/Bucardo.tar.gz 
  2. $ wget -nv http://bucardo.org/Bucardo.tar.gz.asc 
  3. $ gpg -q --keyserver pgp.mit.edu --recv-key 14964AC8 
  4. $ gpg --verify Bucardo.tar.gz.asc 
  5. $ tar xfz Bucardo.tar.gz $ ln -s Bucardo-5.0.0 bucardo 
  6. $ cd bucardo 
  7. $ perl Makefile.PL 
  8. $ make 
  9. $ sudo make install 

我們對bucardorc文件(設置某些全局信息的文件)進行某些小的調整。然后運行"bucardo install",這條命令將創建bucardo的主數據庫,其中包含Bucardo服務進程所需的信息:

 

 
  1. $ mkdir pid 
  2. $ echo -e "piddir=pid/nlogdest=." > .bucardorc 
  3. $ bucardo install --batch --quiet 
  4. Creating superuser 'bucardo' 

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

 

 
  1. bucardo add dbs s1,s2,s3 dbname=shake1,shake2,shake3 
  2. Added databases "s1","s2","s3" 
  3. $ bucardo add sync bard dbs=s1:source,s2:source,s3:source tables=all 
  4. Added sync "bard" 
  5. Created a new relgroup named "bard" 
  6. Created a new dbgroup named "bard" 
  7. Added table "public.chapter" 
  8. Added table "public.character" 
  9. Added table "public.character_work" 
  10. Added table "public.paragraph" 
  11. Added table "public.wordform" 
  12. 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里包含的所有數據庫了:

 

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

我們還可以查看Bucardo的日志文件"log.bucardo",看看是否有復制操作:

 

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

上面出現了兩條delete和兩條insert命令,這是因為更新一行意味著在其他兩個數據庫上首先運行的是delete,然后才運行insert(技術上采用的COPY)。接下來我們看看Bucardo是怎么處理沖突的。我們將對所有服務器上的同一行進行更新,這樣就會產生沖突:

 

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

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

 

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

我們開發這個示例的時候,Bucardo有時運行的非常快,所以沒有發生沖突。也就是說,因為更新時順序執行的。所以在下一個更新之前,存在一個時間窗口可以讓Bucardo完成更新的復制。另外,“暫停sync"功能也非常方便,只要在你需要暫時停止運行sync的情況下,運行下面命令即可:

 

 
  1. $ bucardo pause bard 
  2. Syncs paused: bard 
  3. $ psql shake1 -c "update character set speechcount=1234 where charname='Hamlet'" 
  4. UPDATE 1 
  5. $ psql shake2 -c "update character set speechcount=4321 where charname='Hamlet'" 
  6. UPDATE 1 
  7. $ bucardo resume bard 
  8. Syncs resumed: bard 
  9.  
  10. $ tail log.bucardo 
  11. (27344) KID (bard) Delta count for s1.public."character": 1 
  12. (27344) KID (bard) Delta count for s2.public."character": 1 
  13. (27344) KID (bard) Conflicts for public."character": 1 
  14. (27344) KID (bard) Conflicts have been resolved 
  15. (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
国产精品99久久久久久白浆小说| 欧美小视频在线| 欧美猛少妇色xxxxx| 国产成人精品综合| 欧美黄色免费网站| 最近2019中文字幕一页二页| 久久久久久久色| 久久精彩免费视频| 久久精品99久久久香蕉| 亚洲偷欧美偷国内偷| 成人免费看片视频| 亚洲成年人影院在线| 国产精品久久久久久婷婷天堂| 欧美理论片在线观看| 亚洲国产精品电影| 成人观看高清在线观看免费| 日韩欧美精品网站| 成人黄色大片在线免费观看| 亚洲精品久久视频| 欧日韩不卡在线视频| 成人精品福利视频| 欧美激情视频一区二区三区不卡| 欧美日韩另类字幕中文| 国产精品一区二区久久国产| 亚洲精品欧美日韩专区| 欧美黑人极品猛少妇色xxxxx| 日韩一区av在线| 成人深夜直播免费观看| 亚洲自拍欧美色图| 成人精品一区二区三区电影黑人| 国产精品尤物福利片在线观看| 欧美午夜xxx| 成人在线精品视频| 亚洲国产日韩一区| 中文国产成人精品| 亚洲欧美日韩国产中文专区| 国产美女精品视频免费观看| 日韩av成人在线观看| 亚洲午夜精品久久久久久久久久久久| 国内精品小视频在线观看| 91久久久久久| 亚洲欧美成人一区二区在线电影| 欧美亚洲一区在线| 亚洲国内精品视频| 欧美精品手机在线| 成人在线播放av| 欧美黄色性视频| 欧美日韩黄色大片| 日韩欧美国产中文字幕| 啊v视频在线一区二区三区| 欧美亚洲国产日韩2020| 亚洲免费福利视频| 午夜免费在线观看精品视频| 久久精品亚洲一区| 国产精品亚洲综合天堂夜夜| 欧美日韩国产精品| 日韩二区三区在线| 最近2019免费中文字幕视频三| 亚洲国产又黄又爽女人高潮的| 欧美成人午夜剧场免费观看| 国产精品久久久久久久久久三级| 国产有码一区二区| 成人黄色生活片| www日韩中文字幕在线看| 日本免费在线精品| 欧美xxxx18性欧美| 亚洲精品国偷自产在线99热| 国产一区二区在线免费视频| 国产精品久久二区| 丝袜美腿亚洲一区二区| 色青青草原桃花久久综合| 欧美一级淫片丝袜脚交| 久热精品视频在线观看| 亚洲va欧美va国产综合久久| 大桥未久av一区二区三区| 97精品伊人久久久大香线蕉| 成人黄色免费看| 亚洲视频自拍偷拍| 欧美日韩成人黄色| 久久99国产精品久久久久久久久| 26uuu日韩精品一区二区| 97在线观看免费高清| 久久亚洲欧美日韩精品专区| 日韩中文在线中文网在线观看| 97色在线观看免费视频| 国产成人啪精品视频免费网| wwwwwwww亚洲| 精品久久香蕉国产线看观看亚洲| 成人免费网站在线观看| 亚洲视频电影图片偷拍一区| 日韩av在线看| 欧美激情亚洲另类| 久热精品视频在线| 91干在线观看| 亚洲成年网站在线观看| 98午夜经典影视| 国产精品jvid在线观看蜜臀| 欧美日韩免费观看中文| 欧美性色xo影院| 亚洲wwwav| 日韩毛片中文字幕| 亚洲网站在线播放| 日韩高清不卡av| 亚洲国内精品在线| 国产精品亚洲片夜色在线| 中文字幕av一区二区| 成人h猎奇视频网站| 中文字幕免费国产精品| 欧美在线激情视频| 中文字幕亚洲综合久久| 国产精品情侣自拍| 国产成人综合精品| 欧美孕妇孕交黑巨大网站| 亚洲欧美变态国产另类| 国产精品久久久久久久久久新婚| 国a精品视频大全| 亚洲精品美女久久久久| 国产精品稀缺呦系列在线| 最近2019年中文视频免费在线观看| 国产精品av电影| 久久91亚洲精品中文字幕| 人妖精品videosex性欧美| 午夜欧美不卡精品aaaaa| 国产亚洲精品综合一区91| 国内精品在线一区| 自拍视频国产精品| 亚洲精选一区二区| 中文字幕自拍vr一区二区三区| 亚洲欧美在线x视频| 欧美黑人性视频| 黑人巨大精品欧美一区免费视频| 成人黄色短视频在线观看| 视频在线一区二区| 欧美成年人视频| 精品国产一区二区三区四区在线观看| 日韩精品免费在线观看| 国产精品入口福利| 欧美日韩在线视频观看| 亚洲加勒比久久88色综合| 亚洲第一精品久久忘忧草社区| 亚洲伊人久久综合| 欧美亚洲国产成人精品| 日韩av在线免播放器| 国产一区二区三区三区在线观看| 日韩在线激情视频| 国产精品专区一| 精品久久久免费| 中文字幕一区日韩电影| 久久成人av网站| 亚洲国产成人爱av在线播放| 97色在线视频观看| 色视频www在线播放国产成人| 欧美高清无遮挡| 欧美另类老肥妇| 亚洲free性xxxx护士白浆| 欧美区二区三区| 日本高清+成人网在线观看| 欧美国产日韩xxxxx| 国产成人av在线播放| 欧美亚洲激情视频| 国产在线观看91精品一区| 国产区精品在线观看| 日韩中文字幕免费看| 日韩高清欧美高清|