程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL中二進制與重做日記文件的根本概念進修教程

MySQL中二進制與重做日記文件的根本概念進修教程

編輯:MySQL綜合教程

MySQL中二進制與重做日記文件的根本概念進修教程。本站提示廣大學習愛好者:(MySQL中二進制與重做日記文件的根本概念進修教程)文章只能為提供參考,不一定能成為您想要的結果。以下是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的默許值

20151124100730266.png (462×152)

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

20151124100751510.png (365×121)

參數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影響側重做日記文件的屬性。

20151124100900352.png (695×286)

重做日記與二進制日記的差別:

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變量,該值代表了最初的檢討點不克不及跨越這個閥值。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved