Mysql 二進制日志


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

1、恢復(recovery2、復制(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_usebinlog_cache_disk_use的狀態,可以判斷當前binlog_cache_size的設置是否合適

Binlog_cache_size的默認大小為32KB

 

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

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

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

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

(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)使用了臨時表


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM