mysql之 日誌體系(錯誤日誌、查詢日誌、二進制日誌、事務日誌、中繼日誌)

1、 mysql錯誤日誌:
錯誤日誌記錄的事件:
a)、服務器啓動關閉過程當中的信息
b)、服務器運行過程當中的錯誤信息
c)、事件調試器運行一個事件時間生的信息
d)、在從服務器上啓動從服務器進程時產生的信息
log_error參數指定錯誤日誌存放路徑以及文件名。若是不指定文件,默認文件名是[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]。能夠經過設置log_warnings來控制警告信息是否被記錄,默認值爲1表示記錄,爲0表示禁用。若是大於1,則對於鏈接失敗、新鏈接拒絕等類型的消息也會被寫入到錯誤日誌中去。
mysql> show variables like "%log_warning%";
+---------------+-------+
| Variable_name   | Value   |
+---------------+-------+
| log_warnings    | 1       |
+---------------+-------+
1 row in set (0.00 sec)
 
2、  mysql的查詢日誌:
查詢日誌記錄查詢語句與啓動時間,建議不是在調試環境下不要開啓查詢日誌,由於會不斷佔據你的磁盤空間,並會產生大量的IO。
查詢日誌有兩種,分別是慢查詢日誌(Slow Query Log)和通用查詢日誌(General Query Log)。並且mysql的查詢日誌不只能夠記錄到文件,還能自動保存到MySql數據庫中的表對象裏。
一、慢查詢日誌:
指的是全部查詢語句執行時間超過系統變量long_query_time(默認值是10秒)指定的參數值,而且訪問的記錄數超過系統變量min_examined_row_limit(默認值是0條)的數量的語句。這裏的執行時間是不包括初始化表鎖的開銷。
慢查詢日誌中語句記錄和順序有可能跟執行順序不一樣,由於每條語句執行完而且釋放了鎖資源以後,mysqld纔會將符合條件的sql語句寫入到慢查詢日誌中去。
開啓和禁用慢查詢日誌經過如下兩個系統參數,這兩個參數能夠動態修改:
slow_query_log  指定是否輸出慢查詢日誌,1表示輸出,0表示不輸出,默認爲0。
slow_query_log_file   指定日誌文件存儲路徑和文件名,若是沒有指定,默認文件名爲[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 |
+---------------------+-------------------------------+
全局禁用/開啓慢查詢日誌:
SET GLOBAL slow_query_log='OFF';
SET GLOBAL slow_query_log='ON';
其餘參數:
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語句是否須要被記錄到慢查詢日誌時作的判斷步驟以下:
1)判斷執行的是查詢語句,仍是管理性語句
2)查詢語句執行的時間達到或者超過了long_query_time參數值,或者是符合log_queries_not_using_indexes條件
3)查詢的記錄量達到了min_examined_row_limit參數值
4)查詢語句不違反log_throttle_queries_not_using_indexes設定的值
若是慢查詢日誌很是大,能夠用mysql自帶的mysqldumpslow命令,或者其餘第三方工具查看分析。
二、通用查詢日誌:
這個日誌能夠記錄mysqld進程所作的幾乎全部操做,包括sql語句執行,數據庫對象管理,客戶端的鏈接和斷開。
這個日誌的最大功能是審計。
開啓和禁用通用查詢日誌經過如下兩個系統參數,這兩個參數能夠動態修改:
general_log   指定是否輸出慢查詢日誌,1表示輸出,0表示不輸出,默認爲0。
general_log_file   指定日誌文件存儲路徑和文件名,若是沒有指定,默認文件名爲[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';
通用查詢日誌文件中語句出現的順序,是按照mysqld接收的順序。
三、配置查詢日誌:
在mysql服務啓動時指定--log-output選項,能夠決定查詢日誌是保存在操做系統中的文件裏,仍是保存在數據庫系統中的專用表。
--log-output  可選值有三個:table,輸出到表,對應的表有general_log和slow_log
                            file,輸出到日誌文件
                            none,不輸出查詢日誌
--log-output能夠設定多個值。
默認狀況下,日誌表使用CSV引擎,5.1之後,日誌表也能夠修改成MyIsam引擎。
日誌表(general_log和slow_log)支持create table,alter table,drop table,truncate table,rename,check。不支持lock tables,insert,update,delete操做,日誌表的增刪改查均由mysql服務內部本身進行。            
flush tables with read lock以及設置全局系統變量read_only,對日誌表無效。
日誌表的寫操做不會計入二進制日誌,有複製環境的話,日誌表的內容也不會被複制到其餘Slaves節點。
用flush tables或flush logs來刷新日誌表或者日誌文件。
日誌表不容許建立分區。
 
3、  二進制日誌文件:
經過二進制日誌文件,能夠主要實現三個重要的功能:用於複製,用於恢復,用於審計。
啓用二進制日誌文件,在mysql服務啓動時添加參數log-bin=[base_name]。若是不指定參數值,默認文件名爲[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    |
+---------------------------------+-------+
二進制日誌文件不會只有一個,從序號1開始起,每次啓動mysql服務或者刷新日誌時,生成一個新的二進制日誌文件。並且單個日誌文件不可能無限增加,當漲到參數max_binlog_size指定的大小時,就會建立新的二進制日誌文件。可是也有可能日誌文件比max_binlog_size指定的值要大,假若有執行的事務很大,全部的事務信息必須寫到一個日誌文件中去。
爲了跟蹤二進制日誌文件的狀態,mysql服務建立了一個和二進制日誌文件同名,可是擴展名爲.index的二進制日誌索引文件。這個文件中包含全部可供使用的二進制日誌文件。
若是擁有super權限的用戶執行操做前,執行了set sql_log_bin=0命令,則會禁止其執行的語句生產二進制日誌。
--binlog-do-db和--binlog-ignore-db兩個選項,表示指定那些庫記錄或者不記錄二進制日誌,這兩個選項每次只能設定一個值,若是有多個庫,反覆設置多條。
二進制日誌文件的格式有三種:基於行格式記錄(row-based logging)、基於語句記錄(statement-based logging)、混合模式記錄(mixed-based logging)。
由於mysql中既有支持事務的存儲引擎,也有不支持事務的存儲引擎,所以在操做基於不一樣的存儲引擎對象時,二進制日誌的處理也不同。
對於非事務表來講,語句執行後就會當即寫入二進制日誌文件中。而對於事務表,則要到等到當前沒有任何鎖定或未提交的信息時纔會寫入二進制日誌文件中,以確保日誌被記錄的始終是其執行的順序。
 
4、  事務日誌:
事務日誌文件名爲"ib_logfile0"和「ib_logfile1」,默認存放在表空間所在目錄
與事務日誌相關變量:
innodb_log_group_home_dir=/PATH/TO/DIR    #設定InnoDB重作日誌文件的存儲目錄。在缺省使用InnoDB日誌相關的全部變量時,其默認會在數據目錄中建立兩個大小爲5MB的名爲ib_logfile0和ib_logfile1的日誌文件。做用範圍爲全局級別,可用於選項文件,屬非動態變量。
innodb_log_file_size={108576 .. 4294967295}   #設定日誌組中每一個日誌文件的大小,單位是字節,默認值是5MB。較爲明智的取值範圍是從1MB到緩存池體積的1/n,其中n表示日誌組中日誌文件的個數。日誌文件越大,在緩存池中須要執行的檢查點刷寫操做就越少,這意味着所需的I/O操做也就越少,然而這也會致使較慢的故障恢復速度。做用範圍爲全局級別,可用於選項文件,屬非動態變量。
innodb_log_files_in_group={2 .. 100}   #設定日誌組中日誌文件的個數。InnoDB以循環的方式使用這些日誌文件。默認值爲2。做用範圍爲全局級別,可用於選項文件,屬非動態變量。
innodb_log_buffer_size={262144 .. 4294967295}   設定InnoDB用於輔助完成日誌文件寫操做的日誌緩衝區大小,單位是字節,默認爲8MB。較大的事務能夠藉助於更大的日誌緩衝區來避免在事務完成以前將日誌緩衝區的數據寫入日誌文件,以減小I/O操做進而提高系統性能。所以,在有着較大事務的應用場景中,建議爲此變量設定一個更大的值。做用範圍爲全局級別,可用於選項文件,屬非動態變量。
innodb_flush_log_at_trx_commit = 1  #表示有事務提交後,不會讓事務先寫進buffer,再同步到事務日誌文件,而是一旦有事務提交就馬上寫進事務日誌,而且還每隔1秒鐘也會把buffer裏的數據同步到文件,這樣IO消耗大,默認值是"1",可修改成「2」
innodb_locks_unsafe_for_binlog = OFF   #這個變量建議保持OFF狀態,詳細的原理不清楚
innodb_mirrored_log_groups = 1    #事務日誌組保存的鏡像數
 
5、  中繼日誌:
在複製環境中產的的日誌信息
與中繼日誌相關的變量:
log_slave_updates   #用於設定複製場景中的從服務器是否將從主服務器收到的更新操做記錄進本機的二進制日誌中。本參數設定的生效須要在從服務器上啓用二進制日誌功能。
relay_log=file_name  #設定中繼日誌的文件名稱,默認爲host_name-relay-bin。也可使用絕對路徑,以指定非數據目錄來存儲中繼日誌。做用範圍爲全局級別,可用於選項文件,屬非動態變量。
relay_log_index=file_name   #設定中繼日誌的索引文件名,默認爲爲數據目錄中的host_name-relay-bin.index,做用範圍爲全局級別,可用於選項文件,屬非動態變量。
relay-log-info-file=file_name  #設定中繼服務用於記錄中繼信息的文件,默認爲數據目錄中的relay-log.info。做用範圍爲全局級別,可用於選項文件,屬非動態變量。
relay_log_purge={ON|OFF}   #設定對再也不須要的中繼日誌是否自動進行清理。默認值爲ON。做用範圍爲全局級別,可用於選項文件,屬動態變量。
relay_log_space_limit=      #設定用於存儲全部中繼日誌文件的可用空間大小。默認爲0,表示不限定。最大值取決於系統平臺位數。做用範圍爲全局級別,可用於選項文件,屬非動態變量。
max_relay_log_size={4096..1073741824}    #設定從服務器上中繼日誌的體積上限,到達此限度時其會自動進行中繼日誌滾動。此參數值爲0時,mysqld將使用max_binlog_size參數同時爲二進制日誌和中繼日誌設定日誌文件體積上限。做用範圍爲全局級別,可用於配置文件,屬動態變量。
 mysql

相關文章
相關標籤/搜索