国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql對binlog的處理說明

2024-07-24 12:44:21
字體:
來源:轉載
供稿:網友
然而這里不打算對某種存儲引擎的實現細節進行描述,也不打算介紹各種存儲引擎的優缺點,只是描述一下mysql如何處理binlog,并澄清幾個容易混淆的問題。
Binlog對mysql而言是重要的,主要體現在它的功能上。Mysql官方文檔明確指出,binlog的啟動大概會為mysql增加1%的負載,因此在絕大多數情況下,binlog都不會成為mysql的性能瓶頸。
Binlog是mysql以二進制形式打印的日志,它默認不加密,不壓縮。每個正常的binlog文件頭部,有4個字節的標記,值為0xfe 0x62 0x69 0x6e。LOG_EVENT是binlog里的單位,即正常情況下binlog按照逐LOG_EVENT的形式增長。除去頭部的標記,binlog就是一個LOG_EVENT的序列。每個LOG_EVENT都獨立單元,沒有互相引用的關系,它也有自己的二進制頭部,主要是記錄了時間戳、類型標記等描述信息。
Mysql把磁盤操作的實現封裝在IO_CACHE結構里,這也方便了我們對binlog的研究和描述,后文如果沒有特別說明,讀寫binlog與讀寫IO_CACHE的含義相同。
為了解mysql寫入binlog的過程,可以找一個sql語句的處理過程進行跟蹤。以update為例,在最簡單的情況下,mysql會先調用為存儲引擎開放的接口ha_update_row,然而執行binlog_query對binlog進行寫操作。這樣處理的原因是,在主從備份的場景下,如果主庫先寫入binlog成功、在執行update的過程中crash,從庫有可能執行update成功,此時主庫重啟之后,與從庫的數據不一致。如果update操作發生在事務性的表上,在寫入binlog之后會執行開放接口ha_autocommit_or_rollback,由存儲引擎判斷操作結果。
在主從備份的場景下,主庫相當于server,從庫相當于client,雙方采用tcp短連接。從庫發出讀取日志的請求,主庫接收請求、讀取本地binlog、然后發送給從庫。從庫接收日志,進行簡單校驗后寫本地日志,稱為relay log。此處從庫的流程專門由一個線程負責,稱為同步io線程。從庫還有一個線程,稱為同步sql線程。它的行為是,定期讀取relay log,解析并執行同步過來的sql語句。

下面回答幾個問題:

1. binlog的格式?
二進制順序存儲,不加密,不壓縮

2.binlog使用WAL嗎?

No
3.主庫發送binlog,是使用內存里的copy嗎?

無法確定,很有可能是先從磁盤上讀一份,然后發送。

4. relaylog使用WAL嗎?

Yes。從庫接收到日志后,會先寫relay log

5. binlog和relaylog的SQL是否一致?

在網絡傳輸正確性可靠的前提下,yes

提一個問題:
既然binlog不使用WAL,那么在主從場景下,mysql異常之后,主庫和從庫是否會不一致呢?

之前有個問題一直沒弄明白:
既然mysql是先做數據操作、再寫binlog,如果寫binlog的時候失敗,mysql又crash,數據怎么辦?
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 类乌齐县| 石城县| 江都市| 应城市| 麻阳| 凤翔县| 景东| 洛扎县| 策勒县| 开化县| 阆中市| 文安县| 许昌市| 师宗县| 双桥区| 彰化市| 大洼县| 株洲县| 响水县| 二连浩特市| 余江县| 西昌市| 靖安县| 泸州市| 定边县| 新巴尔虎右旗| 五峰| 峡江县| 贵德县| 寻甸| 长子县| 旅游| 革吉县| 宜城市| 镇雄县| 滁州市| 西吉县| 通道| 大同县| 保德县| 泰兴市|