【書(shū) : InnoDB 存儲(chǔ)引擎】第3章 文件

3.1 參數(shù)文件

參數(shù)類(lèi)型分為兩類(lèi): 動(dòng)態(tài)(dynamic)和靜態(tài)(static)

動(dòng)態(tài)參數(shù)意味著可以在 MYSQL 實(shí)例運(yùn)行中進(jìn)行更改挡毅, 靜態(tài)參數(shù)說(shuō)明在整個(gè)實(shí)例生命周期內(nèi)都不能進(jìn)行更改诈豌。

對(duì)動(dòng)態(tài)參數(shù)料身,可以用 set@@global|@@session 來(lái)更改。

3.2 日志文件

3.2.1 錯(cuò)誤文件

3.2.2 慢查詢(xún)文件

相關(guān)參數(shù)查看:

mysql>show variables like '%slow%'

設(shè)置 long_query_time 這個(gè)閾值胡, MySQL 會(huì)記錄運(yùn)行時(shí)間超過(guò)該值的所有 SQL 語(yǔ)句, 單運(yùn)行時(shí)間正好等于 long_query_time 的情況并不會(huì)被記錄下。從 Mysql 5.1 開(kāi)始帚屉, long_query_time 開(kāi)始以微秒記錄 SQL 語(yǔ)句運(yùn)行時(shí)間, 之前禁用 秒為單位漾峡。

參數(shù) log_queries_not_using_indexes: 如果運(yùn)行的 SQL 語(yǔ)句沒(méi)有使用索引攻旦, 則 Mysql 數(shù)據(jù)庫(kù)同樣會(huì)將這條 SQL 語(yǔ)句記錄到慢查詢(xún)?nèi)罩疚募?/p>

Mysql 5.6.5 新增 log_throttle_queries_not_using_indexes, 用來(lái)表示每分鐘允許記錄到 slow log 的且未使用索引的 SQL 語(yǔ)句次數(shù)。 默認(rèn)為 0 生逸, 表示沒(méi)有限制牢屋。

Mysql 提供命令 mysqldumpslow 命令,來(lái)分析 慢查詢(xún)文件槽袄。

Mysql 5.1 開(kāi)始烙无, 慢查詢(xún)?nèi)罩居涗浛梢苑湃胍粡埍碇校?是的用戶的查詢(xún)更加方便和直觀。在 mysql 數(shù)據(jù)庫(kù)中的 表 slow_log.?

參數(shù) log_output 指定了慢查詢(xún)輸出格式遍尺, 默認(rèn)為 FILE截酷, 可以將它設(shè)為 table , 然后就可以查詢(xún) slow_log 表乾戏。

查看 slow_log 表的定義會(huì)發(fā)現(xiàn)該表使用的是 CSV 引擎迂苛, 對(duì)大數(shù)據(jù)量下的查詢(xún)效率可能不高。 用戶可以把 slow_log 表的引擎轉(zhuǎn)換為 MyISAM 歧蕉, 并在 start_time 列上添加索引以進(jìn)一步提高查詢(xún)的效率灾部。 但是康铭, 如果已經(jīng)啟動(dòng)了慢查詢(xún)惯退, 將會(huì)提示錯(cuò)誤。

Mysql 增加了對(duì)于邏輯讀取(logical reads)和物理讀却犹佟(physical reads)的統(tǒng)計(jì)催跪。這里的物理讀取時(shí)指從磁盤(pán)進(jìn)行 IO 讀取的次數(shù), 邏輯讀取包含所有的讀取夷野, 不管是磁盤(pán)還是緩沖池懊蒸。

用戶可以通過(guò)額外的參數(shù) long_query_io 將超過(guò)邏輯 IO 次數(shù)的 SQL 語(yǔ)句記錄到 slow log 中, 該值默認(rèn)為 100.

參數(shù) slow_query_tye 表示啟用 show log 的方式悯搔。 // 在 mysql 5.6.33 測(cè)試時(shí)骑丸, 未發(fā)現(xiàn)該參數(shù)。

3.2.3 查詢(xún)?nèi)罩?/h3>

查詢(xún)?nèi)罩居涗浟怂袑?duì) Mysql 數(shù)據(jù)庫(kù)請(qǐng)求的信息,無(wú)論這些請(qǐng)求是否得到了正確的執(zhí)行通危。 默認(rèn)文件名: 主機(jī)名.log

從 mysql 5.1 開(kāi)始铸豁, 可以將查詢(xún)?nèi)罩镜挠涗浄湃?數(shù)據(jù)庫(kù) mysql 下的 general_log 表中, 該表的使用方法和 slow_log 基本一樣菊碟。

3.2.4 二進(jìn)制日志

二進(jìn)制文件(binary log)記錄了對(duì) mysql 數(shù)據(jù)庫(kù)執(zhí)行更改的所有操作节芥, 單不包含 select 和 show 這類(lèi)操作, 因?yàn)檫@類(lèi)操作對(duì)數(shù)據(jù)本身并沒(méi)有修改逆害。

可以通過(guò) show binlog event 查看二進(jìn)制的修改記錄头镊。

二進(jìn)制日志的主要作用:恢復(fù)(recovery), 復(fù)制(replication), 審計(jì)(audit)

參數(shù) max_binlog_size 指定了單個(gè)二進(jìn)制日志文件的最大值魄幕, 如果超過(guò)該值相艇, 則產(chǎn)生新的二進(jìn)制日志文件。 從 Mysql 5.0 開(kāi)始纯陨, 默認(rèn)值 為 1G厂捞。

參數(shù) binlog_cache_size, 默認(rèn)值 32K 。 當(dāng)使用事務(wù)的表存儲(chǔ)引擎(如 Innodb )是队丝, 所有未提交的二進(jìn)制日志會(huì)被記錄到一個(gè)緩存中去靡馁, 等該事務(wù)提交時(shí)直接將該緩沖中的二進(jìn)制日志寫(xiě)入二進(jìn)制日志文件。 當(dāng)一個(gè)線程開(kāi)始一個(gè)事務(wù)時(shí)机久, Mysql 會(huì)自動(dòng)分配一個(gè)大小為 binlog_cache_size 的緩存臭墨, 設(shè)置該值需要相當(dāng)小心。

通過(guò) show global status 查看 binlog_cache_use, binlog_cache_disk_use 的狀態(tài)膘盖, 可判斷當(dāng)前 binlog_cache_size 的設(shè)置是否合適胧弛。

參數(shù) sync_binlog=[N] 表示每寫(xiě)緩沖多少次就同步到磁盤(pán)。默認(rèn)值為 0 侠畔, 如果使用 innodb 進(jìn)行復(fù)制结缚, 并且想得到最大的高可用性, 建議該值設(shè)為 on软棺。

設(shè)為 1 時(shí)红竭, 會(huì)出現(xiàn)一種情況, 一個(gè)事務(wù) commit 之前喘落,會(huì)將二進(jìn)制日志立即寫(xiě)入磁盤(pán)茵宪。 ?如果已經(jīng)寫(xiě)入了日志,但提交還沒(méi)有發(fā)生瘦棋, 此時(shí)發(fā)生了宕機(jī)稀火,在下次啟動(dòng)時(shí), commit 并沒(méi)有發(fā)生赌朋, 事務(wù)會(huì)被回滾凰狞。 但 二進(jìn)制日志已經(jīng)記錄了該事務(wù)信息篇裁, 不能被回滾。 這個(gè)問(wèn)題可通過(guò)參數(shù) innodb_support_xa 設(shè)為 1 來(lái)解決赡若, 雖然 innodb_support_xa 與 XA 事務(wù)有關(guān)茴恰, 單它同時(shí)也確保了二進(jìn)制日志和 innodb 引擎數(shù)據(jù)文件的同步。

參數(shù) binlog-do-db 和 binlog-ignore-db 表示需要寫(xiě)入或忽略那些庫(kù)的日志斩熊。 默認(rèn)為空往枣, 表示需要同步所有庫(kù)的日志到二進(jìn)制日志。

Mysql 5.1 引入了 binlog_format 參數(shù)粉渠, 該參數(shù)可設(shè)的值有 statement, row 和 mixed.

(1) statement . 二進(jìn)制日志文件記錄的是日志的邏輯 sql 語(yǔ)句分冈。

(2) row . 記錄表的行更改情況。statement 的復(fù)制問(wèn)題得到解決霸株。 從 mysql 5.1 開(kāi)始雕沉, 如果設(shè)置了 binlog_format 為row, 可以將 innodb 事務(wù)隔離級(jí)別設(shè)為 read commited ,以獲得更好的并發(fā)性去件。

(3) mixed. 默認(rèn)采用 statement 格式坡椒, 但是在一些情況下回使用 row 格式。?

在通常情況下尤溜, 將參數(shù) binlog_format 設(shè)置為 row 倔叼, 可以為數(shù)據(jù)庫(kù)的恢復(fù)和復(fù)制帶來(lái)更好的可靠性。 的那會(huì)這會(huì)使二進(jìn)制文件大小增加宫莱, 某些情況下丈攒, 會(huì)增大很多。

要查看二進(jìn)制文件的內(nèi)容授霸, 必須通過(guò) mysql 提供的工具 mysqlbinlog .?

[root]#mysqlbinlog --start-position=203 mysql-bin.000184

binlog_format 為 row 時(shí)巡验, 查看需要加上參數(shù) -v 或 -vv 。 -vv 比 -v 多顯示出更新的類(lèi)型碘耳。

3.3 套接字文件

3.4 pid 文件

3.5 表結(jié)構(gòu)定義文件

無(wú)論采用何種存儲(chǔ)引擎显设, mysql 都有一個(gè) 以 frm 為后綴名的文件, 這個(gè)文件記錄了該表的表結(jié)構(gòu)定義辛辨。

3.6 InnoDB 存儲(chǔ)引擎文件

3.6.1 表空間文件

在默認(rèn)配置下會(huì)有一個(gè)初始大小為 10MB捕捂, 名為 ibdata1 的文件。 該文件就是默認(rèn)的表空間文件(table space).

若設(shè)置了參數(shù) innodb_file_per_table, 則用戶可以將每個(gè)基于 Innodb 引擎的表產(chǎn)生一個(gè)獨(dú)立表空間愉阎。 命名規(guī)則為: 表明.ibd绞蹦。

需要注意的是, 這些單獨(dú)的表空間僅存儲(chǔ)該表的數(shù)據(jù)榜旦、索引和插入緩沖 bitmap 等信息, 其余信息還是存在默認(rèn)的表空間中景殷。

3.6.2 重做日志文件

在默認(rèn)情況下溅呢, 在 innodb 存儲(chǔ)引擎的數(shù)據(jù)目錄下會(huì)有兩個(gè)名為 ib_logfile0 和 ib_logfile1 的文件澡屡, 其為重做日志文件(redo log file)。

參數(shù) innodb_log_file_size 指定每個(gè)重做日志文件的大小 咐旧。 innodb 1.2.x 之前驶鹉, 為 4GB. 而 1.2.x 將其擴(kuò)大為 512GB。

參數(shù) innodb_log_files_in_group 指定了日志文件組中重做日志文件的數(shù)量铣墨, 默認(rèn)為 2室埋。 參數(shù) innodb_mirrored_log_groups 制定了日志鏡像文件組的數(shù)量, 默認(rèn)為 1伊约, 表示只有一個(gè)日志文件組姚淆, 沒(méi)有鏡像。

重做日志文件與二進(jìn)制日志文件的區(qū)別:

(1) 二進(jìn)制日志會(huì)記錄所有與 MYSQL 數(shù)據(jù)庫(kù)有關(guān)的日志記錄屡律,包裹 Innodb 腌逢, MYISAM, Heap 等其他存儲(chǔ)引擎的日志。 而 Innodb 重做日志只記錄有關(guān)該存儲(chǔ)引擎本事的事務(wù)日志超埋。

(2) 記錄的內(nèi)容不同搏讶, 無(wú)論用戶將二進(jìn)制文件記錄格式誰(shuí) statement 還是 row 或是 mixed , 其記錄的都是關(guān)于一個(gè)事務(wù)的具體操作內(nèi)容霍殴, 即該日志是邏輯日志媒惕。 而 innodb 村粗引擎的重做日志記錄的是關(guān)于每個(gè)頁(yè)的更改的物理情況。

(3) 寫(xiě)入時(shí)間也不同来庭, 二進(jìn)制日志文件僅在事務(wù)提交前進(jìn)行提交吓笙, 即只寫(xiě)磁盤(pán)一次, 不論這是該事務(wù)多大巾腕。 而在事務(wù)進(jìn)行過(guò)程中面睛, 卻不斷有重做日志文件條目(redo entry) 被寫(xiě)入到重做日志文件中。

從重做日志緩沖往磁盤(pán)寫(xiě)入時(shí)尊搬, 是按 512 個(gè)字節(jié)叁鉴, 也就是一個(gè)扇區(qū)的大小進(jìn)行寫(xiě)入。 因?yàn)樯葏^(qū)是寫(xiě)入的最小單位佛寿, 因此可以保證寫(xiě)入必定是成功的幌墓。 因此在重做日志的寫(xiě)入過(guò)程中不需要有 doule write。(why冀泻?)

日志緩沖寫(xiě)入磁盤(pán)的重做日志文件按一定條件:

(1) 主線程中每秒會(huì)將重做日志緩沖寫(xiě)入磁盤(pán)的重做日志文件中常侣, 無(wú)論事務(wù)是否已經(jīng)提交。?

(2) 通過(guò) 參數(shù) innodb_flush_log_trx_commit 控制弹渔, 表示在提交(commit)時(shí)胳施,處理重做日志的方式。 0 時(shí)不寫(xiě)肢专, 1 同步寫(xiě)舞肆, 2 異步寫(xiě)焦辅。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市椿胯,隨后出現(xiàn)的幾起案子筷登,更是在濱河造成了極大的恐慌,老刑警劉巖哩盲,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件前方,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡廉油,警方通過(guò)查閱死者的電腦和手機(jī)惠险,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)娱两,“玉大人莺匠,你說(shuō)我怎么就攤上這事∈ぃ” “怎么了趣竣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)旱物。 經(jīng)常有香客問(wèn)我遥缕,道長(zhǎng),這世上最難降的妖魔是什么宵呛? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任单匣,我火速辦了婚禮,結(jié)果婚禮上宝穗,老公的妹妹穿的比我還像新娘户秤。我一直安慰自己,他們只是感情好逮矛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布鸡号。 她就那樣靜靜地躺著,像睡著了一般须鼎。 火紅的嫁衣襯著肌膚如雪鲸伴。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天晋控,我揣著相機(jī)與錄音汞窗,去河邊找鬼。 笑死赡译,一個(gè)胖子當(dāng)著我的面吹牛仲吏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蜘矢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼狂男!你這毒婦竟也來(lái)了综看?” 一聲冷哼從身側(cè)響起品腹,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎红碑,沒(méi)想到半個(gè)月后舞吭,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡析珊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年羡鸥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忠寻。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡惧浴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出奕剃,到底是詐尸還是另有隱情衷旅,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布纵朋,位于F島的核電站柿顶,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏操软。R本人自食惡果不足惜嘁锯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望聂薪。 院中可真熱鬧家乘,春花似錦、人聲如沸藏澳。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)笆载。三九已至扑馁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間凉驻,已是汗流浹背腻要。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涝登,地道東北人雄家。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像胀滚,于是被迫代替她去往敵國(guó)和親趟济。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乱投,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容