您好,登錄后才能下訂單哦!
小編給大家分享一下MySQL數(shù)據(jù)庫(kù)?可?HA怎么實(shí)現(xiàn),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
?可?的衡量標(biāo)準(zhǔn)
數(shù)據(jù)庫(kù)實(shí)現(xiàn)?可?的?種?式
MySQL數(shù)據(jù)庫(kù)實(shí)現(xiàn)?可?
MySQL?持的復(fù)制?式分析
主從場(chǎng)景切換?式
主從結(jié)構(gòu)如何實(shí)現(xiàn)容災(zāi)
N+1:N就是集群,1就是?可?,?可?的核?就是冗余,集群是保證服務(wù)最低使?標(biāo)準(zhǔn)的
?般是通過(guò)系統(tǒng)的可靠性和可維護(hù)性來(lái)衡量的
MTTF:平均?故障時(shí)間,這是衡量可靠性的
MTTR:衡量系統(tǒng)的可維護(hù)性的
HA=MTTF/(MTTF+MTTR)*100%
SLA:99.999%:表示?年故障時(shí)間/宕機(jī)時(shí)間不超過(guò)6分鐘
主從?式(?對(duì)稱)
這種?式的組織形式通常都是通過(guò)兩個(gè)節(jié)點(diǎn)和?個(gè)或多個(gè)服務(wù)器,其中?臺(tái)作為主節(jié)點(diǎn)
(active),另?臺(tái)作為備份節(jié)點(diǎn)(standy),備份節(jié)點(diǎn)應(yīng)該隨時(shí)都在檢測(cè)主節(jié)點(diǎn)的健康狀況,當(dāng)
主節(jié)點(diǎn)發(fā)?故障,服務(wù)會(huì)?動(dòng)切換到備份節(jié)點(diǎn)保障服務(wù)正常運(yùn)?
對(duì)稱?式
兩個(gè)節(jié)點(diǎn),都運(yùn)?著不同的服務(wù)且相互備份,相互檢測(cè)對(duì)?的健康,當(dāng)任意?個(gè)節(jié)點(diǎn)發(fā)?故障,這
個(gè)節(jié)點(diǎn)上的服務(wù)就會(huì)?動(dòng)切換到另?節(jié)點(diǎn)
多機(jī)?式
包含多個(gè)節(jié)點(diǎn)多個(gè)服務(wù),每個(gè)節(jié)點(diǎn)都要備份運(yùn)?不同的服務(wù),出現(xiàn)問(wèn)題?動(dòng)遷移
資源:兩臺(tái)同版本的MySQL數(shù)據(jù)庫(kù)
主從實(shí)現(xiàn)的內(nèi)部運(yùn)?原理和機(jī)制
First Step:主數(shù)據(jù)庫(kù)服務(wù)器會(huì)把數(shù)據(jù)的修改記錄記錄進(jìn)binlog?志,binlog?定要打開(kāi)
Second Step:從庫(kù)的I/O進(jìn)?讀取主庫(kù)的binlog內(nèi)容后存???的Relay Log中繼?志中,這
個(gè)I/O線程會(huì)和主庫(kù)建??個(gè)普通的客戶端連接,然后主庫(kù)啟動(dòng)?個(gè)?進(jìn)制轉(zhuǎn)儲(chǔ)線程,I/O線
程通過(guò)轉(zhuǎn)儲(chǔ)線程讀取binlog更新事件,同步完畢后I/O進(jìn)?sleep,有新的更新會(huì)再喚醒
Relay Log和Binlog的格式是?樣的,可以?mysqlbinlog讀取,也可show
mysql> show relaylog events in 'relay-log.000001';
?前數(shù)據(jù)庫(kù)有兩種復(fù)制?式
binlog?志點(diǎn)position
GTID?式也要依賴binlog
第三步:從服務(wù)器的SQL進(jìn)程會(huì)從Relay Log中讀取事件并在從庫(kù)中重放
從服務(wù)器執(zhí)?重放操作時(shí)是可以在配置?聲明是否寫(xiě)?服務(wù)器的binlog?志中
配置主從服務(wù)器參數(shù)
在Master服務(wù)器上創(chuàng)建?于復(fù)制并授權(quán)的數(shù)據(jù)庫(kù)賬號(hào)
備份Master數(shù)據(jù)庫(kù)并初始化Slave服務(wù)器數(shù)據(jù)
啟動(dòng)復(fù)制鏈路
chown -R mysql:mysql /usr/local/binlog/ #配置?件 server_id=163 log_bin=/usr/local/binlog/mysql-bin 12345
server_id=196 log_bin=/usr/local/binlog/mysql-bin relay_log=/usr/local/relaylog/relay-bin #當(dāng)slave宕機(jī)后,如果relay log損壞了,導(dǎo)致?部分中繼?志沒(méi)有處理,則放棄所有未完成的, 重新獲取執(zhí)?,保證完整性 relay_log_recovery=1 #讓從庫(kù)數(shù)據(jù)只讀,super?戶,super_read_only=on read_only=on #從庫(kù)的復(fù)制鏈路服務(wù)不會(huì)隨數(shù)據(jù)庫(kù)重啟?重啟,需要?動(dòng)啟動(dòng) skip_slave_start=on #確保數(shù)據(jù)?致性,通過(guò)innoDB的崩潰恢復(fù)機(jī)制來(lái)保護(hù)哦 master_info_repository=TABLE relay_log_info_repository=TABLE #select * from mysql.slave_master_info; #select * from mysql.slave_relay_log_info;
mysql> use msyql; mysql> grant replication slave on *.* to 'syncuser'@'192.168.0.103' identified by '123456'; mysql> flush privileges; set global validate_password_policy=LOW; set global validate_password_length=6;
mysqldump -uroot -p123456 --master-data=2 --single-transaction --routines - -triggers --events --databases mydb > mydb.sql
mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.102', MASTER_PORT=3306, MASTER_USER='syncuser', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=8122; mysql> start slave; mysql> show slave status \G;
默認(rèn)情況下是不寫(xiě)?的:因?yàn)閷?xiě)?binlog會(huì)消耗I/O,所以性能會(huì)下降,如果需要在從庫(kù)上恢復(fù)數(shù)
據(jù)就到Relay Log?進(jìn)?導(dǎo)出處理
直接在從庫(kù)上操作更?語(yǔ)句則會(huì)寫(xiě)?binlog
如果就是需要寫(xiě)??在從庫(kù)的my.cnf : log_slave_updates=on #開(kāi)啟同步并寫(xiě)?binlog
開(kāi)啟同步并寫(xiě)?binlog應(yīng)?于從到從的情況
#Master配置?件 #不同步哪些數(shù)據(jù)庫(kù) binlog-ignore-db=mysql binlog-ignore-db=test binlog-ignore-db=information_schema #同步哪些庫(kù) binlog-do-db=game binlog-do-db=mydb #Slave配置?件 #復(fù)制哪些數(shù)據(jù)庫(kù) replicate-do-db=mydb replicate-do-db=game #不復(fù)制哪些數(shù)據(jù)庫(kù) replicate-ignore-db=mysql replicate-ignore-db=test --replicate-wild-ignore-table=foo%.bar% 不復(fù)制使?表名稱以開(kāi)頭foo且表名稱以開(kāi)頭 的表的更新bar
不同點(diǎn) 主從服務(wù)器的參數(shù)有不同的地? #在上?的基礎(chǔ)上,需要給主從服務(wù)器都加上 gtid_mode=on enforce_gtid_consistency=on #開(kāi)啟強(qiáng)制GTID的?致性確保事務(wù) GTID下復(fù)制鏈路的啟動(dòng) mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.102', MASTER_PORT=3306, MASTER_USER='syncuser', MASTER_PASSWORD='123456', MASTER_AUTO_POSITION=1; 啟動(dòng)GTID后以下數(shù)據(jù)庫(kù)操作不可? create table tableName.... select 在?個(gè)事務(wù)中創(chuàng)建臨時(shí)表 在?個(gè)transaction中更新innoDB表和myisam表
優(yōu)點(diǎn):記錄少,只記錄執(zhí)?語(yǔ)句,易懂
缺點(diǎn):insert into table1(create_time) values(now()),這個(gè)now就不是當(dāng)時(shí)的時(shí)間了
優(yōu)點(diǎn):?乎沒(méi)有基于?復(fù)制?法處理的場(chǎng)景
缺點(diǎn):數(shù)據(jù)量太?了
mixed格式默認(rèn)采?statement,?如?到UUID(),ROW_COUNT()
異步復(fù)制:MySQL默認(rèn)就是異步復(fù)制,性能最好,但主從復(fù)制的數(shù)據(jù)不?致性概率最? 同步復(fù)制:當(dāng)客戶端發(fā)過(guò)來(lái)?個(gè)請(qǐng)求后,只有當(dāng)所有的從庫(kù)都寫(xiě)到Relay Log中,才回復(fù)給前端事 務(wù)完成,性能最差,但?致性很強(qiáng) 半同步復(fù)制:?少?個(gè)從庫(kù)完成Relay Log寫(xiě)?后就返回事務(wù)完成給前端 主從上都要安裝 mysql> install plugin rpl_semi_sync_master soname='semisync_master.so' rpl_semi_sync_master_enabled rpl_semi_sync_master_timeout #單位是毫秒,如果主庫(kù)等待從庫(kù)回復(fù)超過(guò)這個(gè)時(shí)間就?動(dòng)切換 為異步
以上是“MySQL數(shù)據(jù)庫(kù)?可?HA怎么實(shí)現(xiàn)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。