mysql--復(fù)制

用途:

? ? ? ? 1.負(fù)載均衡? ? 2.備份? ? 3.高可用性與故障切換


方式:

????????異步:常規(guī)的mysql復(fù)制是異步的,復(fù)制過程中如果發(fā)生宕機(jī)可能會(huì)丟失數(shù)據(jù)。
????????半同步:使用某些插件。主庫(kù)在執(zhí)行完事務(wù)后不會(huì)立刻返回給客戶端,而是等待至少一個(gè)從庫(kù)接收到并寫到relay log中才返回給客戶端


步驟:

? ? ????①master(主服務(wù)器)的運(yùn)行語句都會(huì)產(chǎn)生一個(gè)二進(jìn)制日志 binlog
????????②slave(從服務(wù)器)和master之間通過單獨(dú)的io線程,不斷的讀取binlog
????????③slave將讀取到的binlog轉(zhuǎn)換為自身可執(zhí)行的relaylog(中繼日志)
????????④slave上單獨(dú)的線程執(zhí)行relaylog


配置:

? ??????①配置主庫(kù)和備庫(kù)

? ? ? ? ? ? 打開二進(jìn)制日志并指定server-id。在主庫(kù)my.cnf中進(jìn)行如下修改,并重啟服務(wù)器

? ? ? ? ? ? binlog?format:日志格式(mixed | statement |?row)

? ? ? ? ? ? 備庫(kù)的my.cnf也進(jìn)行類似的操作

????????②在主庫(kù)創(chuàng)建一個(gè)用戶,并賦予權(quán)限。
? ? ? ? 備庫(kù)運(yùn)行的I/O線程會(huì)建立一個(gè)到主庫(kù)的TCP/IP連接,備庫(kù)I/O線程會(huì)以該用戶名連接到主庫(kù)并讀取二進(jìn)制日志

????????③啟動(dòng)復(fù)制

? ? ? ? ????指定master信息并開啟slave
????????????master_log_file:Master服務(wù)器產(chǎn)生的日志
????????????master_log_pos: 從這個(gè)二進(jìn)制文件的哪個(gè)位置開始

? ? ? ? ? ? 檢查復(fù)制是否正常運(yùn)行:waiting? for master to send event 代表成功連接


其他復(fù)制方式:

? ? ? ? 1 冷備份:關(guān)閉主庫(kù),數(shù)據(jù)復(fù)制到備庫(kù),然后change master to
? ? ? ? 2 熱備份:僅適用myisam表
? ? ? ? 3 快照或備份:知道對(duì)應(yīng)二進(jìn)制日志坐標(biāo),就可以適用主庫(kù)的快照或備份來初始化備庫(kù)
? ? ? ? 4?mysqldump:不會(huì)鎖表:
????????mysqldump --all-databases --master-data=2 --single-transaction --quick -R --events -uroot > /tmp/full.sql
? ???????????--single-transaction:一致性備份(不會(huì)鎖表)
????????????????-q:采用快速的dump方式(提高導(dǎo)出性能)
????????????????-R:導(dǎo)出存儲(chǔ)過程,函數(shù),和觸發(fā)器
????????????????--events:如果是5.1以上的版本使用,包含事件
????????????????--master-data:在dump過程中記錄主庫(kù)的binlog和pos點(diǎn)(dump出的文件就會(huì)多出change master to這個(gè)語句),值為1時(shí)這個(gè)語句會(huì)執(zhí)行,值為2時(shí)這個(gè)語句是注釋狀態(tài)


復(fù)制的原理:

? ? ? ? 1. 基于語句的復(fù)制:把主庫(kù)執(zhí)行的sql再執(zhí)行一遍
? ? ? ? 2. 基于行的復(fù)制:把實(shí)際的數(shù)據(jù)放在二進(jìn)制日志中


拓?fù)浣Y(jié)構(gòu):

? ? ? ? 1.一主多備
? ? ? ? 2.主主(主動(dòng)模式)復(fù)制:弊>利
? ? ? ? 3.主主(被動(dòng)模式)復(fù)制:另外一個(gè)主是只讀的,提升性能
? ? ? ? 4.擁有備庫(kù)的主主結(jié)構(gòu):
? ? ? ? 5.環(huán)形復(fù)制


生成全局唯一ID:

????????1.使用auto_increment_increment和auto_icrement_offset
????????2.全局節(jié)點(diǎn)中創(chuàng)建表。在一個(gè)全局?jǐn)?shù)據(jù)庫(kù)節(jié)點(diǎn)中穿件一個(gè)包含AUTO_INCREMENT列的表,應(yīng)用可以通過這個(gè)表生成唯一數(shù)字。
????????3.使用memcached。使用memcached中的incr()函數(shù),可以自動(dòng)增長(zhǎng)一個(gè)數(shù)字并返回結(jié)果。
????????4.批量分配數(shù)字。應(yīng)用可以從一個(gè)全局節(jié)點(diǎn)中請(qǐng)求一批數(shù)字,用完后再申請(qǐng)。
????????5.使用復(fù)合值。例如分片號(hào)和自增數(shù)的組合
????????6.使用GUID值。 可以使用UUID()(或UUID_SHORT())函數(shù)來生成全局唯一值。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容