国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關(guān)注微信公眾號(hào)

使用MySQL內(nèi)建復(fù)制功能來最佳化可用性
2007-11-08   IT168

在Soundbreak我們每天24小時(shí)不間斷地播放實(shí)況音頻和視頻,所以對(duì)于MySQL的新增的復(fù)制特性,我們不能做出很令人信服的測(cè)試。通過測(cè)試我們發(fā)現(xiàn),可以使用這個(gè)特性來與備份數(shù)據(jù)庫服務(wù)器保持?jǐn)?shù)據(jù)同步,這樣當(dāng)主服務(wù)器因?yàn)槟撤N原因處理失效時(shí),能夠使用備份機(jī)處理所有的查詢。對(duì)于這樣的要求,配置兩臺(tái)服務(wù)器并不困難。我將詳細(xì)討論整個(gè)處理過程,同時(shí)討論一下當(dāng)主服務(wù)器失效時(shí),如何使用PHP來重定向查詢。

MySQL內(nèi)部復(fù)制功能是建立在兩個(gè)或兩個(gè)以上服務(wù)器之間,通過設(shè)定它們之間的主-從關(guān)系來實(shí)現(xiàn)的。其中一個(gè)作為主服務(wù)器,其它的作為從服務(wù)器。我將詳細(xì)討論如何配置兩臺(tái)服務(wù)器,將一個(gè)設(shè)為主服務(wù)器,另一個(gè)設(shè)為從服務(wù)器。并且描述一下在它們之間進(jìn)行切換的處理過程。我是在MySQL的3.23.23版本上進(jìn)行的配置設(shè)置過程,并且也是在這個(gè)版本上進(jìn)行的測(cè)試。MySQL開發(fā)人員建議最好使用最新版本,并且主-從服務(wù)器均使用相同的版本。同時(shí)MySQL 3.23版本仍然是beta測(cè)試版,而且這個(gè)版本可能不能向下兼容。所以因?yàn)檫@個(gè)原因,在實(shí)際的網(wǎng)站中,我現(xiàn)在還沒有使用這個(gè)版本。擁有容錯(cuò)能力具有一個(gè)好處是,在不需中斷任何查詢的情況下,對(duì)服務(wù)器進(jìn)行升級(jí)。

第一步:配置主服務(wù)器

在這篇文章的剩下篇幅中,我將指定兩臺(tái)服務(wù)器。A(IP為10.1.1.1)作為主服務(wù)器(簡(jiǎn)稱為主機(jī))。B (IP為10.1.1.2)作為后備服務(wù)器(簡(jiǎn)稱為備機(jī))。

MySQL的復(fù)制功能的實(shí)現(xiàn)過程為:備機(jī)(B)與主機(jī)(A)連接,然后讀出主機(jī)的二進(jìn)制更新日志,再將發(fā)生的變化合并到自已的數(shù)據(jù)庫中。備機(jī)需要一個(gè)用戶帳號(hào)來與主機(jī)連接,所以在主機(jī)上創(chuàng)建一個(gè)帳號(hào),并只給它FILE權(quán)限,如下操作:

GRANT FILE ON *.* TO replicate@10.1.1.2 IDENTIFIED BY 'password';

為了備機(jī)能夠與主機(jī)連接,要在主機(jī)上運(yùn)行'FLUSH PRIVILEGES',不過不要擔(dān)心,因?yàn)槲覀儗⒃谙旅娴牟襟E中停掉服務(wù)器。

現(xiàn)在我們需要主機(jī)數(shù)據(jù)庫的一個(gè)快照,并且對(duì)主機(jī)進(jìn)行配置,允許生成二進(jìn)制的更新日志。首先編輯'my.cnf'文件,以便允許二進(jìn)制更新日志,所以在[mysqld]部分的下面某個(gè)地方增加一行:'log-bin'。在下一次服務(wù)器啟動(dòng)時(shí),主機(jī)將生成二進(jìn)制更新日志(名為:<主機(jī)名>-bin.<增量序號(hào)#>)。為了讓二進(jìn)制更新日志有效,關(guān)閉MySQL服務(wù)程序,然后將主機(jī)上的所有數(shù)據(jù)庫目錄到另一個(gè)目錄中,接著重新啟動(dòng)mysqld。

請(qǐng)確定得到了所有數(shù)據(jù)庫,否則在進(jìn)行復(fù)制時(shí),如果一個(gè)表在主機(jī)上存在但在備機(jī)上不存在,將因?yàn)槌鲥e(cuò)而退出。現(xiàn)在你已經(jīng)得到了數(shù)據(jù)的快照,和一個(gè)從建立快照以來的二進(jìn)制日志,上面記錄著任何對(duì)數(shù)據(jù)庫的修改。請(qǐng)注意MySQL數(shù)據(jù)文件(*.MYD,*.MYI和*.frm)是依賴于文件系統(tǒng)的,所以你不能僅僅進(jìn)行文件傳輸,如從Solaris到Linux。如果你處于一個(gè)異種的服務(wù)器環(huán)境,你將不得不使用mysqldump實(shí)用程序或其它的定制腳本來得到數(shù)據(jù)快照。

第二步:配置備機(jī)

讓我們繼續(xù)。停掉備機(jī)上的MySQL服務(wù)程序,并且把從主機(jī)上拷貝來的數(shù)據(jù)庫目錄移到備機(jī)上的data目錄下。請(qǐng)確認(rèn)將目錄的擁有者和屬組改變?yōu)镸ySQL用戶相應(yīng)值,并且修改文件模式為660(只對(duì)擁有者和屬組可讀、可寫),目錄本身為770(只對(duì)擁有者和屬組可讀、可寫和可執(zhí)行)。

繼續(xù)。在備機(jī)上啟動(dòng)MySQL服務(wù)程序,確認(rèn)MySQL工作正常。運(yùn)行幾個(gè)select查詢(不要update或insert 查詢),看一看在第一步中得到的數(shù)據(jù)快照是否成功。接著,在測(cè)試成功后關(guān)掉MySQL服務(wù)程序。

在備機(jī)上配置需要訪問的主機(jī),以便接收主機(jī)的更改。所以需要編輯務(wù)機(jī)上的'my.cnf'文件,在[mysqld] 部分中增加下面幾行:

master-host=10.1.1.1

master-user=replicate

master-password=password

在啟動(dòng)備機(jī)服務(wù)程序后,備機(jī)服務(wù)程序?qū)⒉榭丛?#039;my.cnf'文件中所指定的主機(jī),查看是否有改變,并且將這些改變合并到自已的數(shù)據(jù)庫中。備機(jī)保持了主機(jī)的更新記錄,這些記錄是從主機(jī)的'master.info'文件中接收下來的。備機(jī)線程的狀態(tài)可以通過sql命令'SHOW SLAVE-STATUS'看到。在備機(jī)上處理二進(jìn)制日志中如果發(fā)生錯(cuò)誤,都將導(dǎo)致備機(jī)線程的退出,并且在*.err的日志文件中生成一條信息。然后錯(cuò)誤可以被改正,接著可以使用sql語句'SLAVE START'來重新啟動(dòng)備機(jī)線程。線程將從主機(jī)二進(jìn)制日志處理中斷的地方繼續(xù)處理。

至此,在主機(jī)上所發(fā)生的數(shù)據(jù)改變應(yīng)該已經(jīng)復(fù)制到備機(jī)上了,要測(cè)試它,你可以在主機(jī)上插入或更新一條記錄,而在備機(jī)上選擇這條記錄。

現(xiàn)在我們擁有了從A機(jī)到B機(jī)的這種主-從關(guān)系,這樣當(dāng)A機(jī)可能當(dāng)機(jī)的時(shí)候,允許我們將所有的查詢重定向到B機(jī)上去,但是當(dāng)A機(jī)恢復(fù)時(shí),我們沒有辦法將發(fā)生的改變恢復(fù)到A機(jī)中去。為了解決這個(gè)問題,我們創(chuàng)建從B機(jī)到A機(jī)的主-從關(guān)系。

第三步:創(chuàng)建相互的主從關(guān)系

首先在B機(jī)上的my.cnf文件中,在[mysqld]部分中加入'log-bin',接著重新啟動(dòng)mysqld,然后創(chuàng)建可在它的上面執(zhí)行復(fù)制功能的用戶帳號(hào),使用:

GRANT FILE ON *.* TO replicate@10.1.1.1 IDENTIFIED BY 'password';

在B機(jī)上運(yùn)行'FLUSH PRIVILEGES'命令,以便裝入在加入復(fù)制用戶后的新的授權(quán)表,接著回到A機(jī)上,在它的'my.cnf'中加入下面幾行:

master-host=10.1.1.2

master-user=replicate

master-password=password

在重啟A機(jī)的服務(wù)程序之后,現(xiàn)在我們一擁有了在A機(jī)與B機(jī)之間的相互主-從關(guān)系。不管在哪個(gè)服務(wù)器上更新一條記錄或插入一條記錄,都將被復(fù)制到另一臺(tái)服務(wù)器上。要注意的是:我不敢確定一個(gè)備機(jī)合并二進(jìn)制日志變化的速度有多快,所以用這種方法來進(jìn)行插入或更新語句的負(fù)載平衡可能不是一個(gè)好辦法。

1
第四步:修改你的數(shù)據(jù)庫連接程序

既然你已經(jīng)在A機(jī)和B機(jī)之間建立了一個(gè)相互的關(guān)系,你需要修改數(shù)據(jù)庫連接程序,以便從這種方式中得到好處。下面的函數(shù)首先試圖與A機(jī)連接,如果不能建立連接則與B機(jī)連接。

<?php

/********************************************************

function db_connect()

returns a link identifier on success, or false on error

********************************************************/

function db_connect(){

$username = "replUser";

$password = "password";

$primary = "10.1.1.1";

$backup = "10.1.1.2";

# attempt connection to primary

if(!$link_id = @mysql_connect($primary, $username, $password))

# attempt connection to secondary

$link_id = @mysql_connect($secondary, $username, $password)

return $link_id;

}

?>

我在兩種情況下對(duì)使用了上面技術(shù)的數(shù)據(jù)庫連接建立過程進(jìn)行了測(cè)試,一種是主MySQL服務(wù)程序關(guān)閉了,但是服務(wù)器還在運(yùn)行,另一種情況是主服務(wù)器關(guān)閉了。如果只是mysqld關(guān)閉了,連接會(huì)馬上轉(zhuǎn)向備機(jī);但是如果整個(gè)服務(wù)器關(guān)閉了,就出現(xiàn)了無限地等待(兩分鐘后我放棄了跟蹤 -- 很短的注意跨度),因?yàn)镻HP在查找一個(gè)不存在的服務(wù)器。不幸地是,不象fsockopen函數(shù),mysql_connect函數(shù)沒有一個(gè)超時(shí)參數(shù),然而我們可以使用fsockopen來模擬一個(gè)超時(shí)處理。

第五步:一個(gè)改進(jìn)的數(shù)據(jù)庫連接程序

<?php

/********************************************************

function db_connect_plus()

returns a link identifier on success, or false on error

********************************************************/

function db_connect_plus(){

$username = "username";

$password = "password";

$primary = "10.1.1.1";

$backup = "10.1.1.2";

$timeout = 15; // timeout in seconds

if($fp = fsockopen($primary, 3306, &$errno, &$errstr, $timeout)){

fclose($fp);

return $link = mysql_connect($primary, $username, $password);

}

if($fp = fsockopen($secondary, 3306, &$errno, &$errstr, $timeout)){

fclose($fp);

return $link = mysql_connect($secondary, $username, $password);

}

return 0;

}

?>

這個(gè)新改進(jìn)的函數(shù)向我們提供了一個(gè)可調(diào)的超時(shí)特性,這正是mysql_connect函數(shù)所缺少的。如果連接立即失敗,這種情況如機(jī)器"活"著,但mysqld"當(dāng)"掉了,函數(shù)立即移到第二個(gè)服務(wù)器。上面的函數(shù)相當(dāng)健壯,在試圖進(jìn)行連接之前先測(cè)試一下,查看服務(wù)程序是否在指定端口進(jìn)行監(jiān)聽,讓你的腳本在一段可接受的時(shí)間段后超時(shí),允許你適當(dāng)?shù)貙?duì)出錯(cuò)情況進(jìn)行處理。如果你修改了缺省端口3306,請(qǐng)保證對(duì)端口號(hào)進(jìn)行修改。

結(jié)論和意見

首先,要確定得到了一個(gè)完整的數(shù)據(jù)快照。如果忘記拷貝一個(gè)表或數(shù)據(jù)庫將導(dǎo)致備機(jī)線程序停止。生成快照的時(shí)刻是很關(guān)健的。你應(yīng)該確保在拷貝數(shù)據(jù)文件之前二進(jìn)制日志功能是無效的。如果在得到快照之前就允許了二進(jìn)制日志功能,備機(jī)的線程可能會(huì)停止,原因就是當(dāng)線程試圖導(dǎo)入重要的記錄時(shí),可能會(huì)由于主鍵重復(fù)而停止。最好就是接照第二部分所討論的處理辦法來做:關(guān)閉-拷貝-允許二進(jìn)制日志功能重啟。

你可能想要按照最初的一種方式來配制復(fù)制處理,并且在合適的時(shí)間關(guān)注備機(jī),確保備機(jī)與主機(jī)保持同步。

我沒有測(cè)試過一個(gè)使用了復(fù)制特性的系統(tǒng)的負(fù)載平衡處理性能,但是我會(huì)靈活地使用這樣系統(tǒng)來平衡插入和更新。例如,如果在兩臺(tái)服務(wù)器上兩條記錄都給出了同一個(gè)auto_increment值,這種情況備機(jī)線程會(huì)在哪一條記錄上停掉呢?象這樣的問題將會(huì)讓負(fù)載平衡作為只讀的處理,一臺(tái)服務(wù)器處理所有的插入和更新,同時(shí)一組備機(jī)(是的,你可以有多個(gè)與主機(jī)分離的備機(jī))處理所有的選擇。

我非常高興,MySQL已經(jīng)具備了復(fù)制系統(tǒng)的某些功能,并且配置很簡(jiǎn)單。使用它,你就可以開始針對(duì)失控的事件提供額外的安全措施了。我僅僅涉及了復(fù)制特性,這個(gè)我已經(jīng)測(cè)試并且使用了,但是在MySQL的在線文檔中的第11部分有中更詳細(xì)的說明。

譯者的話:

由于我原來使用的是3.22版的MySQL,所以為了測(cè)試一下我只好下載了3.23.24版的最新程序。而且因?yàn)橹挥幸慌_(tái)機(jī)器,我只是增加了二進(jìn)制日志的設(shè)置。不過,正如本文所說,的確有文件生成。如果大家對(duì)此感興趣只好請(qǐng)自行測(cè)試了。另外,在最新的MySQL的使用手冊(cè)中,我發(fā)現(xiàn)這個(gè)復(fù)制功能是在3.23.15版以后才有的,請(qǐng)大家檢查自已的MySQL的版本。同時(shí),文中關(guān)于二進(jìn)制日志的設(shè)置是說在my.cnf中設(shè)置的。在我使用的3.23.24版本中,手冊(cè)上說可以有三個(gè)文件進(jìn)行參數(shù)設(shè)置,分別為windows目錄下的my.ini文件,c:my.cnf和c:mysqldatamy.cnf中可以設(shè)置。我在設(shè)置'log-bin'時(shí)(不需要先設(shè)log參數(shù))是使用mysql自帶的WinMySQLadmin軟件進(jìn)行設(shè)置的,并且在my.ini中設(shè)定的,與文中不同,請(qǐng)大家自行測(cè)試。

1

熱詞搜索:

上一篇:SQL Server-SQL Server7.0數(shù)據(jù)庫備份與恢復(fù)
下一篇:Linux系統(tǒng)中Mysql的安裝備份與密碼恢復(fù)

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
亚洲精品中文字幕在线观看| 国产精品视频第一区| 免费成人小视频| 亚洲狠狠爱一区二区三区| 国产精品久久久久久久岛一牛影视 | 国内一区二区在线| 久色婷婷小香蕉久久| 五月综合激情婷婷六月色窝| 亚洲综合激情另类小说区| 夜夜夜精品看看| 亚洲午夜久久久| 午夜精品久久久久久久| 日本不卡视频在线| 韩国av一区二区三区四区| 国产成人综合精品三级| www.性欧美| 欧美人妇做爰xxxⅹ性高电影 | 亚洲福利视频一区| 日韩高清电影一区| 激情深爱一区二区| 成人午夜av电影| 在线免费视频一区二区| 欧美一区二区三区免费大片 | 天天爽夜夜爽夜夜爽精品视频| 一区二区欧美在线观看| 日韩av一区二区三区四区| 久久成人久久鬼色| 成人黄色在线视频| 欧美日韩色综合| 欧美精品一区二区三区四区 | 欧美色图天堂网| 欧美一区二区三区电影| 国产日产欧美精品一区二区三区| 亚洲欧美日韩在线| 麻豆91免费看| 91啪九色porn原创视频在线观看| 欧美色窝79yyyycom| 久久免费看少妇高潮| 玉米视频成人免费看| 秋霞午夜鲁丝一区二区老狼| 国产69精品一区二区亚洲孕妇| 欧美色综合天天久久综合精品| 久久久99精品免费观看| 亚洲成av人片在线| 成人动漫视频在线| 日韩精品一区二| 亚洲欧美日韩一区二区三区在线观看| 日本伊人精品一区二区三区观看方式| 国产精品综合二区| 精品视频免费看| 日韩美女啊v在线免费观看| 美女视频黄 久久| 欧美亚洲综合网| 国产精品入口麻豆原神| 久久精品国产亚洲a| 日本道免费精品一区二区三区| 久久综合久久综合亚洲| 日韩成人午夜电影| 91福利在线看| 亚洲欧美一区二区三区极速播放| 国产一区二区美女| 日韩一级欧美一级| 日韩国产高清在线| 欧美自拍偷拍午夜视频| 自拍偷拍国产精品| 不卡的av中国片| 国产色婷婷亚洲99精品小说| 蜜桃精品视频在线| 在线播放一区二区三区| 亚洲美女视频在线观看| 成人18视频日本| 国产视频不卡一区| 国产成人在线观看| 国产欧美日韩综合| 成人一二三区视频| 亚洲国产精品成人综合色在线婷婷 | 国产精品久久久久婷婷| 国产一区二区h| 欧美色偷偷大香| 国产精品高清亚洲| 91精品福利在线一区二区三区| 亚洲欧美国产毛片在线| 欧美电影免费观看高清完整版在线 | 国产色91在线| 天天影视色香欲综合网老头| 色婷婷综合中文久久一本| 久久久精品黄色| 国产成人日日夜夜| 国产精品久久久久天堂| av网站免费线看精品| 亚洲人成在线观看一区二区| 91麻豆国产在线观看| 国产精品系列在线| 久久精品国产澳门| 九一久久久久久| 欧美xxxxx牲另类人与| 秋霞影院一区二区| 久久久欧美精品sm网站| 粉嫩在线一区二区三区视频| 国产精品国产三级国产aⅴ入口 | 国产精品欧美一区二区三区| 舔着乳尖日韩一区| 亚洲午夜电影在线观看| 国产suv精品一区二区6| 国产激情偷乱视频一区二区三区| 亚洲精品一区二区三区蜜桃下载 | 亚洲欧美韩国综合色| 欧美午夜片在线看| 99精品欧美一区二区三区小说 | 国产精品自拍三区| 国产精品拍天天在线| 91美女片黄在线观看91美女| 夜夜爽夜夜爽精品视频| 日韩三区在线观看| 国产.欧美.日韩| 亚洲亚洲人成综合网络| 精品国产电影一区二区| 94-欧美-setu| 久久黄色级2电影| 亚洲欧美aⅴ...| 精品国产电影一区二区| 91福利精品第一导航| 国产美女娇喘av呻吟久久 | 中文字幕久久午夜不卡| 91精品黄色片免费大全| 国产成人av一区二区三区在线观看| 日本一区二区成人| 在线成人午夜影院| 91女神在线视频| 国产精品一二三在| 日本在线不卡一区| 一区二区在线观看视频| 久久人人爽人人爽| 欧美日韩精品一区二区三区| 国产福利一区二区三区视频 | 欧美一级理论片| 在线精品视频小说1| 精品一二线国产| 日日摸夜夜添夜夜添精品视频| 成人免费小视频| 国产欧美一区二区三区鸳鸯浴| 欧美一区二视频| 欧美午夜片在线看| 91蝌蚪porny九色| 粉嫩蜜臀av国产精品网站| 奇米综合一区二区三区精品视频| 日韩一区在线播放| 国产欧美日韩另类一区| 欧美成人一区二区三区在线观看| 日本韩国欧美国产| 97aⅴ精品视频一二三区| 成人午夜精品在线| 岛国精品在线播放| 国产成人综合在线| 国产精品资源在线| 国产伦精品一区二区三区免费| 日韩电影一区二区三区| 婷婷中文字幕一区三区| 亚洲国产毛片aaaaa无费看 | 色婷婷亚洲婷婷| 99久久精品一区二区| 成人一区在线看| 成人中文字幕电影| 成人动漫视频在线| 91香蕉国产在线观看软件| 不卡一区二区中文字幕| 成人一区在线看| 波多野结衣视频一区| av男人天堂一区| 91农村精品一区二区在线| 99久久免费国产| 91在线观看视频| 欧美在线免费视屏| 正在播放亚洲一区| 日韩精品一区二区三区视频在线观看| 欧美一级片免费看| 欧美电视剧在线看免费| 久久理论电影网| 亚洲欧洲日产国码二区| 一区二区三区精密机械公司| 午夜亚洲国产au精品一区二区| 日韩不卡一区二区| 狠狠色丁香婷婷综合久久片| 国产精品中文字幕一区二区三区| 国产麻豆成人精品| 亚洲一二三专区| 欧美日韩视频不卡| 色香蕉久久蜜桃| 成人av影视在线观看| 懂色一区二区三区免费观看| 成人av在线网站| 成人的网站免费观看| 久久国产尿小便嘘嘘| 欧美日韩综合不卡| 色综合久久久久综合| 欧美精品乱码久久久久久按摩 | 久久久www成人免费无遮挡大片| 久久久国产精品麻豆| 国产精品久久久久aaaa樱花 | 美女脱光内衣内裤视频久久影院|