查看所有日誌相關變量:
SHOW GLOBAL VARIABLES LIKE '%log%';
1.查詢日誌:
log_output = {TABLE|FILE|NONE}
log_output = TABLE,FILE 查詢日誌放在哪,可以記錄在文件中也可以記錄在表中
FILE: gerenal_log
general_log = {ON|OFF}: 是否啓用查詢日誌
general_log_file = HOSTNAME.log:當log_output有FILE類型時,日誌信息的記錄位置
2.慢查詢日誌:查詢執行時長超過指定時長的查詢操作所記錄日誌
生產環境中應該啓用,通過在配置文件修改參數啓用! SELECT @@GLOBAL.long_query_time; +--------------------------+ | @@GLOBAL.long_query_time | +--------------------------+ | 10.000000 | +--------------------------+ 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.錯誤日誌:會記錄以下信息:
mysqld啓動和關閉過程中輸出的信息;
mysqld運行中產生的錯誤信息;
event scheduler運行一個event時產生的日誌信息;
在主從複製架構中的從服務器上啓動從服務器線程時產生的日誌信息;
相關變量:
log_error = /path/to/somefile 也可以使用ON或OFF
log_warnings = {ON|OFF}:是否記錄警告信息於錯誤日誌中;
4.二進制日誌:記錄導致數據改變或潛在導致數據改變的SQL語句,便於崩潰了丟失數據後重放記錄的事件實現數據恢復
SHOW {BINARY | MASTER} LOGS:查看主服務器端處於由mysqld維護狀態中的二進制日誌文件; SHOW MASTER STATUS:查看當前正在使用的二進制日誌文件是哪個以及記錄到哪個位置了 SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]:顯示指定的二進制日誌文件中的相關事件 示例: MariaDB [(none)]> CREATE DATABASE mydb; Query OK, 1 row affected (0.04 sec) MariaDB [(none)]> SHOW MASTER LOGS; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 328 | +------------------+-----------+ 1 row in set (0.00 sec) MariaDB [(none)]> SHOW BINLOG EVENTS IN 'mysql-bin.000001' -> ; +------------------+-----+-------------+-----------+-------------+-----------------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +------------------+-----+-------------+-----------+-------------+-----------------------------------------------+ | mysql-bin.000001 | 4 | Format_desc | 1 | 245 | Server ver: 5.5.44-MariaDB-log, Binlog ver: 4 | | mysql-bin.000001 | 245 | Query | 1 | 328 | CREATE DATABASE mydb | +------------------+-----+-------------+-----------+-------------+-----------------------------------------------+ 2 rows in set (0.00 sec)
日誌記錄格式:
①基於“語句”記錄;statement 高效,對IO影響小,但是併發或者調用函數記錄時有時會產生數據不一致而重放錯誤
②基於“行”記錄;row 基於語句執行後結果記錄,精確度高,但是對IO影響較大
③混合 :mixed 系統自行判斷
二進制日誌文件的構成:
日誌文件:文件名前綴.文件名後綴 mysql-bin.000001
索引文件:文件名前綴.index mysql-bin.index
服務器變量:
log_bin = /path/to/somefile 記錄位置
binlog_format = MIXED|statement|row 記錄格式
sql_log_bin = ON 是否啓用
max_binlog_size = 1073741824定義二進制日誌文件的單文件上限,不宜太大,默認1G,到達1G會自動滾動
max_binlog_cache_size = 18446744073709547520
max_binlog_stmt_cache_size = 18446744073709547520
expire_logs_days 多久不使用就刪除,0表示不啓用根據時間自動清理功能
sync_binlog = 1|0:設定多久從內存同步一次二進制日誌文件到磁盤;0表示不同步;1表示只要事務commit就要執行一次同步,其他任何正值都表示記錄多少個語句後同步一次;
二進制日誌的查看命令:
mysqlbinlog [-u|-p|-h]
-j, --start-position=#:從指定的事件位置查看
--stop-position=#:只顯示到指定的事件位置
--start-datetime=name
--stop-datetime=name
YYYY-MM-DD hh:mm:ss
二進制日誌的格式:
mysqlbinlog mysql-bin.000001 顯示二進制日誌文件的工具
[root@testserver mysql]# mysqlbinlog mysql-bin.000001 /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!40019 SET @@session.max_insert_delayed_threads=0*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; # at 4 #151109 22:10:10 server id 1 end_log_pos 245 Start: binlog v 4, server v 5.5.44-MariaDB-log created 151109 22:10:10 at startup # Warning: this binlog is either in use or was not closed properly. ROLLBACK/*!*/; BINLOG ' QqlAVg8BAAAA8QAAAPUAAAABAAQANS41LjQ0LU1hcmlhREItbG9nAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAABCqUBWEzgNAAgAEgAEBAQEEgAA2QAEGggAAAAICAgCAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAABub2HQ== '/*!*/; # at 245 #151109 22:27:20 server id 1 end_log_pos 328 Query thread_id=2 exec_time=0 error_code=0 SET TIMESTAMP=1447079240/*!*/; SET @@session.pseudo_thread_id=2/*!*/; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; SET @@session.sql_mode=0/*!*/; SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; /*!\C utf8 *//*!*/; SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/; SET @@session.lc_time_names=0/*!*/; SET @@session.collation_database=DEFAULT/*!*/; CREATE DATABASE mydb /*!*/; DELIMITER ; # End of log file ROLLBACK /* added by mysqlbinlog */; /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
以上信息解析:
事件發生的日期和時間;(140829 15:50:07)
事件發生在服務器的標識(server id)避免多次重複重放
事件的結束位置:(end_log_pos 19486)下一個事件的起始位置
事件的類型:(Query)
事件發生時所在的服務器執行此事件的線程的ID:(thread_id=13)
語句的時間戳與將其寫入二進制文件中的時間差:(exec_time=0表示事件一產生就直接記錄到日誌中了)
錯誤代碼:(error_code=0)
事件內容:(SET TIMESTAMP=1409298607/*!*/處開始;)
GTID事件專屬:用於複製時定義一個ID,避免事物間的衝突,可以按照指定順序提交事務
事件所屬的全局事務的GTID:(GTID 0-1-2)
5.中繼日誌:複製架構中從服務器用於保存從主服務器的二進制文件中讀取到的事件
6.事務日誌(innodb存儲引擎):幫助事務型存儲引擎實現ACID
分組保存於硬盤上一段連續的存儲空間上,避免了大量的隨機IO,轉而用順序IO,一個組至少兩個文件,循環使用。
查詢時不僅會查詢數據文件,也會查詢緩存在內存中(加速查詢)的事務日誌文件。否則可能會出現數據不一致情況,這段內存空間就是buffer_pool
innodb_log_buffer_size | 8388608 buffer_pool大小定義 innodb_log_file_size | 5242880 事務日誌文件大小定義