查看mysql日志:
mysql> show global variables like '%log%';
mysql日志文件分為6種:
1.錯誤日志:記錄啟動、運行或停止時出現(xiàn)的問題,一般也會記錄警告日志
2.一般查詢?nèi)罩荆河涗浗⒌目蛻舳随溄雍蛨?zhí)行的語句
3.慢查詢?nèi)罩荆河涗浰袌?zhí)行時間超過long_query_time秒的所有查詢或不使用索引的查詢,可以幫我們定位服務(wù)器性能問題
4.二進制日志:任何引起或可能引起數(shù)據(jù)庫變化的操作,主要用于備份和即時點恢復(fù)
5.中繼日志:復(fù)制主服務(wù)器的二進制日志,并保存為日志文件
6.事務(wù)日志:記錄InnoDB等支持事務(wù)的存儲引擎執(zhí)行事務(wù)時產(chǎn)生的日志
1,錯誤日志
錯誤日志主要記錄如下幾種日志:
———–> 服務(wù)器啟動和關(guān)閉過程中的信息
———–> 服務(wù)器運行過程中的錯誤信息
———–> 事件調(diào)度器運行一個事件時產(chǎn)生的信息
———–> 在從服務(wù)器上啟動從服務(wù)器進程時產(chǎn)生的信息
錯誤日志定義:
可以用–log-error [ = file_name ]選項來指定mysqld保存錯誤日志文件的位置。如果沒有給定file_name值,mysqld使用錯誤日志名host_name.err 并在數(shù)據(jù)目錄中寫入日志文件。如果你執(zhí)行FLUSH LOGS,錯誤日志用-old重新命名后綴并且mysqld創(chuàng)建一個新的空日志文件。(如果未給出–log-error選項,則不會重新命名)。
錯誤日志一般有以上兩個變量可以定義:
錯誤日志文件:log_error
啟用警告信息:log_warnings (默認啟用)
mysql> show global variables like 'log_error';
mysql> show global variables like 'log_warnings';
啟動開關(guān):general_log={ON|OFF}
日志文件變量:general_log_file [ =/PATH/TO/file]
全局日志開關(guān):log={ON|OFF}?? 該開關(guān)打開后,所有日志都會被啟用
記錄類型:log_output={TABLE|FILE|NONE}
log_output定義了日志的輸出格式,可以是表,文件,若設(shè)置為NONE,則不啟用日志,因此,要啟用通用查詢?nèi)罩?,需要至少配置general_log=ON,log_output={TABLE|FILE}。而general_log_file如果沒有指定,默認名是host_name.log。由于一般查詢使用量比較大,啟用寫入日志文件,服務(wù)器的I/O操作較多,會大大降低服務(wù)器的性能,所以默認為關(guān)閉的。
mysql> show global variables like 'general_log';
mysql> show global variables like'general_log_file';
可以使用以下命令開啟general_log:
mysql> set global general_log=1;
mysql> show global variables like 'general_log';
3、慢查詢?nèi)罩?/b>
查詢超時時間:long_query_time
啟動慢查日志:log_slow_queries={YES|NO}
啟動慢查日志 : slow_query_log
日志記錄文件:slow_query_log_file [= file_name ]
MySQL如果啟用了slow_query_log=ON選項,就會記錄執(zhí)行時間超過long_query_time的查詢(初使表鎖定的時間不算作執(zhí)行時間)。日志記錄文件如果沒有給出file_name值, 默認為主機名,后綴為-slow.log。如果給出了文件名,但不是絕對路徑名,文件則寫入數(shù)據(jù)目錄。
mysql> show global variables like '%slow_query_log%';
4,二進制日志
二進制日志啟動開關(guān):log-bin [= file_name]
在5.6及以上版本一定要手動指定。5.6以下版本默認file_name為$datadir/mysqld-binlog,二進制日志用于記錄所有更改數(shù)據(jù)的語句,主要用于復(fù)制和即時點恢復(fù)。二進制日志的主要目的是在數(shù)據(jù)庫存在故障時,恢復(fù)時能夠最大可能地更新數(shù)據(jù)庫(即時點恢復(fù)),因為二進制日志包含備份后進行的所有更新,二進制日志還用于在主復(fù)制服務(wù)器上記錄所有將發(fā)送給從服務(wù)器的語句。
查看二進制日志的工具為:mysqlbinlog
二進制日志的格式:
——>? 基于語句: statement
——>? 基于行: row
——>? 混合方式: mixed
由于基于語句和基于行的日志格式都有自己的好處,MySQL使用的二進制日志文件是混合方式的二進制日志,內(nèi)置策略會自動選擇最佳的格式。
二進制日志事件:
——>? 產(chǎn)生的時間:starttime
——>? 相對位置:position
二進制日志文件:
——>? 索引文件
——>? 二進制日志文件
在數(shù)據(jù)目錄下有一個mysql-bin.index便是索引文件,以mysql-bin開頭并以數(shù)字結(jié)尾的文件為二進制日志文件。
日志的滾動:
MySQL的滾動方式與其他日志不太一樣,滾動時會創(chuàng)建一個新的編號大1的日志用于記錄最新的日志,而原日志名字不會被改變。每次重啟MySQL服務(wù),日志都會自動滾動一次。
mysql> flush logs;
mysql> show master status; ? ? ? ? ####查看當(dāng)前正在使用的二進制文件
mysql> show binary logs; ? ? ? ? ? ? ####查看所有的二進制文件
使用命令mysqlbinlog查看二進制日志內(nèi)容:
基本語法:
mysqlbinlog [options] log-files
常用options(類似字節(jié)偏移數(shù)):
--start-position???? :開始位置
--stop-position???? :結(jié)束位置
--start-datetime 'yyyy-mm-dd hh:mm:ss'? :開始時間
--stop-datetime 'yyyy-mm-dd hh:mm:ss'? :結(jié)束時間
6,事務(wù)日志
事務(wù)性存儲引擎用于保證(ACID)原子性、一致性、隔離性和持久性;其不會立即寫到數(shù)據(jù)文件中,而是寫到事務(wù)日志中。
innodb_flush_log_at_trx_commit:
———–>? 0: 每秒同步,并執(zhí)行磁盤flush操作;
———–>? 1:每事務(wù)同步,并執(zhí)行磁盤flush操作;
———–>? 2: 每事務(wù)同步,但不執(zhí)行磁盤flush操作;
mysql> show global variables like 'innodb_flush_log_at_trx_commit';