2. Mysql技術(shù)內(nèi)幕-日志文件

[TOC]

文件

錯(cuò)誤日志

錯(cuò)誤日志文件對(duì)mysql的啟動(dòng)運(yùn)行關(guān)閉過(guò)程進(jìn)行了記錄
SHOW VARIABLES LIKE 'log_error'

慢查詢?nèi)罩?/h2>

默認(rèn)不開啟,需要手動(dòng)設(shè)置log_slow_queries設(shè)置為true
select * from mysql.slow_log;

查詢?nèi)罩?/h2>

記錄了所有對(duì)mysql數(shù)據(jù)庫(kù)請(qǐng)求的信息,無(wú)論是否得到正確的執(zhí)行

二進(jìn)制文件 binlog

記錄了對(duì)mysql數(shù)據(jù)庫(kù)執(zhí)行更改的所有操作,然后操作本身沒有對(duì)數(shù)據(jù)庫(kù)發(fā)生變化,也可能進(jìn)入二進(jìn)制文件

二進(jìn)制文件主要有以下幾種作用

  1. 恢復(fù): 某些數(shù)據(jù)的恢復(fù)需要二進(jìn)制日志,
  2. 復(fù)制: 通過(guò)復(fù)制和執(zhí)行二進(jìn)制日志
  3. 審計(jì): 通過(guò)二進(jìn)制日志中的信息來(lái)進(jìn)行審計(jì)

參數(shù)

  1. max_binlog_size 指定了單個(gè)二進(jìn)制文件的最大值,如果超過(guò)該值則產(chǎn)生新的二進(jìn)制日志文件
  2. binlog_cache_size 所有未提交的二進(jìn)制文件會(huì)記錄到一個(gè)緩存中,等該事務(wù)提交,直接將緩存寫入到二進(jìn)制日志文件
  3. sync_binlog 二進(jìn)制日志并不是每次寫的時(shí)候都寫入到磁盤,可以設(shè)置次數(shù)
  4. binlog-do-db 和binlog-ingore-db 表示需要或忽略寫入那些庫(kù)的日志
  5. log-slave-update slave是否寫binlog
  6. binlog_format
    1. statement格式: sql語(yǔ)句
    2. row: 解決在readcommited情況下主從不一致,但是文件大小會(huì)增加,但在repeatedread由于next-key lock解決了該問(wèn)題
    3. mixed

innoDB存儲(chǔ)引擎文件

表空間文件

innodb采用將存儲(chǔ)的數(shù)據(jù)按照表空間進(jìn)行存放的設(shè)計(jì),在默認(rèn)配置下會(huì)有一個(gè)初始大小為10mb,名為ibdata1的文件,該文件就是默認(rèn)的表空間文件,用戶可以通過(guò)參數(shù)innodb_data_file_path對(duì)其進(jìn)行設(shè)置

innodb_file_per_table 每個(gè)表產(chǎn)生獨(dú)立的.ibd文件


image

重做日志文件

在默認(rèn)情況下,innodb的數(shù)據(jù)目錄下會(huì)有兩個(gè)名為ib_logfile0和ib_logfile1的文件,這個(gè)就是重做日志文件,可以使用重做日志恢復(fù)到宕機(jī)前的數(shù)據(jù),保護(hù)數(shù)據(jù)完整性

每個(gè)innodb至少有一個(gè)重做日志組,且每個(gè)組內(nèi)至少有兩個(gè)重做日志文件,我們可以創(chuàng)建多個(gè)重做日志組到不同磁盤,提高重做日志的高可用性,并且在組內(nèi)寫完一個(gè)重做日志文件后再寫另一個(gè)重做日志文件


1.png

參數(shù)介紹

  1. innodb_log_file_size 指定每個(gè)重做日志文件的大小
  2. innodb_log_files_in_group 重做日志文件組中文件個(gè)數(shù)
  3. innodb_mirrored_log_groups 重做日志文件組個(gè)數(shù)
  4. innodb_log_group_home_dir 重做日志文件目錄

重做日志寫入過(guò)程


1.png

重做日志文件的寫入不是直接寫,而是先寫到重做日志緩沖,然后按照一定條件寫入日志文件,并且由于在磁盤寫入時(shí)是按照扇區(qū)為單位進(jìn)行寫入,因此寫入必定成功,不用進(jìn)行doublewrite

redo log和binlog區(qū)別

  1. 二進(jìn)制文件包括inndo,myisam,heap等其他存儲(chǔ)引擎日志,而redolog只是innodb本身的事務(wù)日志
  2. 記錄的內(nèi)容不同: binlog記錄一個(gè)事務(wù)的具體操作內(nèi)容,而重做日志記錄每個(gè)頁(yè)更改的物理情況
  3. 寫入時(shí)間不同: binlog只在日志提交時(shí)記錄,redolog在事務(wù)進(jìn)行中也會(huì)寫入
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容