成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

不會吧,不會吧,還有人不知道 binlog ?

數(shù)據(jù)庫 MySQL
上篇阿星詳細聊了redo log(重做日志),但是在MySQL數(shù)據(jù)庫中還有一種二進制日志叫binlog(歸檔日志)。

 前言

上篇阿星詳細聊了redo log(重做日志),但是在MySQL數(shù)據(jù)庫中還有一種二進制日志叫binlog(歸檔日志)。

redo log它是物理日志,記錄內(nèi)容是“在某個數(shù)據(jù)頁上做了什么修改”,屬于InnoDB存儲引擎。

而binlog是邏輯日志,記錄內(nèi)容是語句的原始邏輯,類似于“給ID=2這一行的c字段加1”,屬于MySQL Server層。

binlog

不管用什么存儲引擎,只要發(fā)生了表數(shù)據(jù)更新,都會產(chǎn)生binlog日志。

那binlog到底是用來干嘛的?

可以說MySQL數(shù)據(jù)庫的數(shù)據(jù)備份、主備、主主、主從都離不開binlog,需要依靠binlog來同步數(shù)據(jù),保證數(shù)據(jù)一致性。

binlog會記錄所有涉及更新數(shù)據(jù)的邏輯操作,并且是順序?qū)憽?/p>

記錄格式

binlog日志有三種格式,可以通過binlog_format參數(shù)指定。

  •  statement
  •  row
  •  mixed

指定statement,記錄的內(nèi)容是SQL語句原文,比如執(zhí)行一條update T set update_time=now() where id=1,記錄的內(nèi)容如下。

同步數(shù)據(jù)時,會執(zhí)行記錄的SQL語句,但是有個問題,update_time=now()這里會獲取當前系統(tǒng)時間,直接執(zhí)行會導致與原庫的數(shù)據(jù)不一致。

為了解決這種問題,我們需要指定為row,記錄的內(nèi)容不再是簡單的SQL語句了,還包含操作的具體數(shù)據(jù),記錄內(nèi)容如下。

row格式記錄的內(nèi)容看不到詳細信息,要通過mysqlbinlog工具解析出來。

update_time=now()變成了具體的時間update_time=1627112756247,條件后面的@1、@2、@3都是該行數(shù)據(jù)第1個~3個字段的原始值(假設這張表只有3個字段)。

這樣就能保證同步數(shù)據(jù)的一致性,通常情況下都是指定為row,這樣可以為數(shù)據(jù)庫的恢復與同步帶來更好的可靠性。

但是這種格式,需要更大的容量來記錄,比較占用空間,恢復與同步時會更消耗IO資源,影響執(zhí)行速度。

所以就有了一種折中的方案,指定為mixed,記錄的內(nèi)容是前兩者的混合。

MySQL會判斷這條SQL語句是否可能引起數(shù)據(jù)不一致,如果是,就用row格式,否則就用statement格式。

寫入機制

binlog的寫入時機也非常簡單,事務執(zhí)行過程中,先把日志寫到binlog cache,事務提交的時候,再把binlog cache寫到binlog文件中。

因為一個事務的binlog不能被拆開,無論這個事務多大,也要確保一次性寫入,所以系統(tǒng)會給每個線程分配一個塊內(nèi)存作為binlog cache。

我們可以通過binlog_cache_size參數(shù)控制單個線程binlog cache大小,如果存儲內(nèi)容超過了這個參數(shù),就要暫存到磁盤(Swap)。

binlog日志刷盤流程如下

  •  上圖的write,是指把日志寫入到文件系統(tǒng)的page cache,并沒有把數(shù)據(jù)持久化到磁盤,所以速度比較快
  •  上圖的fsync,才是將數(shù)據(jù)持久化到磁盤的操作

write和fsync的時機,可以由參數(shù)sync_binlog控制,默認是0。

為0的時候,表示每次提交事務都只write,由系統(tǒng)自行判斷什么時候執(zhí)行fsync。

雖然性能得到提升,但是機器宕機,page cache里面的binglog會丟失。

為了安全起見,可以設置為1,表示每次提交事務都會執(zhí)行fsync,就如同binlog日志刷盤流程一樣。

最后還有一種折中方式,可以設置為N(N>1),表示每次提交事務都write,但累積N個事務后才fsync。

在出現(xiàn)IO瓶頸的場景里,將sync_binlog設置成一個比較大的值,可以提升性能。

同樣的,如果機器宕機,會丟失最近N個事務的binlog日志。 

 

責任編輯:龐桂玉 來源: 數(shù)據(jù)庫開發(fā)
相關(guān)推薦

2021-08-04 08:31:10

MySQL數(shù)據(jù)庫日志

2021-08-08 21:53:40

Arthas指令表達式

2020-08-05 14:28:32

編程程序員代碼

2025-02-19 12:40:33

JWT

2021-12-06 17:44:56

MHAMySQL高可用

2022-10-28 09:51:18

PrintfLinux開發(fā)

2021-01-21 05:52:11

斷言assert程序員

2010-10-20 09:10:29

私有云

2021-11-02 19:14:58

Spring數(shù)據(jù)

2023-11-02 08:25:25

組件ReactUI

2025-04-17 02:30:00

2021-09-10 22:25:37

iOS蘋果安卓

2020-07-08 12:44:00

大數(shù)據(jù)IT互聯(lián)網(wǎng)

2025-05-27 08:50:00

2021-01-13 09:02:15

結(jié)構(gòu)瀏覽器服務器

2025-02-27 07:47:09

2020-08-26 13:30:18

代碼設計模式前端

2021-06-07 17:51:27

反斜杠引號Python

2020-12-02 08:31:47

Elasticsear

2018-06-28 08:40:23

Raid機械硬盤
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 久在线视频 | 欧美精品v国产精品v日韩精品 | www国产成人免费观看视频 | 日韩精品av一区二区三区 | 91视频日本 | 中文字幕国产一区 | 91视频.| 国产视频1区| 成人欧美一区二区三区在线播放 | 久久日韩精品一区二区三区 | 黄网站免费在线观看 | 亚洲a一区| 成人亚洲网站 | 3p视频在线观看 | www国产成人免费观看视频,深夜成人网 | 亚洲欧美日韩一区二区 | 日韩看片 | 国产精品久久久久久久久久 | 亚洲福利 | 亚洲一区二区视频在线播放 | 另类 综合 日韩 欧美 亚洲 | 国产精品日韩欧美一区二区 | 国产精品欧美一区二区三区不卡 | 欧美激情在线播放 | ww 255hh 在线观看 | 久久国产高清 | 成人av播放 | www.久久久.com| 成人精品一区二区三区 | 国产在线精品区 | 亚洲第一天堂无码专区 | 日本三级黄视频 | 国产高清视频一区 | 国产精品久久久久久久久久久久冷 | 亚洲成人精品视频 | 午夜国产在线 | 影视先锋av资源噜噜 | 色视频在线免费观看 | 色资源在线观看 | 黄色片在线免费看 | 日韩福利在线观看 |