錯(cuò)誤日志
錯(cuò)誤日志不用多說,記錄了MySQL運(yùn)行過程中的錯(cuò)誤信息,當(dāng)出現(xiàn)問題時(shí),我們可以通過錯(cuò)誤日志查找線索。
慢查詢?nèi)罩?/p>
可以通過參數(shù)long_query_time來設(shè)置時(shí)間,當(dāng)sql語(yǔ)句執(zhí)行超過指定的時(shí)間,就會(huì)被記錄下來,用來進(jìn)行sql調(diào)優(yōu)。
還有一個(gè)參數(shù)log_queries_not_using_indexs,如果運(yùn)行的sql語(yǔ)句沒有使用索引,就會(huì)記錄下來。但是不能一直這樣記錄,會(huì)導(dǎo)致文件過大,索引可以通過log_throttle_queries_not_using_indexes來表示每分鐘允許記錄到slow log的未使用索引的SQL語(yǔ)句的次數(shù)。默認(rèn)為0,表示沒有限制。如果日志記錄到文件中,可以使用mysqldumpslow命令來進(jìn)行篩選。
慢查詢?nèi)罩究梢暂敵龅轿募校部梢暂敵龅奖碇小?梢酝ㄟ^log_output參數(shù)指定慢查詢?nèi)罩据敵龅侥睦铩?/p>
在慢查詢?nèi)罩局卸加涗浟耸裁葱畔ⅲ梢酝ㄟ^slow_query_type進(jìn)行控制。
0表示不將SQL語(yǔ)句記錄到slow log。
1 表示根據(jù)運(yùn)行時(shí)間將SQL語(yǔ)句記錄到slow log。
2 表示根據(jù)邏輯IO次數(shù)將SQL語(yǔ)句記錄到slow log。
3 表示根據(jù)運(yùn)行時(shí)間和邏輯IO次數(shù)將SQL語(yǔ)句記錄到slow log。
binlog日志
記錄了對(duì)數(shù)據(jù)庫(kù)除了查詢的所有操作。可以用來數(shù)據(jù)恢復(fù)、主從復(fù)制和判斷數(shù)據(jù)庫(kù)是否被攻擊審計(jì)。
sync_binlog參數(shù)
binlog日志并不是每次寫的時(shí)候都同步到磁盤。因此當(dāng)數(shù)據(jù)庫(kù)發(fā)生宕機(jī)的時(shí)候,可能會(huì)有一部分?jǐn)?shù)據(jù)沒有日志中。會(huì)跟復(fù)制和恢復(fù)帶來問題。sync_binlog表示每寫緩沖多少次就同步到磁盤。如果設(shè)置位1 即表示每寫一次緩沖就把數(shù)據(jù)同步到磁盤。但是仍然存在問題,如果事務(wù)剛剛把數(shù)據(jù)寫入日志,但是還沒有執(zhí)行的情況下宕機(jī)。數(shù)據(jù)庫(kù)重啟后會(huì)進(jìn)行回滾,但是寫入binlog的日志不能回滾。可以通過innodb_support_xa=1來解決這個(gè)問題。
binlog_format參數(shù)
該參數(shù)可以設(shè)置的值有STATEMENT、ROW、MIXED。
1、 STATEMENT格式的日志,只記錄sql語(yǔ)句
2、 ROW格式的日志,不是記錄SQL語(yǔ)句,而是記錄記錄表的行更改情況。
3、 MIXED格式的日志,根據(jù)情況決定使用STATEMENT還是ROW格式記錄日志。
MySQL數(shù)據(jù)庫(kù)的事務(wù)格式離別為REPEATABLE READ,跟binlog_format是有關(guān)系的,如果設(shè)置為READ COMMITED的事務(wù)隔離級(jí)別,會(huì)出現(xiàn)類似丟失更新的現(xiàn)象,從而出現(xiàn)主動(dòng)數(shù)據(jù)不一致。如果binlog_format采用的是ROW格式的記錄,就可以將事務(wù)隔離級(jí)別調(diào)整為READ COMMITED來提高性能。
查詢?nèi)罩?/p>
記錄所有的對(duì)數(shù)據(jù)庫(kù)的請(qǐng)求,一般不開啟。
重做日志
該日志文件屬于Innodb存儲(chǔ)引擎,記錄了Innodb存儲(chǔ)引擎的食物日志,直觀重要。當(dāng)執(zhí)行事務(wù)失敗時(shí),該日志就能派上用場(chǎng)。
每個(gè)Innodb存儲(chǔ)引擎至少有兩個(gè)日志文件組,每個(gè)文件組下面至少有兩個(gè)重做日志。
參數(shù)
Innodb_log-file_size 表示每個(gè)重做日志的大小。
Innodb_log_files_in_group 表示每個(gè)日志文件組有幾個(gè)日志,最少有兩個(gè),默認(rèn)為2個(gè)。
Innodb_mirrored_log_groups 鏡像,為了高可用設(shè)計(jì)。如果進(jìn)行了磁盤陣列,可以不設(shè)置。
Innodb_log_group_home_dir 日志文件存放的位置,默認(rèn)為”./”。
Innodb_flush_log_at_trx_commit 當(dāng)值為0時(shí),代表當(dāng)提交事務(wù)時(shí),并不將事務(wù)的重做日志寫入磁盤上的日志文件,而是等待主線程每秒的刷新。
當(dāng)值為1時(shí),表示執(zhí)行commit時(shí)將重做日志緩沖同步寫到磁盤,即伴有fsync的調(diào)用。當(dāng)事務(wù)提交時(shí),必須保證事務(wù)已經(jīng)寫入重做日志文件。當(dāng)數(shù)據(jù)庫(kù)宕機(jī)時(shí),可以通過重做日志文件恢復(fù),并保證可以恢復(fù)已經(jīng)提交的事務(wù)。
當(dāng)值為2時(shí),表示將重做日志異步寫到磁盤。即寫到文件系統(tǒng)的緩存中。因此不能完全保證執(zhí)行commit時(shí)肯定會(huì)寫入重做日志文件,知識(shí)有這個(gè)動(dòng)作。當(dāng)數(shù)據(jù)庫(kù)宕機(jī)而服務(wù)器并沒有宕機(jī)的情況下,因?yàn)榇藭r(shí)未寫入磁盤的事務(wù)保存在文件系統(tǒng)緩存中,當(dāng)恢復(fù)時(shí)同樣保證數(shù)據(jù)不丟失。