您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(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ò),可以把它分享出去讓更多的人看到。
免責(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)容。