溫馨提示×

溫馨提示×

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

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

mysql中日志體系的示例分析

發(fā)布時間:2021-11-01 11:16:10 來源:億速云 閱讀:158 作者:小新 欄目:MySQL數(shù)據(jù)庫

這篇文章主要介紹了mysql中日志體系的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

一、 mysql錯誤日志:
錯誤日志記錄的事件:
a)、服務(wù)器啟動關(guān)閉過程中的信息
b)、服務(wù)器運行過程中的錯誤信息
c)、事件調(diào)試器運行一個事件時間生的信息
d)、在從服務(wù)器上啟動從服務(wù)器進(jìn)程時產(chǎn)生的信息
log_error參數(shù)指定錯誤日志存放路徑以及文件名。如果不指定文件,默認(rèn)文件名是[host_name].err,保存路徑為%datadir%。
mysql> system hostname
mysql
mysql> show variables like '%datadir%';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
mysql> show variables like 'log_error';
+---------------+--------------------------+
| Variable_name | Value                    |
+---------------+--------------------------+
| log_error     | /var/lib/mysql/mysql.err |
+---------------+--------------------------+
錯誤日志中記錄的信息分為三類:[Note],[warning],[Error]??梢酝ㄟ^設(shè)置log_warnings來控制警告信息是否被記錄,默認(rèn)值為1表示記錄,為0表示禁用。如果大于1,則對于連接失敗、新連接拒絕等類型的消息也會被寫入到錯誤日志中去。
mysql> show variables like "%log_warning%";
+---------------+-------+
| Variable_name   | Value   |
+---------------+-------+
| log_warnings    | 1       |
+---------------+-------+
1 row in set (0.00 sec)
 
二、  mysql的查詢?nèi)罩荆?br/>查詢?nèi)罩居涗洸樵冋Z句與啟動時間,建議不是在調(diào)試環(huán)境下不要開啟查詢?nèi)罩荆驗闀粩嗾紦?jù)你的磁盤空間,并會產(chǎn)生大量的IO。
查詢?nèi)罩居袃煞N,分別是慢查詢?nèi)罩荆⊿low Query Log)和通用查詢?nèi)罩荆℅eneral Query Log)。而且mysql的查詢?nèi)罩静粌H可以記錄到文件,還能自動保存到MySql數(shù)據(jù)庫中的表對象里。
1、慢查詢?nèi)罩荆?br/>指的是所有查詢語句執(zhí)行時間超過系統(tǒng)變量long_query_time(默認(rèn)值是10秒)指定的參數(shù)值,并且訪問的記錄數(shù)超過系統(tǒng)變量min_examined_row_limit(默認(rèn)值是0條)的數(shù)量的語句。這里的執(zhí)行時間是不包括初始化表鎖的開銷。
慢查詢?nèi)罩局姓Z句記錄和順序有可能跟執(zhí)行順序不同,因為每條語句執(zhí)行完并且釋放了鎖資源之后,mysqld才會將符合條件的sql語句寫入到慢查詢?nèi)罩局腥ァ?br/>開啟和禁用慢查詢?nèi)罩就ㄟ^以下兩個系統(tǒng)參數(shù),這兩個參數(shù)可以動態(tài)修改:
slow_query_log  指定是否輸出慢查詢?nèi)罩荆?表示輸出,0表示不輸出,默認(rèn)為0。
slow_query_log_file   指定日志文件存儲路徑和文件名,如果沒有指定,默認(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 | /var/lib/mysql/mysql-slow.log |
+---------------------+-------------------------------+
全局禁用/開啟慢查詢?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做的判斷步驟如下:
1)判斷執(zhí)行的是查詢語句,還是管理性語句
2)查詢語句執(zhí)行的時間達(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?,可以用mysql自帶的mysqldumpslow命令,或者其他第三方工具查看分析。
2、通用查詢?nèi)罩荆?br/>這個日志可以記錄mysqld進(jìn)程所做的幾乎所有操作,包括sql語句執(zhí)行,數(shù)據(jù)庫對象管理,客戶端的連接和斷開。
這個日志的最大功能是審計。
開啟和禁用通用查詢?nèi)罩就ㄟ^以下兩個系統(tǒng)參數(shù),這兩個參數(shù)可以動態(tài)修改:
general_log   指定是否輸出慢查詢?nèi)罩荆?表示輸出,0表示不輸出,默認(rèn)為0。
general_log_file   指定日志文件存儲路徑和文件名,如果沒有指定,默認(rèn)文件名為[host_name].log,保存路徑為%datadir%。
mysql>  show variables like "general_log%";
+------------------+--------------------------+
| Variable_name    | Value                    |
+------------------+--------------------------+
| general_log      | OFF                      |
| general_log_file | /var/lib/mysql/mysql.log |
+------------------+--------------------------+
全局禁用/開啟通用日志:
SET GLOBAL general_log='OFF';
SET GLOBAL general_log='ON';
會話級禁用/開啟通用日志:
SET sql_log_off='OFF';
SET sql_log_off='ON';
通用查詢?nèi)罩疚募姓Z句出現(xiàn)的順序,是按照mysqld接收的順序。
3、配置查詢?nèi)罩荆?br/>在mysql服務(wù)啟動時指定--log-output選項,可以決定查詢?nèi)罩臼潜4嬖诓僮飨到y(tǒng)中的文件里,還是保存在數(shù)據(jù)庫系統(tǒng)中的專用表。
--log-output  可選值有三個:table,輸出到表,對應(yīng)的表有g(shù)eneral_log和slow_log
                            file,輸出到日志文件
                            none,不輸出查詢?nèi)罩?br/>--log-output可以設(shè)定多個值。
默認(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,對日志表無效。
日志表的寫操作不會計入二進(jìn)制日志,有復(fù)制環(huán)境的話,日志表的內(nèi)容也不會被復(fù)制到其他Slaves節(jié)點。
用flush tables或flush logs來刷新日志表或者日志文件。
日志表不允許創(chuàng)建分區(qū)。
 
三、  二進(jìn)制日志文件:
通過二進(jìn)制日志文件,可以主要實現(xiàn)三個重要的功能:用于復(fù)制,用于恢復(fù),用于審計。
啟用二進(jìn)制日志文件,在mysql服務(wù)啟動時添加參數(shù)log-bin=[base_name]。如果不指定參數(shù)值,默認(rèn)文件名為[host_name]-bin.log,保存路徑為%datadir%。
mysql>  show variables like "%log_bin%";
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin                         | OFF   |
| log_bin_basename                |       |
| log_bin_index                   |       |
| log_bin_trust_function_creators | OFF   |
| log_bin_use_v1_row_events       | OFF   |
| sql_log_bin                     | ON    |
+---------------------------------+-------+
二進(jìn)制日志文件不會只有一個,從序號1開始起,每次啟動mysql服務(wù)或者刷新日志時,生成一個新的二進(jìn)制日志文件。而且單個日志文件不可能無限增長,當(dāng)漲到參數(shù)max_binlog_size指定的大小時,就會創(chuàng)建新的二進(jìn)制日志文件。但是也有可能日志文件比max_binlog_size指定的值要大,假如有執(zhí)行的事務(wù)很大,所有的事務(wù)信息必須寫到一個日志文件中去。
為了跟蹤二進(jìn)制日志文件的狀態(tài),mysql服務(wù)創(chuàng)建了一個和二進(jìn)制日志文件同名,但是擴展名為.index的二進(jìn)制日志索引文件。這個文件中包含所有可供使用的二進(jìn)制日志文件。
如果擁有super權(quán)限的用戶執(zhí)行操作前,執(zhí)行了set sql_log_bin=0命令,則會禁止其執(zhí)行的語句生產(chǎn)二進(jìn)制日志。
--binlog-do-db和--binlog-ignore-db兩個選項,表示指定那些庫記錄或者不記錄二進(jìn)制日志,這兩個選項每次只能設(shè)定一個值,如果有多個庫,反復(fù)設(shè)置多條。
二進(jìn)制日志文件的格式有三種:基于行格式記錄(row-based logging)、基于語句記錄(statement-based logging)、混合模式記錄(mixed-based logging)。
因為mysql中既有支持事務(wù)的存儲引擎,也有不支持事務(wù)的存儲引擎,因此在操作基于不同的存儲引擎對象時,二進(jìn)制日志的處理也不一樣。
對于非事務(wù)表來說,語句執(zhí)行后就會立即寫入二進(jìn)制日志文件中。而對于事務(wù)表,則要到等到當(dāng)前沒有任何鎖定或未提交的信息時才會寫入二進(jìn)制日志文件中,以確保日志被記錄的始終是其執(zhí)行的順序。
 
四、  事務(wù)日志:
事務(wù)日志文件名為"ib_logfile0"和“ib_logfile1”,默認(rèn)存放在表空間所在目錄
與事務(wù)日志相關(guān)變量:
innodb_log_group_home_dir=/PATH/TO/DIR    #設(shè)定InnoDB重做日志文件的存儲目錄。在缺省使用InnoDB日志相關(guān)的所有變量時,其默認(rèn)會在數(shù)據(jù)目錄中創(chuàng)建兩個大小為5MB的名為ib_logfile0和ib_logfile1的日志文件。作用范圍為全局級別,可用于選項文件,屬非動態(tài)變量。
innodb_log_file_size={108576 .. 4294967295}   #設(shè)定日志組中每個日志文件的大小,單位是字節(jié),默認(rèn)值是5MB。較為明智的取值范圍是從1MB到緩存池體積的1/n,其中n表示日志組中日志文件的個數(shù)。日志文件越大,在緩存池中需要執(zhí)行的檢查點刷寫操作就越少,這意味著所需的I/O操作也就越少,然而這也會導(dǎo)致較慢的故障恢復(fù)速度。作用范圍為全局級別,可用于選項文件,屬非動態(tài)變量。
innodb_log_files_in_group={2 .. 100}   #設(shè)定日志組中日志文件的個數(shù)。InnoDB以循環(huán)的方式使用這些日志文件。默認(rèn)值為2。作用范圍為全局級別,可用于選項文件,屬非動態(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)用場景中,建議為此變量設(shè)定一個更大的值。作用范圍為全局級別,可用于選項文件,屬非動態(tài)變量。
innodb_flush_log_at_trx_commit = 1  #表示有事務(wù)提交后,不會讓事務(wù)先寫進(jìn)buffer,再同步到事務(wù)日志文件,而是一旦有事務(wù)提交就立刻寫進(jìn)事務(wù)日志,并且還每隔1秒鐘也會把buffer里的數(shù)據(jù)同步到文件,這樣IO消耗大,默認(rèn)值是"1",可修改為“2”
innodb_locks_unsafe_for_binlog = OFF   #這個變量建議保持OFF狀態(tài),詳細(xì)的原理不清楚
innodb_mirrored_log_groups = 1    #事務(wù)日志組保存的鏡像數(shù)
 
五、  中繼日志:
在復(fù)制環(huán)境中產(chǎn)的的日志信息
與中繼日志相關(guān)的變量:
log_slave_updates   #用于設(shè)定復(fù)制場景中的從服務(wù)器是否將從主服務(wù)器收到的更新操作記錄進(jìn)本機的二進(jìn)制日志中。本參數(shù)設(shè)定的生效需要在從服務(wù)器上啟用二進(jìn)制日志功能。
relay_log=file_name  #設(shè)定中繼日志的文件名稱,默認(rèn)為host_name-relay-bin。也可以使用絕對路徑,以指定非數(shù)據(jù)目錄來存儲中繼日志。作用范圍為全局級別,可用于選項文件,屬非動態(tài)變量。
relay_log_index=file_name   #設(shè)定中繼日志的索引文件名,默認(rèn)為為數(shù)據(jù)目錄中的host_name-relay-bin.index,作用范圍為全局級別,可用于選項文件,屬非動態(tài)變量。
relay-log-info-file=file_name  #設(shè)定中繼服務(wù)用于記錄中繼信息的文件,默認(rèn)為數(shù)據(jù)目錄中的relay-log.info。作用范圍為全局級別,可用于選項文件,屬非動態(tài)變量。
relay_log_purge={ON|OFF}   #設(shè)定對不再需要的中繼日志是否自動進(jìn)行清理。默認(rèn)值為ON。作用范圍為全局級別,可用于選項文件,屬動態(tài)變量。
relay_log_space_limit=      #設(shè)定用于存儲所有中繼日志文件的可用空間大小。默認(rèn)為0,表示不限定。最大值取決于系統(tǒng)平臺位數(shù)。作用范圍為全局級別,可用于選項文件,屬非動態(tài)變量。
max_relay_log_size={4096..1073741824}    #設(shè)定從服務(wù)器上中繼日志的體積上限,到達(dá)此限度時其會自動進(jìn)行中繼日志滾動。此參數(shù)值為0時,mysqld將使用max_binlog_size參數(shù)同時為二進(jìn)制日志和中繼日志設(shè)定日志文件體積上限。作用范圍為全局級別,可用于配置文件,屬動態(tài)變量。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“mysql中日志體系的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

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