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

首頁 > 數據庫 > MySQL > 正文

MySQL中二進制與重做日志文件的基本概念學習教程

2024-07-24 13:08:16
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了MySQL中二進制日志文件與重做日志文件的基本概念學習教程,講到了一些重做日志與二進制日志的區別,需要的朋友可以參考下

二進制日志

二進制日志記錄了所有對數據庫執行更改的操作,二進制主要有以下兩種作用:

1、恢復(recovery)2、復制(replication)

二進制日志的啟動:配置參數log-bin[=name],如果不指定name,則默認二進制日志文件名為主機名,后綴名為二級制日志的序列號,所在路徑為數據庫所在目錄。

以index為后綴的文件為二進制日志的索引文件,用來存儲過往生產的二進制日志。

和二進制日志相關的參數:

max_binlog_size、binlog_cache_size、sync_binlog、binlog-do-db、binlog-ignore-db、log-slave-update、binlog_format

max_binlog_size,該參數指定了單個二進制日志文件的最大值,如果超過該值,則產生新的二進制日志文件,后綴名+1,并記錄到.index文件,從Mysql5.0開始的默認值為1073741824,代表1G。

Mysql5.5的默認值

MySQL中二進制與重做日志文件的基本概念學習教程

當使用事務的存儲引擎InnoDB時,所有未提交的事務會記錄到一個緩存中,等待事務提交時,直接將緩沖中的二進制日志寫入二進制日志文件,而該緩沖的大小由binlog_cache_size決定,默認大小為32KB,此外,binlog_cache_size是基于回話的,也就是,當一個線程開始一個事務時,mysql會自動分配一個大小為binlog_cache_size的緩存,因此該值得設置需要相當小心,可以通過show global status 查看binlog_cache_use、binlog_cache_disk_use的狀態,可以判斷當前binlog_cache_size的設置是否合適。

Binlog_cache_size的默認大小為32KB

MySQL中二進制與重做日志文件的基本概念學習教程

參數sync_binlog=[N]表示每寫緩存多少次就同步到磁盤,如果將N設置為1,則表示采用同步寫磁盤的方式來寫二進制日志,該參數很重要,這個以后還會提到。值得注意的是,在將該參數設置為1時,也應該將innodb_support_xa設為1來解決,這可以確保二進制日志和InnoDB存儲引擎數據文件的同步。

參數binlog-do-db和binlog-ignore-db表示需要寫入或者忽略寫入哪些庫的日志,默認值為空,則表示將所有庫的日志同步到二進制日志。

Log-slave-update該參數在搭建master=>slave=>slave的架構時,需要配置。

Binlog_format參數也特別重要。從mysql5.1版本開始引入這個參數,該參數可以設置的值有STATEMENT/、ROW、MIXED;

(1)STATEMENT格式和之前的mysql版本一樣,二進制日志文件記錄的是日志的邏輯失SQL語句。

(2)在ROW格式下,二進制日志記錄的不再是簡單的SQL語句了,而是記錄表的行更改情況,此時可以將InnoDB的事務隔離基本設為READ COMMITTED,以獲得更好的并發性。

(3)MIXED格式下,mysql默認采用的STATEMENT格式進行二進制日志文件的記錄,但是在一些情況下會使用ROW格式,可能的情況包括:

1)表的存儲引擎為NDB,這時對于表的DML操作都會以ROW格式記錄

2)使用了UUID()、USER()、CURRENT_USER()、FOUND_ROWS()、ROW_COUNT()等不確定函數

3)使用了INSERT DELAY語句

4)使用了用戶定義函數

5)使用了臨時表

重做日志

Mysql默認情況下會有兩個文件:ib_logfile0和ib_logfile1,這兩個文件就是重做日志文件,或者事務日志。

重做日志的目的:萬一實例或者介質失敗,重做日志文件就能派上用場。

每個InnoDB存儲引擎至少有一個重做日志文件組,每個文件組下至少有2個重做日志文件,如默認的ib_logfile0、ib_logfile1。InnoDB存儲引擎先寫重做日志文件1,當達到文件的最后時,會切換至重做日志文件2,當重做日志文件2也被寫滿時,會再被切換到重做日志文件1中。

影響重做日志的參數:

Innodb_log_file_size、innodb_log_files_in_group、innodb_log_group_home_dir影響著重做日志文件的屬性。

MySQL中二進制與重做日志文件的基本概念學習教程

重做日志與二進制日志的區別:

1)二進制日志會記錄所有與mysql有關的日志記錄,包括InnoDB等其他存儲引擎的日志,而InnoDB存儲引擎的重做日志只記錄有關其本身的事務日志,

2)記錄的內容不容,不管你將二進制日志文件記錄的格式設為哪一種,其記錄的都是關于一個事務的具體操作內容,而InnoDB存儲引擎的重做日志文件記錄的關于每個頁的更改的物理情況;

3)寫入的時間也不同,二進制日志文件是在事務提交前進行記錄的,而在事務進行的過程中,不斷有重做日志條目被寫入重做日志文件中。

從日志緩沖寫入磁盤上的重做日志文件的條件:

在主線程中每秒會將重做日志緩沖寫入磁盤的重做日志文件中,不論事務是否提交。另一個觸發這個過程是由參數innodb_flush_log_at_trx_commit控制,表示在提交時,處理重做日志的方式。

參數innodb_flush_log_at_trx_commit可設的值有0、1、2,0代表當提交事務時,并不將事務的重做日志寫入磁盤上的日志文件,而是等待主線程每秒的刷新,而1和2不同的地方在于:1是在commit時將重做日志緩沖同步寫到磁盤;2是重做日志異步寫到磁盤,即不能完全保證commit時肯定會寫入重做日志文件,只是有這個動作。

值得注意的一點:因為重做日志有個capacity變量,該值代表了最后的檢查點不能超過這個閥值。


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 湖南省| 军事| 屯昌县| 垫江县| 宁远县| 常德市| 遂宁市| 嵊泗县| 广宗县| 韩城市| 苗栗县| 吕梁市| 常山县| 台安县| 永新县| 南通市| 屏东县| 罗平县| 南丰县| 繁昌县| 民和| 九龙县| 黄骅市| 内江市| 六枝特区| 祁门县| 宿松县| 仁寿县| 平凉市| 青海省| 临漳县| 湖州市| 永福县| 天等县| 镇安县| 武城县| 大理市| 容城县| 辽中县| 锡林郭勒盟| 越西县|