MySQL日誌:
查詢日誌:query log
慢查詢日誌:查詢執行時長超過指定時長的查詢操作所記錄日誌 #slow query log
錯誤日誌:error log 包括服務自己啓動或關閉的正常信息
二進制日誌:binary log 非常重要的日誌,數據恢復
中繼日誌:reley log MySQL複製中用到的日誌
事務日誌:transaction log
ACID, 隨機I/O轉換爲順序I/O
1、查詢日誌:
記錄查詢操作:
記錄在文件中:file
表中:table
mysql> SHOW GLOBAL VARIABLES LIKE '%log%';
log_output = {TABLE|FILE|NONE}
log_output = TABLE,FILE,NONE
FILE: gerenal_log
general_log = {ON|OFF}: 是否啓用查詢日誌
general_log_file = HOSTNAME.log:當log_output有FILE類型時,日誌信息的記錄位置;
2、慢查詢日誌:
查詢時長超過指定時長的查詢操作:
mysql> SELECT @@GLOBAL.long_query_time; #查看執行的指定時長
+--------------------------+
| @@GLOBAL.long_query_time |
+--------------------------+
| 10.000000 |
+--------------------------+
1 row in set (0.01 sec)
mysql> SHOW GLOBAL VARIABLES LIKE 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
mysql> SET GLOBAL long_query_time=''; #設置臨時修改,如需要永久生效,需要寫入配置文件
slow_query_log = {ON|OFF}:是否啓用慢查詢日誌
slow_query_log = /path/to/somefile: 日誌文件路徑
log_slow_filter = admin,filesort,filesort_on_disk,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk
慢查詢日誌過濾器,哪一種查詢需要記錄,哪種不需要記錄
log_slow_rate_limit = #指明記錄的速率
log_slow_verbosity = #詳細級別
3、錯誤日誌:#默認是不開啓的
記錄的並非完全的錯誤日誌信息,記錄MySQL的正常啓動與關閉的日誌信息
mysqld啓動和關閉過程中輸出的信息;
mysqld運行中產生的錯誤信息;
event scheduler運行一個event時產生的日誌信息;
在主從複製架構中的從服務器上啓動從服務器線程時產生的日誌信息;
log_error = /path/to/somefile #指向絕對路徑
log_warnings = {ON|OFF}:1|0 也是可以的,#是否記錄警告信息於錯誤日誌中;
4、二進制日誌:不能使用cat等命令打開,可能會導致文件損壞
記錄導致數據改變或潛在導致數據改變的SQL語句;
功能:用於通過“重放”日誌文件中的事件來生成數據副本;
SHOW {BINARY | MASTER} LOGS:查看主服務器端處於由mysqld維護狀態中的二進制日誌文件;
SHOW MASTER STATUS: 查看使用的二進制日誌文件;
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]:顯示指定的二進制日誌文件中的相關事件
二進制日誌記錄格式:
基於“語句”記錄;statement
基於“行”記錄;row
“混合模式” :mixed,讓系統自動判定該基於那種方式進行;
二進制日誌文件的構成:
兩類文件
日誌文件:文件名前綴.文件名後綴
索引文件:文件名前綴.index #文本格式
服務器變量:
log_bin = /path/to/somefile 二進制日誌記錄的文件位置,通常爲OFF
binlog_format = STAETMENT|ROW|MIXED 二進制日誌記錄的格式;
sql_log_bin = ON 是否記錄二進制日誌
max_binlog_size = 1073741824 #單個二進制日誌文件的最大體積,默認是1G;
注意:(1)到達最大值會自動滾動;(2)文件到達上限時的大小未必會到達指定的最大值
二進制日誌文件的單文件上限;
max_binlog_cache_size = 18446744073709547520
max_binlog_stmt_cache_size = 18446744073709547520
expire_logs_days = 0 二進制日誌的自動清理功能默認設置爲0,不啓動該功能。
sync_binlog = 0|1:設定多久同步一次二進制日誌文件;
0表示不同步;任何正值都表示記錄多少個語句後同步一次;
1表示同步數據,當遇到事務commit時將進行二進制日誌同步一次;
二進制日誌事件的格式:
# at 19364
#140829 15:50:07 server id 1 end_log_pos 19486 Query thread_id=13 exec_time=0 error_code=0
SET TIMESTAMP=1409298607/*!*/;
GRANT SELECT ON tdb.* TO tuser@localhost
/*!*/;
# at 19486
事件發生的日期和時間;(140829 15:50:07)
事件發生在服務器的標識(server id)
事件的結束位置:(end_log_pos 19486)下一個事件的起始位置
事件的類型:(Query)
事件發生時所在的服務器執行此事件的線程的ID:(thread_id=13)
語句的時間戳與將其寫入二進制文件中的時間差:(exec_time=0)
錯誤代碼:(error_code=0)
事件內容:(SET TIMESTAMP=1409298607/*!*/;
GRANT SELECT ON tdb.* TO tuser@localhost)
GTID事件專屬:Global Rransction ID;
事件所屬的全局事務的GTID:(GTID 0-1-2)
二進制日誌的查看命令:
mysqlbinlog:客戶端命令工具
查看二進制文件事件信息
mysqlbinlog [OPTIONS] log_files
./mysqlbinlog /usr/log/mysql-bin.000003 二進制文件的覺得路徑
mysqlbinlog
-j, --start-position=#:從指定的事件位置查看
--stop-position=#:只顯示到指定的事件位置
--start-datetime=name
--stop-datetime=name
YYYY-MM-DD hh:mm:ss
-u
-h
-p
5、中繼日誌:
複製架構中,從服務器用於保存從主服務器的二進制日誌中讀取到的事件;
6、事務日誌(innodb存儲引擎):
幫助事務性存儲引擎保存數據的,事務型存儲引擎自行管理和使用的;
事務型存儲引擎自行管理和使用
redo log
undo log