復(fù)制
復(fù)制是從一個(gè)MySQL服務(wù)器(master)將數(shù)據(jù)拷貝到另外一臺(tái)或多臺(tái)MySQL服務(wù)器(slaves)的過程.復(fù)制是異步進(jìn)行的--slaves服務(wù)器不需要持續(xù)地保持連接來接收master的數(shù)據(jù).依據(jù)配置的不同,可以復(fù)制所有數(shù)據(jù)庫,或指定的數(shù)據(jù)庫,甚至是某一數(shù)據(jù)庫指定的表.
使用復(fù)制功能的目的在于:
向外擴(kuò)展的解決方案 -- 通過在多臺(tái)服務(wù)器之間分散負(fù)載來提高性能.在這種環(huán)境下,所有寫和更新操作都在master服務(wù)器上進(jìn)行,而讀操作則發(fā)生在一臺(tái)或多臺(tái)slaves服務(wù)器上.
數(shù)據(jù)安全 -- 因?yàn)閿?shù)據(jù)是被復(fù)制到slave上的,并且slave可以暫停復(fù)制過程,因此可以在不破壞master數(shù)據(jù)的前提下在slave服務(wù)器上進(jìn)行備份
分析 -- 實(shí)時(shí)數(shù)據(jù)在master上創(chuàng)建,然而數(shù)據(jù)分析卻可以slave服務(wù)器上進(jìn)行,且不會(huì)影響master的性能
長距離數(shù)據(jù)分布 -- 如果分公司需要主公司的數(shù)據(jù)復(fù)本進(jìn)行工作,就可以通過復(fù)制創(chuàng)建一個(gè)本地復(fù)本,從而不需要長久地訪問master服務(wù)器
MySQL的復(fù)制是單向異步的,這與MySQL Cluster的同步復(fù)制特性正好相反.MySQL5.5支持半同步(semisynchronous),即在master上的提交之后,并不是立即返回,而是等待至少有一個(gè)slave確認(rèn)說已經(jīng)收到和記錄了當(dāng)前事務(wù)之后,再返回.
最好的復(fù)制方法與數(shù)據(jù)的展現(xiàn)方式及所選擇的存儲(chǔ)引擎有關(guān),核心的復(fù)制格式有兩種:SBR(Statement Based Replication) -- 復(fù)制所有的SQL語句,和RBR(Row Based Replication) -- 僅復(fù)制被改變的rows. 當(dāng)然也有最三種方案可供選擇:MBR(Mixed Based Replication),這也是MySQL5.5之后版本的默認(rèn)模式.
復(fù)制配置
MySQL服務(wù)器之間的復(fù)制使用的是二進(jìn)制日志機(jī)制.對master的更新與變動(dòng)都會(huì)作為事件(event)記錄在日志中,日志中的信息會(huì)隨變化的不同被記錄成不同的格式.slaves被配置成從master讀取日志,并且執(zhí)行二進(jìn)制日志中的事件到slave本地?cái)?shù)據(jù)庫.一旦master啟動(dòng)二進(jìn)制日志功能,那么所有語句操作都會(huì)被記錄下來,每一個(gè)slave會(huì)收到一份整個(gè)日志內(nèi)容的拷貝.slave的責(zé)任就是決定日志中的哪條語句需要被執(zhí)行,而我們不能通過配置master來僅僅記錄某些特定的事件.如果您沒有另行指定,在主服務(wù)器二進(jìn)制日志中的所有事件都在slave上執(zhí)行.如果需要,還可以配置slave僅應(yīng)用來自于特定數(shù)據(jù)庫或表的事件.
每個(gè)slave都會(huì)保持一份二進(jìn)制日志文件的記錄,且記錄其已經(jīng)讀取和處理過記錄的位置.這表明,多個(gè)slaves可以連接到master,并且執(zhí)行日志的不同部分,因?yàn)閟lave自己來控制這個(gè)過程,單個(gè)slave的斷開與連接,不會(huì)影響master的操作.同時(shí)也正因?yàn)槊總€(gè)slave會(huì)記錄二進(jìn)制日志中的位置,所以slaves可以斷開,重連,然后從記錄的位置開始起上.
新聞熱點(diǎn)
疑難解答
圖片精選