MySQL中二進位與重做記錄檔的基本概念學習教程_Mysql

來源:互聯網
上載者:User

二進位日誌
二進位日誌記錄了所有對資料庫執行更改的操作,二進位主要有以下兩種作用:

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的預設值

當使用事務的儲存引擎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

參數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影響著重做記錄檔的屬性。

重做日誌與二進位日誌的區別:

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變數,該值代表了最後的檢查點不能超過這個閥值。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.