溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何理解mysql的各種日志

發(fā)布時(shí)間:2021-11-16 15:19:28 來源:億速云 閱讀:142 作者:柒染 欄目:MySQL數(shù)據(jù)庫

這篇文章將為大家詳細(xì)講解有關(guān)如何理解mysql的各種日志,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

mysql錯(cuò)誤日志:

錯(cuò)誤日志記錄的事件:

a)、服務(wù)器啟動(dòng)關(guān)閉過程中的信息

b)、服務(wù)器運(yùn)行過程中的錯(cuò)誤信息

c)、事件調(diào)試器運(yùn)行一個(gè)事件時(shí)間生的信息

d)、在從服務(wù)器上啟動(dòng)從服務(wù)器進(jìn)程時(shí)產(chǎn)生的信息

log_error參數(shù)指定錯(cuò)誤日志存放路徑以及文件名。如果不指定文件,默認(rèn)文件名是[host_name].err,保存路徑為%datadir%。

mysql> show variables like "%log_error%";

+------------+-------------------------------------------------------+

| Variable_name | Value                                        |

+------------+-------------------------------------------------------+

| log_error     | D:\Quarkp2p\mysql-5.6.19-winx64\data\QF-dbadmin-02.err   |

+------------+-------------------------------------------------------+

1 row in set (0.00 sec)

mysql> show variables like "%datadir%";

+---------------+---------------------------------------+

| Variable_name   | Value                         |

+---------------+---------------------------------------+

| datadir          | D:\Quarkp2p\mysql-5.6.19-winx64\data\    |

+---------------+---------------------------------------+

1 row in set (0.00 sec)

錯(cuò)誤日志中記錄的信息分為三類:[Note],[warning],[Error]??梢酝ㄟ^設(shè)置log_warnings來控制警告信息是否被記錄,默認(rèn)值為1表示記錄,為0表示禁用。如果大于1,則對(duì)于連接失敗、新連接拒絕等類型的消息也會(huì)被寫入到錯(cuò)誤日志中去。

mysql> show variables like "%log_warning%";

+---------------+-------+

| Variable_name   | Value   |

+---------------+-------+

| log_warnings    | 1       |

+---------------+-------+

1 row in set (0.00 sec)

mysql的查詢?nèi)罩荆?/strong>

查詢?nèi)罩居涗洸樵冋Z句與啟動(dòng)時(shí)間,建議不是在調(diào)試環(huán)境下不要開啟查詢?nèi)罩?,因?yàn)闀?huì)不斷占據(jù)你的磁盤空間,并會(huì)產(chǎn)生大量的IO。

查詢?nèi)罩居袃煞N,分別是慢查詢?nèi)罩荆⊿low Query Log)和通用查詢?nèi)罩荆℅eneral Query Log)。而且mysql的查詢?nèi)罩静粌H可以記錄到文件,還能自動(dòng)保存到MySql數(shù)據(jù)庫中的表對(duì)象里。

1、慢查詢?nèi)罩荆?/strong>

指的是所有查詢語句執(zhí)行時(shí)間超過系統(tǒng)變量long_query_time(默認(rèn)值是10秒)指定的參數(shù)值,并且訪問的記錄數(shù)超過系統(tǒng)變量min_examined_row_limit(默認(rèn)值是0條)的數(shù)量的語句。這里的執(zhí)行時(shí)間是不包括初始化表鎖的開銷。

慢查詢?nèi)罩局姓Z句記錄和順序有可能跟執(zhí)行順序不同,因?yàn)槊織l語句執(zhí)行完并且釋放了鎖資源之后,mysqld才會(huì)將符合條件的sql語句寫入到慢查詢?nèi)罩局腥ァ?/p>

開啟和禁用慢查詢?nèi)罩就ㄟ^以下兩個(gè)系統(tǒng)參數(shù),這兩個(gè)參數(shù)可以動(dòng)態(tài)修改:

slow_query_log  指定是否輸出慢查詢?nèi)罩荆?表示輸出,0表示不輸出,默認(rèn)為0。

slow_query_log_file   指定日志文件存儲(chǔ)路徑和文件名,如果沒有指定,默認(rèn)文件名為[host_name]-slow.log,保存路徑為%datadir%。

mysql> show variables like "%slow_query_log%";

+------------------+---------------------------------------------------------+

| Variable_name      | Value                                                     |

+------------------+---------------------------------------------------------+

| slow_query_log     | OFF                                                       |

| slow_query_log_file  | D:\Quarkp2p\mysql-5.6.19-winx64\data\QF-dbadmin-02-slow.log |

+------------------+---------------------------------------------------------+

2 rows in set (0.00 sec)

全局禁用/開啟慢查詢?nèi)罩?

SET GLOBAL slow_query_log='OFF';

SET GLOBAL slow_query_log='ON';

其他參數(shù):

long_query_time

log_short_format

log_slow_admin_statements

log_queries_not_using_indexes

log_throttle_queries_not_using_indexes

log_slow_slave_statements

mysqld判斷一條sql語句是否需要被記錄到慢查詢?nèi)罩緯r(shí)做的判斷步驟如下:

1)判斷執(zhí)行的是查詢語句,還是管理性語句

2)查詢語句執(zhí)行的時(shí)間達(dá)到或者超過了long_query_time參數(shù)值,或者是符合log_queries_not_using_indexes條件

3)查詢的記錄量達(dá)到了min_examined_row_limit參數(shù)值

4)查詢語句不違反log_throttle_queries_not_using_indexes設(shè)定的值

如果慢查詢?nèi)罩痉浅4螅梢杂胢ysql自帶的mysqldumpslow命令,或者其他第三方工具查看分析。

2、通用查詢?nèi)罩荆?/strong>

這個(gè)日志可以記錄mysqld進(jìn)程所做的幾乎所有操作,包括sql語句執(zhí)行,數(shù)據(jù)庫對(duì)象管理,客戶端的連接和斷開。

這個(gè)日志的最大功能是審計(jì)。

開啟和禁用通用查詢?nèi)罩就ㄟ^以下兩個(gè)系統(tǒng)參數(shù),這兩個(gè)參數(shù)可以動(dòng)態(tài)修改:

general_log   指定是否輸出慢查詢?nèi)罩荆?表示輸出,0表示不輸出,默認(rèn)為0。

general_log_file   指定日志文件存儲(chǔ)路徑和文件名,如果沒有指定,默認(rèn)文件名為[host_name].log,保存路徑為%datadir%。

mysql> show variables like "%general_log%";

+------------------+--------------------------------------------------------+

| Variable_name      | Value                                                  |

+------------------+--------------------------------------------------------+

| general_log         | OFF                                                    |

| general_log_file     | D:\Quarkp2p\mysql-5.6.19-winx64\data\QF-dbadmin-02.log   |

+------------------+--------------------------------------------------------+

2 rows in set (0.00 sec)

全局禁用/開啟通用日志:

SET GLOBAL general_log='OFF';

SET GLOBAL general_log='ON';

會(huì)話級(jí)禁用/開啟通用日志:

SET sql_log_off='OFF';

SET sql_log_off='ON';

通用查詢?nèi)罩疚募姓Z句出現(xiàn)的順序,是按照mysqld接收的順序。

3、配置查詢?nèi)罩荆?/strong>

在mysql服務(wù)啟動(dòng)時(shí)指定--log-output選項(xiàng),可以決定查詢?nèi)罩臼潜4嬖诓僮飨到y(tǒng)中的文件里,還是保存在數(shù)據(jù)庫系統(tǒng)中的專用表。

--log-output  可選值有三個(gè):table,輸出到表,對(duì)應(yīng)的表有g(shù)eneral_log和slow_log

                            file,輸出到日志文件

                            none,不輸出查詢?nèi)罩?/p>

--log-output可以設(shè)定多個(gè)值。

默認(rèn)情況下,日志表使用CSV引擎,5.1以后,日志表也可以修改為MyIsam引擎。

日志表(general_log和slow_log)支持create table,alter table,drop table,truncate table,rename,check。不支持lock tables,insert,update,delete操作,日志表的增刪改查均由mysql服務(wù)內(nèi)部自己進(jìn)行。            

flush tables with read lock以及設(shè)置全局系統(tǒng)變量read_only,對(duì)日志表無效。

日志表的寫操作不會(huì)計(jì)入二進(jìn)制日志,有復(fù)制環(huán)境的話,日志表的內(nèi)容也不會(huì)被復(fù)制到其他Slaves節(jié)點(diǎn)。

用flush tables或flush logs來刷新日志表或者日志文件。

日志表不允許創(chuàng)建分區(qū)。

二進(jìn)制日志文件:

通過二進(jìn)制日志文件,可以實(shí)現(xiàn)兩個(gè)重要的功能:用于復(fù)制,用于恢復(fù)。

啟用二進(jìn)制日志文件,在mysql服務(wù)啟動(dòng)時(shí)添加參數(shù)--log-bin=[base_name]。如果不指定參數(shù)值,默認(rèn)文件名為[host_name]-bin.log,保存路徑為%datadir%。

mysql> show variables like "%log_bin%";

+--------------------------+-------------------------------------------------+

| Variable_name              | Value                                             |

+--------------------------+-------------------------------------------------+

| log_bin                    | ON                                               |

| log_bin_basename           | D:\Quarkp2p\mysql-5.6.19-winx64\data\mysql-bin      |

| log_bin_index               | D:\Quarkp2p\mysql-5.6.19-winx64\data\mysql-bin.index |

|log_bin_trust_function_creators |ON                         

| log_bin_use_v1_row_events   | OFF                                               |

| sql_log_bin                 | ON                                               |

+--------------------------+-------------------------------------------------+

6 rows in set (0.00 sec) 

二進(jìn)制日志文件不會(huì)只有一個(gè),從序號(hào)1開始起,每次啟動(dòng)mysql服務(wù)或者刷新日志時(shí),生成一個(gè)新的二進(jìn)制日志文件。而且單個(gè)日志文件不可能無限增長,當(dāng)漲到參數(shù)max_binlog_size指定的大小時(shí),就會(huì)創(chuàng)建新的二進(jìn)制日志文件。但是也有可能日志文件比max_binlog_size指定的值要大,假如有執(zhí)行的事務(wù)很大,所有的事務(wù)信息必須寫到一個(gè)日志文件中去。

為了跟蹤二進(jìn)制日志文件的狀態(tài),mysql服務(wù)創(chuàng)建了一個(gè)和二進(jìn)制日志文件同名,但是擴(kuò)展名為.index的二進(jìn)制日志索引文件。這個(gè)文件中包含所有可供使用的二進(jìn)制日志文件。

如果擁有super權(quán)限的用戶執(zhí)行操作前,執(zhí)行了set sql_log_bin=0命令,則會(huì)禁止其執(zhí)行的語句生產(chǎn)二進(jìn)制日志。

--binlog-do-db和--binlog-ignore-db兩個(gè)選項(xiàng),表示指定那些庫記錄或者不記錄二進(jìn)制日志,這兩個(gè)選項(xiàng)每次只能設(shè)定一個(gè)值,如果有多個(gè)庫,反復(fù)設(shè)置多條。

二進(jìn)制日志文件的格式有三種:基于行格式記錄(row-based logging)、基于語句記錄(statement-based logging)、混合模式記錄(mixed-based logging)。

因?yàn)閙ysql中既有支持事務(wù)的存儲(chǔ)引擎,也有不支持事務(wù)的存儲(chǔ)引擎,因此在操作基于不同的存儲(chǔ)引擎對(duì)象時(shí),二進(jìn)制日志的處理也不一樣。

對(duì)于非事務(wù)表來說,語句執(zhí)行后就會(huì)立即寫入二進(jìn)制日志文件中。而對(duì)于事務(wù)表,則要到等到當(dāng)前沒有任何鎖定或未提交的信息時(shí)才會(huì)寫入二進(jìn)制日志文件中,以確保日志被記錄的始終是其執(zhí)行的順序。

使用mysqlbinlog命令行工具可以查看二進(jìn)制日志文件。

binlog_cache_use 顯示了使用binlog_cache_size變量的事務(wù)數(shù),包括臨時(shí)文件

binlog_cache_size 指定為線程分配多少內(nèi)存空間

binlog_cache_disk_use  顯示了使用臨時(shí)文件的事務(wù)數(shù)

max_binlog_cache_size  用來限制事務(wù)能夠使用的最大緩存區(qū)(默認(rèn)為4G,也是最大值,最小值是4096)。如果事務(wù)超出這個(gè)限制,則執(zhí)行出錯(cuò),事務(wù)回滾。

事務(wù)日志:

事務(wù)日志文件名為"ib_logfile0"和“ib_logfile1”,默認(rèn)存放在表空間所在目錄

與事務(wù)日志相關(guān)變量:

innodb_log_group_home_dir=/PATH/TO/DIR    #設(shè)定InnoDB重做日志文件的存儲(chǔ)目錄。在缺省使用InnoDB日志相關(guān)的所有變量時(shí),其默認(rèn)會(huì)在數(shù)據(jù)目錄中創(chuàng)建兩個(gè)大小為5MB的名為ib_logfile0和ib_logfile1的日志文件。作用范圍為全局級(jí)別,可用于選項(xiàng)文件,屬非動(dòng)態(tài)變量。

innodb_log_file_size={108576 .. 4294967295}   #設(shè)定日志組中每個(gè)日志文件的大小,單位是字節(jié),默認(rèn)值是5MB。較為明智的取值范圍是從1MB到緩存池體積的1/n,其中n表示日志組中日志文件的個(gè)數(shù)。日志文件越大,在緩存池中需要執(zhí)行的檢查點(diǎn)刷寫操作就越少,這意味著所需的I/O操作也就越少,然而這也會(huì)導(dǎo)致較慢的故障恢復(fù)速度。作用范圍為全局級(jí)別,可用于選項(xiàng)文件,屬非動(dòng)態(tài)變量。

innodb_log_files_in_group={2 .. 100}   #設(shè)定日志組中日志文件的個(gè)數(shù)。InnoDB以循環(huán)的方式使用這些日志文件。默認(rèn)值為2。作用范圍為全局級(jí)別,可用于選項(xiàng)文件,屬非動(dòng)態(tài)變量。

innodb_log_buffer_size={262144 .. 4294967295}   設(shè)定InnoDB用于輔助完成日志文件寫操作的日志緩沖區(qū)大小,單位是字節(jié),默認(rèn)為8MB。較大的事務(wù)可以借助于更大的日志緩沖區(qū)來避免在事務(wù)完成之前將日志緩沖區(qū)的數(shù)據(jù)寫入日志文件,以減少I/O操作進(jìn)而提升系統(tǒng)性能。因此,在有著較大事務(wù)的應(yīng)用場(chǎng)景中,建議為此變量設(shè)定一個(gè)更大的值。作用范圍為全局級(jí)別,可用于選項(xiàng)文件,屬非動(dòng)態(tài)變量。

innodb_flush_log_at_trx_commit = 1  #表示有事務(wù)提交后,不會(huì)讓事務(wù)先寫進(jìn)buffer,再同步到事務(wù)日志文件,而是一旦有事務(wù)提交就立刻寫進(jìn)事務(wù)日志,并且還每隔1秒鐘也會(huì)把buffer里的數(shù)據(jù)同步到文件,這樣IO消耗大,默認(rèn)值是"1",可修改為“2”

innodb_locks_unsafe_for_binlog = OFF   #這個(gè)變量建議保持OFF狀態(tài),詳細(xì)的原理不清楚

innodb_mirrored_log_groups = 1    #事務(wù)日志組保存的鏡像數(shù)

中繼日志:

在復(fù)制環(huán)境中產(chǎn)的的日志信息

與中繼日志相關(guān)的變量:

log_slave_updates   #用于設(shè)定復(fù)制場(chǎng)景中的從服務(wù)器是否將從主服務(wù)器收到的更新操作記錄進(jìn)本機(jī)的二進(jìn)制日志中。本參數(shù)設(shè)定的生效需要在從服務(wù)器上啟用二進(jìn)制日志功能。

relay_log=file_name  #設(shè)定中繼日志的文件名稱,默認(rèn)為host_name-relay-bin。也可以使用絕對(duì)路徑,以指定非數(shù)據(jù)目錄來存儲(chǔ)中繼日志。作用范圍為全局級(jí)別,可用于選項(xiàng)文件,屬非動(dòng)態(tài)變量。

relay_log_index=file_name   #設(shè)定中繼日志的索引文件名,默認(rèn)為為數(shù)據(jù)目錄中的host_name-relay-bin.index,作用范圍為全局級(jí)別,可用于選項(xiàng)文件,屬非動(dòng)態(tài)變量。

relay-log-info-file=file_name  #設(shè)定中繼服務(wù)用于記錄中繼信息的文件,默認(rèn)為數(shù)據(jù)目錄中的relay-log.info。作用范圍為全局級(jí)別,可用于選項(xiàng)文件,屬非動(dòng)態(tài)變量。

relay_log_purge={ON|OFF}   #設(shè)定對(duì)不再需要的中繼日志是否自動(dòng)進(jìn)行清理。默認(rèn)值為ON。作用范圍為全局級(jí)別,可用于選項(xiàng)文件,屬動(dòng)態(tài)變量。

relay_log_space_limit=      #設(shè)定用于存儲(chǔ)所有中繼日志文件的可用空間大小。默認(rèn)為0,表示不限定。最大值取決于系統(tǒng)平臺(tái)位數(shù)。作用范圍為全局級(jí)別,可用于選項(xiàng)文件,屬非動(dòng)態(tài)變量。

max_relay_log_size={4096..1073741824}    #設(shè)定從服務(wù)器上中繼日志的體積上限,到達(dá)此限度時(shí)其會(huì)自動(dòng)進(jìn)行中繼日志滾動(dòng)。此參數(shù)值為0時(shí),mysqld將使用max_binlog_size參數(shù)同時(shí)為二進(jìn)制日志和中繼日志設(shè)定日志文件體積上限。作用范圍為全局級(jí)別,可用于配置文件,屬動(dòng)態(tài)變量。

關(guān)于如何理解mysql的各種日志就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI