mysql之 日志体系(错误日志、查询日志、二进制日志、事务日志、中继日志)...
一、 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)
?
二、 ?mysql的查詢日志:
查詢日志記錄查詢語句與啟動時間,建議不是在調試環境下不要開啟查詢日志,因為會不斷占據你的磁盤空間,并會產生大量的IO。
查詢日志有兩種,分別是慢查詢日志(Slow Query Log)和通用查詢日志(General Query Log)。而且mysql的查詢日志不僅可以記錄到文件,還能自動保存到MySql數據庫中的表對象里。
1、慢查詢日志:
指的是所有查詢語句執行時間超過系統變量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命令,或者其他第三方工具查看分析。
2、通用查詢日志:
這個日志可以記錄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接收的順序。
3、配置查詢日志:
在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來刷新日志表或者日志文件。
日志表不允許創建分區。
?
三、 ?二進制日志文件:
通過二進制日志文件,可以主要實現三個重要的功能:用于復制,用于恢復,用于審計。
啟用二進制日志文件,在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中既有支持事務的存儲引擎,也有不支持事務的存儲引擎,因此在操作基于不同的存儲引擎對象時,二進制日志的處理也不一樣。
對于非事務表來說,語句執行后就會立即寫入二進制日志文件中。而對于事務表,則要到等到當前沒有任何鎖定或未提交的信息時才會寫入二進制日志文件中,以確保日志被記錄的始終是其執行的順序。
?
四、 ?事務日志:
事務日志文件名為"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 ? ?#事務日志組保存的鏡像數
?
五、 ?中繼日志:
在復制環境中產的的日志信息
與中繼日志相關的變量:
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參數同時為二進制日志和中繼日志設定日志文件體積上限。作用范圍為全局級別,可用于配置文件,屬動態變量。
?
本文轉自 張沖andy 博客園博客,原文鏈接:http://www.cnblogs.com/andy6/p/6921515.html?? ,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的mysql之 日志体系(错误日志、查询日志、二进制日志、事务日志、中继日志)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在iis中让asp.net的错误显示在远
- 下一篇: 学习ansible playbook之前