MYSQL的發(fā)展背景和特性;
MYSQL的體系架構(gòu)組成;
MYSQL的各種存儲(chǔ)引擎及適用場(chǎng)景;
MYSQL主從復(fù)制的基本原理;
MYSQL常見(jiàn)的主從復(fù)制架構(gòu)和高可用架構(gòu);
總結(jié)處理復(fù)制延遲和復(fù)制不一致的問(wèn)題。
版本介紹:
Mysql GA(ORACLE)
Percon mysql
MariaDB
開(kāi)源
開(kāi)放源代碼且無(wú)版權(quán)制約,自主性強(qiáng)、使用成本低可根據(jù)
歷史悠久、社區(qū)及用戶非?;钴S,遇到問(wèn)題,可以很快獲取到幫助。
可移植:
支持多種操作系統(tǒng),提供多種api幾口,支持多種開(kāi)發(fā)語(yǔ)言。
安全:
有著非常完善的用戶和權(quán)限系統(tǒng),當(dāng)你建立連接時(shí),可以通過(guò)加密的方式來(lái)保證他通信安全。
Mysql的體系架構(gòu):
常用的存儲(chǔ)引擎和特性對(duì)比
MYSQL從5.5.5版本開(kāi)始默認(rèn)存儲(chǔ)引擎為InnoDB(表級(jí)別)
基本概念
MYSQL從3.2.3版本開(kāi)始提供復(fù)制的功能,復(fù)制是指將主庫(kù)的DDL和DML(除select)操作通過(guò)二進(jìn)制日志傳到服務(wù)器上(從庫(kù)),然后再?gòu)膸?kù)上對(duì)這些日志重新執(zhí)行(也叫重做),從而使得從庫(kù)和主庫(kù)的數(shù)據(jù)保持同步。
為什么要做主從復(fù)制:
z
輔助備份
分擔(dān)負(fù)載
應(yīng)用場(chǎng)景
應(yīng)用場(chǎng)景1:從服務(wù)器作為主服務(wù)器的實(shí)時(shí)數(shù)據(jù)備份
應(yīng)用場(chǎng)景2:主從服務(wù)器實(shí)現(xiàn)讀寫(xiě)分離,服務(wù)器實(shí)現(xiàn)負(fù)載均衡
應(yīng)用場(chǎng)景3:把多個(gè)從服務(wù)器根據(jù)業(yè)務(wù)重要性進(jìn)行拆分訪問(wèn)
復(fù)制的原理
Master:binlog dump 線程。Slave: I/O線程,Slave: SQL線程
異步復(fù)制
主節(jié)點(diǎn)只需要把寫(xiě)入操作在本地完成,就響應(yīng)用戶。
半同步復(fù)制&增強(qiáng)半同步復(fù)制
為了保證主庫(kù)上的每一個(gè)binlog事務(wù)都能夠被可靠的復(fù)制到從庫(kù)上,主庫(kù)在每次事務(wù)提交成功時(shí),并不是及時(shí)反饋給客戶端用戶,而是等待其中一個(gè)從庫(kù)也接收到了binlog并成功將事務(wù)記錄到了中繼日志中,然后才反饋給用戶。
rpl_semi_sync_master_timeout
set globalrpl_semi_sync_master_wait_point=AFTER_COMMIT;
半同步復(fù)制的配置:
半同步參數(shù)需要先注釋掉,等初始化完成之后安裝好半同步插件,再開(kāi)啟半同步參數(shù)
如果是雙主架構(gòu)則主備庫(kù)都需要安裝:
rpl_semi_sync_master_enabled= 1
rpl_semi_sync_slave_enabled= 1
maser
slave
結(jié)果:
完全同步的復(fù)制
當(dāng)主庫(kù)提交事務(wù)之后,所有的從庫(kù)節(jié)點(diǎn)必須收到、APPLY并且提交這些事務(wù),然后主庫(kù)線程才能繼續(xù)做后續(xù)操作。因?yàn)樾枰却袕膸?kù)執(zhí)行完該事務(wù)才能返回,所以全同步復(fù)制的性能必然會(huì)收到嚴(yán)重的影響。
一主一從
主主復(fù)制
一主多從---擴(kuò)展系統(tǒng)讀取的性能,因?yàn)樽x是在從庫(kù)讀取的;
多主一從---5.7開(kāi)始支持
聯(lián)級(jí)復(fù)制
MYSQL的主從復(fù)制-高可用架構(gòu)對(duì)比
分類(lèi) | MM | MHA | MGR |
優(yōu)勢(shì) | 主主模式能將讀寫(xiě)請(qǐng)求分?jǐn)偟絻蓚€(gè)主節(jié)點(diǎn),有效提升服務(wù)器使用率。 | MHA除了支持日志點(diǎn)的復(fù)制還支持GTID的方式 | 基本無(wú)延遲,延遲比異步的小很多 |
主節(jié)點(diǎn)發(fā)生故障后,能快速進(jìn)行主從切換。 | 同MMM相比,MHA會(huì)嘗試從舊的Master中恢復(fù)舊的二進(jìn)制日志,只是未必每次都能成功。如果希望更少的數(shù)據(jù)丟失場(chǎng)景,建議使用MHA架構(gòu)。 | 支持多寫(xiě)模式,但是目前還不是很成熟 | |
當(dāng)故障節(jié)點(diǎn)恢復(fù)后,故障節(jié)點(diǎn)能通過(guò)復(fù)制進(jìn)行數(shù)據(jù)恢復(fù)(應(yīng)用其他節(jié)點(diǎn)數(shù)據(jù))和數(shù)據(jù)同步(將未同步數(shù)據(jù)發(fā)生給其他節(jié)點(diǎn))。 | 數(shù)據(jù)的強(qiáng)一致性,可以保證數(shù)據(jù)事務(wù)不丟失 | ||
不足 | 當(dāng)主節(jié)點(diǎn)上MySQL實(shí)例發(fā)生故障后,可能會(huì)存在部分?jǐn)?shù)據(jù)(Binlog)未同步到另外的主節(jié)點(diǎn),導(dǎo)致數(shù)據(jù)丟失(直到故障節(jié)點(diǎn)恢復(fù))。 | MHA需要自行開(kāi)發(fā)VIP轉(zhuǎn)移腳本。 | 僅支持innodb |
主主模式下,很容易因數(shù)據(jù)訪問(wèn)控制不當(dāng)導(dǎo)致數(shù)據(jù)沖突。 | MHA只監(jiān)控Master的狀態(tài),未監(jiān)控Slave的狀態(tài) | 只能用在GTID模式下,且日志格式為row格式 | |
為提高系統(tǒng)高可用性,雙主架構(gòu)會(huì)被擴(kuò)展成雙主多從結(jié)構(gòu),同樣存在主節(jié)點(diǎn)發(fā)生故障后多個(gè)從庫(kù)選主和恢復(fù)復(fù)制的問(wèn)題。 | |||
適用場(chǎng)景 | 讀寫(xiě)都需要高可用的場(chǎng)景 | 一主多從的環(huán)境下,MySQL的主從復(fù)制是異步或是半同步。 | 對(duì)主從延遲比較敏感 |
希望對(duì)對(duì)寫(xiě)服務(wù)提供高可用,又不想安裝第三方軟件 | |||
數(shù)據(jù)強(qiáng)一致的場(chǎng)景 |
如何處理同步延遲
1. 如果是機(jī)械盤(pán):
set globalinnodb_flush_neighbors=2;
表示刷新在buffer pool 中位于磁盤(pán)上相同的extend 區(qū)的臟頁(yè),通過(guò)AIO可以將多個(gè)IO寫(xiě)入操作合并為一個(gè)IO操作,增大寫(xiě)入量,減少了物理寫(xiě)IO。
2.如果是IO的問(wèn)題:
set globalinnodb_io_capacity=1200; (默認(rèn)200)
即每秒的輸入輸出量(或讀寫(xiě)次數(shù))。
3.臨時(shí)調(diào)整:
set globalinnodb_flush_log_at_trx_commit=2; (默認(rèn)為1)
set globalsync_binlog=0;
同步之后需要調(diào)整回:
set globalinnodb_flush_log_at_trx_commit=1;
set globalsync_binlog=1;
錯(cuò)誤信息
錯(cuò)誤分析
mysqlbinlogmysql-bin.xxx -vv --base64-output=decode-rows --start-position=a--stop-position=b>/tmp/test.log
錯(cuò)誤分析結(jié)論
200711 8.49 –9:42期間日志中斷,原因是這段時(shí)間內(nèi),主機(jī)重啟了,而二進(jìn)制這部分日志傳輸?shù)絺鋷?kù)的時(shí)候丟失了。
解決方案
主庫(kù):
確定備庫(kù)丟失的二進(jìn)制日志的內(nèi)容(根據(jù)時(shí)間或者位點(diǎn)信息)
經(jīng)過(guò)排查確定丟失的日志為mysql-bin000333中的start-position=362945607 到 stop-position=363101485的內(nèi)容。
備庫(kù):中端將
mysqlbinlog--skip-gtids --start-position=362945607 --stop-position=363101485mysql-bin000333 |mysql -utest -p -h ip
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/130164.html
摘要:肖鵬微博數(shù)據(jù)庫(kù)那些事兒肖鵬,微博研發(fā)中心技術(shù)經(jīng)理,主要負(fù)責(zé)微博數(shù)據(jù)庫(kù)相關(guān)的業(yè)務(wù)保障性能優(yōu)化架構(gòu)設(shè)計(jì),以及周邊的自動(dòng)化系統(tǒng)建設(shè)。經(jīng)歷了微博數(shù)據(jù)庫(kù)各個(gè)階段的架構(gòu)改造,包括服務(wù)保障及體系建設(shè)微博多機(jī)房部署微博平臺(tái)化改造等項(xiàng)目。 showImg(https://segmentfault.com/img/bV24Gs?w=900&h=385); 對(duì)于手握數(shù)據(jù)庫(kù)的開(kāi)發(fā)人員來(lái)說(shuō),沒(méi)有誤刪過(guò)庫(kù)的人生是...
摘要:編輯器編輯器背景編輯器前段時(shí)間遇到一個(gè)線上問(wèn)題,后來(lái)排查好久發(fā)現(xiàn)是因?yàn)橹鲝耐窖舆t導(dǎo)致的,所以今天寫(xiě)一篇文章總結(jié)一下這個(gè)問(wèn)題希望對(duì)你有用。編輯器幾句嘮叨編輯器大家好,我是小飯,一枚后端工程師。背景前段時(shí)間遇到一個(gè)線上問(wèn)題,后來(lái)排查好久發(fā)現(xiàn)是因?yàn)橹鲝耐窖舆t導(dǎo)致的,所以今天寫(xiě)一篇文章總結(jié)一下這個(gè)問(wèn)題希望對(duì)你有用。如果覺(jué)得還不錯(cuò),記得加個(gè)關(guān)注點(diǎn)個(gè)贊哦思維導(dǎo)圖思維導(dǎo)圖常見(jiàn)的主從架構(gòu)隨著日益增長(zhǎng)的訪...
閱讀 1459·2023-01-11 13:20
閱讀 1814·2023-01-11 13:20
閱讀 1263·2023-01-11 13:20
閱讀 2006·2023-01-11 13:20
閱讀 4226·2023-01-11 13:20
閱讀 2879·2023-01-11 13:20
閱讀 1488·2023-01-11 13:20
閱讀 3807·2023-01-11 13:20