电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

MySQL 主從同步,事務(wù)回滾的實(shí)現(xiàn)原理

瀏覽:2日期:2023-10-07 15:51:32
BinLog

BinLog是記錄所有數(shù)據(jù)庫(kù)表結(jié)構(gòu)變更(例如create、alter table)以及表數(shù)據(jù)修改(insert、update、delete)的二進(jìn)制日志,主從數(shù)據(jù)庫(kù)同步用到的都是BinLog文件。BinLog日志文件有三種模式。

STATEMENT 模式

內(nèi)容:binlog 只會(huì)記錄引起數(shù)據(jù)變更的 sql 語(yǔ)句

優(yōu)勢(shì):該模式下,因?yàn)闆](méi)有記錄實(shí)際的數(shù)據(jù),所以日志量和 IO 都消耗很低,性能是最優(yōu)的

劣勢(shì):但有些操作并不是確定的,比如 uuid() 函數(shù)會(huì)隨機(jī)產(chǎn)生唯一標(biāo)識(shí),當(dāng)依賴 binlog 回放時(shí),該操作生成的數(shù)據(jù)與原數(shù)據(jù)必然是不同的,此時(shí)可能造成無(wú)法預(yù)料的后果。

ROW 模式

內(nèi)容:在該模式下,binlog 會(huì)記錄每次操作的源數(shù)據(jù)與修改后的目標(biāo)數(shù)據(jù),StreamSets就要求該模式。

優(yōu)勢(shì):可以絕對(duì)精準(zhǔn)的還原,從而保證了數(shù)據(jù)的安全與可靠,并且復(fù)制和數(shù)據(jù)恢復(fù)過(guò)程可以是并發(fā)進(jìn)行的

劣勢(shì):缺點(diǎn)在于 binlog 體積會(huì)非常大,同時(shí),對(duì)于修改記錄多、字段長(zhǎng)度大的操作來(lái)說(shuō),記錄時(shí)性能消耗會(huì)很嚴(yán)重。閱讀的時(shí)候也需要特殊指令來(lái)進(jìn)行讀取數(shù)據(jù)。

MIXED 模式

內(nèi)容:是對(duì)上述STATEMENT 跟 ROW 兩種模式的混合使用。

細(xì)節(jié):對(duì)于絕大部分操作,都使用 STATEMENT 來(lái)進(jìn)行 binlog 的記錄,只有以下操作使用 ROW 來(lái)實(shí)現(xiàn):表的存儲(chǔ)引擎為 NDB,使用了uuid() 等不確定函數(shù),使用了 insert delay 語(yǔ)句,使用了臨時(shí)表

主從同步流程:

1、主節(jié)點(diǎn)必須啟用二進(jìn)制日志,記錄任何修改了數(shù)據(jù)庫(kù)數(shù)據(jù)的事件。

2、從節(jié)點(diǎn)開(kāi)啟一個(gè)線程(I/O Thread)把自己扮演成 mysql 的客戶端,通過(guò) mysql 協(xié)議,請(qǐng)求主節(jié)點(diǎn)的二進(jìn)制日志文件中的事件 。

3、主節(jié)點(diǎn)啟動(dòng)一個(gè)線程(dump Thread),檢查自己二進(jìn)制日志中的事件,跟對(duì)方請(qǐng)求的位置對(duì)比,如果不帶請(qǐng)求位置參數(shù),則主節(jié)點(diǎn)就會(huì)從第一個(gè)日志文件中的第一個(gè)事件一個(gè)一個(gè)發(fā)送給從節(jié)點(diǎn)。

4、從節(jié)點(diǎn)接收到主節(jié)點(diǎn)發(fā)送過(guò)來(lái)的數(shù)據(jù)把它放置到中繼日志(Relay log)文件中。并記錄該次請(qǐng)求到主節(jié)點(diǎn)的具體哪一個(gè)二進(jìn)制日志文件內(nèi)部的哪一個(gè)位置(主節(jié)點(diǎn)中的二進(jìn)制文件會(huì)有多個(gè))。

5、從節(jié)點(diǎn)啟動(dòng)另外一個(gè)線程(sql Thread ),把 Relay log 中的事件讀取出來(lái),并在本地再執(zhí)行一次。

mysql默認(rèn)的復(fù)制方式是異步的,并且復(fù)制的時(shí)候是有并行復(fù)制能力的。主庫(kù)把日志發(fā)送給從庫(kù)后不管了,這樣會(huì)產(chǎn)生一個(gè)問(wèn)題就是假設(shè)主庫(kù)掛了,從庫(kù)處理失敗了,這時(shí)候從庫(kù)升為主庫(kù)后,日志就丟失了。由此產(chǎn)生兩個(gè)概念。

全同步復(fù)制

主庫(kù)寫入binlog后強(qiáng)制同步日志到從庫(kù),所有的從庫(kù)都執(zhí)行完成后才返回給客戶端,但是很顯然這個(gè)方式的話性能會(huì)受到嚴(yán)重影響。

半同步復(fù)制

半同步復(fù)制的邏輯是這樣,從庫(kù)寫入日志成功后返回ACK確認(rèn)給主庫(kù),主庫(kù)收到至少一個(gè)從庫(kù)的確認(rèn)就認(rèn)為寫操作完成。

RedoLogbinlog跟redolog區(qū)別: redo log是InnoDB引擎特有的;binlog是MySQL的Server層實(shí)現(xiàn)的,所有引擎都可以使用。 redo log是物理日志,記錄的是在某個(gè)數(shù)據(jù)頁(yè)上做了什么修改;binlog是邏輯日志,記錄的是這個(gè)語(yǔ)句的原始邏輯,比如給ID=2這一行的c字段加1。 redo log是循環(huán)寫的,空間固定會(huì)用完;binlog是可以追加寫入的。追加寫是指binlog文件寫到一定大小后會(huì)切換到下一個(gè),并不會(huì)覆蓋以前的日志。

在MySQL中如果每一次的更新操作都需要寫進(jìn)磁盤,然后磁盤也要找到對(duì)應(yīng)的那條記錄,然后再更新,整個(gè)過(guò)程IO成本、查找成本都很高。先寫日志,再寫磁盤BinLog,RedoLog。

1、 記錄更新時(shí),InnoDB引擎就會(huì)先把記錄寫到RedoLog(里面,并更新內(nèi)存。同時(shí),InnoDB引擎會(huì)在空閑時(shí)將這個(gè)操作記錄更新到磁盤里面。

2、 如果更新太多RedoLog處理不了的時(shí)候,需先將RedoLog部分?jǐn)?shù)據(jù)寫到磁盤,然后擦除RedoLog部分?jǐn)?shù)據(jù)。

RedoLog的write pos 跟checkpoint

RedoLog有write pos 跟checkpoint

write pos :是當(dāng)前記錄的位置,一邊寫一邊后移,寫到第3號(hào)文件末尾后就回到0號(hào)文件開(kāi)頭。

check point:縮短數(shù)據(jù)庫(kù)的恢復(fù)時(shí)間,buffer pool空間不夠用時(shí),將臟頁(yè)刷新到磁盤,redolog不可用時(shí),刷新臟頁(yè)

redo log順序?qū)憣?shí)際上是循環(huán)寫固定幾個(gè)文件,寫滿一輪就要從頭開(kāi)始覆蓋。它包括兩個(gè)位點(diǎn),check point和write pos,write pos是寫到那個(gè)位置了,循環(huán)往后遞增,check point是當(dāng)前要擦除的位置。二者中間的空間是可寫入的,當(dāng)write pos追上check point時(shí),就會(huì)先停下更新,覆蓋掉一些記錄,然后繼續(xù)寫入redo log。

redo log 的crash-safe

MySQL支持用戶自定義在commit時(shí)如何將log buffer中的日志刷log file中。這種控制通過(guò)變量 innodb_flush_log_at_trx_commit 的值來(lái)決定。該變量有3種值:0、1、2,默認(rèn)為1。但注意,這個(gè)變量只是控制commit動(dòng)作是否刷新log buffer到磁盤。

當(dāng)設(shè)置為1的時(shí)候,事務(wù)每次提交都會(huì)將log buffer中的日志寫入os buffer并調(diào)用fsync()刷到log file on disk中。這種方式即使系統(tǒng)崩潰也不會(huì)丟失任何數(shù)據(jù),但是因?yàn)槊看翁峤欢紝懭氪疟P,IO的性能較差。 當(dāng)設(shè)置為0的時(shí)候,事務(wù)提交時(shí)不會(huì)將log buffer中日志寫入到os buffer,而是每秒寫入os buffer并調(diào)用fsync()寫入到log file on disk中。也就是說(shuō)設(shè)置為0時(shí)是(大約)每秒刷新寫入到磁盤中的,當(dāng)系統(tǒng)崩潰,會(huì)丟失1秒鐘的數(shù)據(jù)。 當(dāng)設(shè)置為2的時(shí)候,每次提交都僅寫入到os buffer,然后是每秒調(diào)用fsync()將os buffer中的日志寫入到log file on disk。

在主從復(fù)制結(jié)構(gòu)中,要保證事務(wù)的持久性和一致性,需要對(duì)日志相關(guān)變量設(shè)置為如下:

如果啟用了二進(jìn)制日志,則設(shè)置sync_binlog=1,即每提交一次事務(wù)同步寫到磁盤中。 總是設(shè)置innodb_flush_log_at_trx_commit=1,即每提交一次事務(wù)都寫到磁盤中。

上述兩項(xiàng)變量的設(shè)置保證了:每次提交事務(wù)都寫入二進(jìn)制日志和事務(wù)日志,并在提交時(shí)將它們刷新到磁盤中。

有了redo log,InnoDB就可以保證即使數(shù)據(jù)庫(kù)發(fā)生異常重啟,之前提交的記錄都不會(huì)丟失,這個(gè)能力稱為crash-safe。redolog兩階段提交`:為了讓binlog跟redolog兩份日志之間的邏輯一致。提交流程大致如下:

1 prepare階段 --> 2 寫binlog --> 3 commit

1.當(dāng)在2之前崩潰時(shí),重啟恢復(fù)后發(fā)現(xiàn)沒(méi)有commit,回滾。備份恢復(fù):沒(méi)有binlog 。一致2.當(dāng)在3之前崩潰時(shí),重啟恢復(fù)發(fā)現(xiàn)雖沒(méi)有commit,但滿足prepare和binlog完整,所以重啟后會(huì)自動(dòng)commit。備份:有binlog. 一致

UndoLog

undo log有兩個(gè)作用:提供回滾和多個(gè)行版本控制(MVCC).主要分為兩種

在數(shù)據(jù)修改的時(shí)候,不僅記錄了redo,還記錄了相對(duì)應(yīng)的undo,如果因?yàn)槟承┰驅(qū)е率聞?wù)失敗或回滾了,可以借助該undo進(jìn)行回滾。當(dāng)delete一條記錄時(shí),undo log中會(huì)記錄一條對(duì)應(yīng)的insert記錄,反之亦然,當(dāng)update一條記錄時(shí),它記錄一條對(duì)應(yīng)相反的update記錄。

當(dāng)執(zhí)行rollback時(shí),就可以從undo log中的邏輯記錄讀取到相應(yīng)的內(nèi)容并進(jìn)行回滾

insert undo log

代表事務(wù)在insert新記錄時(shí)產(chǎn)生的undo log, 只在事務(wù)回滾時(shí)需要,并且在事務(wù)提交后可以被立即丟棄

update undo log

事務(wù)在進(jìn)行update或delete時(shí)產(chǎn)生的undo log; 不僅在事務(wù)回滾時(shí)需要,在快照讀時(shí)也需要;所以不能隨便刪除,只有在快速讀或事務(wù)回滾不涉及該日志時(shí),對(duì)應(yīng)的日志才會(huì)被purge線程統(tǒng)一清除

以上就是MySQL 主從同步,事務(wù)回滾的實(shí)現(xiàn)原理的詳細(xì)內(nèi)容,更多關(guān)于MySQL 主從同步,事務(wù)回滾的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫(kù)
主站蜘蛛池模板: 蔡司三坐标-影像测量机-3D扫描仪-蔡司显微镜-扫描电镜-工业CT-ZEISS授权代理商三本工业测量 | 预制舱-电力集装箱预制舱-模块化预制舱生产厂家-腾达电器设备 | 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 酒精检测棒,数显温湿度计,酒安酒精测试仪,酒精检测仪,呼气式酒精检测仪-郑州欧诺仪器有限公司 | 365文案网_全网创意文案句子素材站 | 四川实木门_成都实木门 - 蓬溪聚成门业有限公司 | 质检报告_CE认证_FCC认证_SRRC认证_PSE认证_第三方检测机构-深圳市环测威检测技术有限公司 | 胶水,胶粘剂,AB胶,环氧胶,UV胶水,高温胶,快干胶,密封胶,结构胶,电子胶,厌氧胶,高温胶水,电子胶水-东莞聚力-聚厉胶粘 | 佛山商标注册_商标注册代理|专利注册申请_商标注册公司_鸿邦知识产权 | 半自动预灌装机,卡式瓶灌装机,注射器灌装机,给药器灌装机,大输液灌装机,西林瓶灌装机-长沙一星制药机械有限公司 | 震动筛选机|震动分筛机|筛粉机|振筛机|振荡筛-振动筛分设备专业生产厂家高服机械 | 【MBA备考网】-2024年工商管理硕士MBA院校/报考条件/培训/考试科目/提前面试/考试/学费-MBA备考网 | 武汉宣传片制作-视频拍摄-企业宣传片公司-武汉红年影视 | 美的商用净水器_美的直饮机_一级代理经销商_Midea租赁价格-厂家反渗透滤芯-直饮水批发品牌售后 | 广西教师资格网-广西教师资格证考试网 | 金刚网,金刚网窗纱,不锈钢网,金刚网厂家- 河北萨邦丝网制品有限公司 | 保定市泰宏机械制造厂-河北铸件厂-铸造厂-铸件加工-河北大件加工 | 等离子表面处理机-等离子表面活化机-真空等离子清洗机-深圳市东信高科自动化设备有限公司 | 托利多电子平台秤-高精度接线盒-托利多高精度电子秤|百科 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 深圳装修_店面装修设计_餐厅设计_装修全包价格-尚泰装饰设计 | 喷砂机厂家_自动喷砂机生产_新瑞自动化喷砂除锈设备 | 杭州网络公司_百度SEO优化-外贸网络推广_抖音小程序开发-杭州乐软科技有限公司 | 点胶机_点胶阀_自动点胶机_智能点胶机_喷胶机_点胶机厂家【欧力克斯】 | 盐城网络公司_盐城网站优化_盐城网站建设_盐城市启晨网络科技有限公司 | 微信小程序定制,广州app公众号商城网站开发公司-广东锋火 | 高低温万能试验机_拉力试验机_拉伸试验机-馥勒仪器科技(上海)有限公司 | 纯化水设备-EDI-制药-实验室-二级反渗透-高纯水|超纯水设备 | 专业深孔加工_东莞深孔钻加工_东莞深孔钻_东莞深孔加工_模具深孔钻加工厂-东莞市超耀实业有限公司 | 卸料器-卸灰阀-卸料阀-瑞安市天蓝环保设备有限公司 | 山东石英砂过滤器,除氟过滤器「价格低」-淄博胜达水处理 | 铝合金重力铸造_铝合金翻砂铸造_铝铸件厂家-东莞市铝得旺五金制品有限公司 | 流量卡中心-流量卡套餐查询系统_移动电信联通流量卡套餐大全 | 知网论文检测系统入口_论文查重免费查重_中国知网论文查询_学术不端检测系统 | 物联网卡_物联网卡购买平台_移动物联网卡办理_移动联通电信流量卡通信模组采购平台? | 安徽千住锡膏_安徽阿尔法锡膏锡条_安徽唯特偶锡膏_卡夫特胶水-芜湖荣亮电子科技有限公司 | 品牌设计_VI设计_电影海报设计_包装设计_LOGO设计-Bacross新越品牌顾问 | 彭世修脚_修脚加盟_彭世修脚加盟_彭世足疗加盟_足疗加盟连锁_彭世修脚技术培训_彭世足疗 | 置顶式搅拌器-优莱博化学防爆冰箱-磁驱搅拌器-天津市布鲁克科技有限公司 | 蔡司三坐标-影像测量机-3D扫描仪-蔡司显微镜-扫描电镜-工业CT-ZEISS授权代理商三本工业测量 | 生产自动包装秤_颗粒包装秤_肥料包装秤等包装机械-郑州鑫晟重工科技有限公司 |