MySQL之:日志

日志:

  • 事務(wù)日志:transaction log
  • 中繼日志:reley log
  • 錯(cuò)誤日志:error log
  • 通用日志:general log
  • 慢查詢?nèi)罩荆簊low query log
  • 二進(jìn)制日志:binary log

事務(wù)日志:transaction log

  • 事務(wù)型存儲引擎自行管理和使用,建議和數(shù)據(jù)文件分開存放
    修改配置文件:/etc/my.cnf
    [mysqld]
    innodb_log_file_size=1G
    innodb_log_file_in_group=5
    innodb_log_group_home_dir=/data/innodb_log      #自定義目錄,和數(shù)據(jù)不要放在同一磁盤上
    
  • 功能:
    • redo log
    • undo log
  • Innodb事務(wù)日志相關(guān)配置:
    MariaDB [test]> show variables like '%innodb_log%';
    +---------------------------+---------+
    | Variable_name             | Value   |
    +---------------------------+---------+
    | innodb_log_block_size     | 512     |      #事務(wù)日志塊大小
    | innodb_log_buffer_size    | 8388608 |      #事務(wù)日志寫入緩存大小
    | innodb_log_file_size      | 5242880 |      #每個(gè)事務(wù)日志文件大小
    | innodb_log_files_in_group | 2       |      #事務(wù)日志組成員個(gè)數(shù)
    | innodb_log_group_home_dir | ./      |      #事務(wù)文件路徑
    +---------------------------+---------+
    5 rows in set (0.00 sec)
    

中繼日志:relay log

主從復(fù)制架構(gòu)中,從服務(wù)器用于保存從主服務(wù)器的二進(jìn)制日志中讀取到的事件

錯(cuò)誤日志:

  • mysqld啟動(dòng)和關(guān)閉過程中輸出的事件信息
  • mysqld運(yùn)行中產(chǎn)生的錯(cuò)誤信息
  • event scheduler運(yùn)行一個(gè)event時(shí)產(chǎn)生的日志信息
  • 在主從復(fù)制架構(gòu)中的從服務(wù)器上啟動(dòng)從服務(wù)器線程時(shí)產(chǎn)生的信息
錯(cuò)誤日志相關(guān)配置:

SHOW GLOBAL VARIABLES LIKE 'log_error';

  • 錯(cuò)誤文件路徑:
    log_error=/PATH/TO/LOG_ERROR_FILE
  • 是否記錄警告信息至錯(cuò)誤日志文件
    log_warnings=1|0默認(rèn)值1

通用日志:

記錄對數(shù)據(jù)庫的通用操作,包括錯(cuò)誤的SQL語句,通常在排錯(cuò)時(shí)才會啟用

  • 文件:file,默認(rèn)值
  • 表:table
通用日志相關(guān)設(shè)置:

general_log=ON|OFF
general_log_file=HOSTNAME.log
log_output=TABLE|FILE|NONE

慢查詢?nèi)罩荆?/h4>

記錄執(zhí)行查詢時(shí)長超出指定時(shí)長的操作

  • 開啟或關(guān)閉慢查詢
    slow_query_log=ON|OFF
  • 慢查詢的閾值,單位秒
    long_query_time=N
  • 慢查詢?nèi)罩疚募?br> slow_query_log_file=HOSTNAME-slow.log
  • 定義哪些類型查詢時(shí)長超過long_query_time的值,則記錄日志
    log_slow_filter=admin,filesort,filesort_on_disk,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk
  • 不使用索引或使用全索引掃描的,不論是否達(dá)到慢查詢閾值的語句是否需要記錄日志;默認(rèn)OFF,即不記錄
    log_queries_not_using_indexes=ON
  • 多少次查詢才記錄,mariadb特有
    log_slow_rate_limit=1
  • 記錄內(nèi)容的詳細(xì)程度
    log_slow_verbosity=Query_plan,explain
  • slow_query_log,新版已廢棄
    log_slow_queries=OFF

profileing變量:

分析查詢語句的執(zhí)行過程,每一步所花費(fèi)的時(shí)間,進(jìn)而優(yōu)化查詢語句

MariaDB [test]> SHOW VARIABLES LIKE 'profil%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| profiling              | OFF   |
| profiling_history_size | 15    |
+------------------------+-------+
2 rows in set (0.00 sec)

MariaDB [test]> SHOW profiles;
+----------+------------+-------------------------------+
| Query_ID | Duration   | Query                         |
+----------+------------+-------------------------------+
|        1 | 0.00026302 | select * from students        |
|        2 | 0.00017646 | SELECT * FROM students        |
|        3 | 0.00039128 | SHOW VARIABLES LIKE 'profil%' |
+----------+------------+-------------------------------+
3 rows in set (0.00 sec)

MariaDB [test]> SHOW profile FOR QUERY 3;
+----------------------+----------+
| Status               | Duration |
+----------------------+----------+
| starting             | 0.000050 |
| Opening tables       | 0.000035 |
| After opening tables | 0.000004 |
| System lock          | 0.000003 |
| Table lock           | 0.000003 |
| After table lock     | 0.000005 |
| init                 | 0.000009 |
| optimizing           | 0.000007 |
| statistics           | 0.000014 |
| preparing            | 0.000008 |
| executing            | 0.000003 |
| Filling schema table | 0.000187 |
| executing            | 0.000004 |
| Sending data         | 0.000022 |
| end                  | 0.000003 |
| query end            | 0.000003 |
| closing tables       | 0.000001 |
| removing tmp table   | 0.000003 |
| closing tables       | 0.000002 |
| freeing items        | 0.000003 |
| updating status      | 0.000019 |
| cleaning up          | 0.000003 |
+----------------------+----------+
22 rows in set (0.00 sec)

二進(jìn)制日志

  • 記錄導(dǎo)致數(shù)據(jù)改變或潛在導(dǎo)致數(shù)據(jù)改變的SQL語句
  • 記錄已提交的日志
  • 不依賴于存儲引擎類型
  • 功能:通過“重放”日志文件中的事件來生成數(shù)據(jù)副本

注意:建議二進(jìn)制日志和數(shù)據(jù)文件分開存放

二進(jìn)制日志記錄格式:
  • 二進(jìn)制日志記錄三種格式:
    1. 基于“語句”記錄:statement,記錄語句,默認(rèn)模式
    2. 基于“行”記錄:row,記錄數(shù)據(jù),日志量較大(強(qiáng)烈建議生產(chǎn)環(huán)境中配置此格式
    3. 混合模式:mixed,讓系統(tǒng)自行判定該基于哪種方式進(jìn)行
  • 格式配置
    show variables like '%binlog_format%';
二進(jìn)制日志文件的構(gòu)成:

有兩類文件:

  1. 日志文件:mysql|mariadb-bin.文件名后綴,二進(jìn)制格式
    ??如:mysql-bin.000001
  2. 索引文件:mysql|mariadb-bin.index,文本格式
二進(jìn)制日志相關(guān)的服務(wù)器變量:
  • sql_log_bin=ON|OFF:是否記錄二進(jìn)制日志,默認(rèn)ON
  • log_bin=/PATH/BIN_LOG_FILE:指定文件位置;默認(rèn)OFF,表示不啟用二進(jìn)制日志功能,上述兩項(xiàng)都開啟才可
  • binlog_format=STATEMENT|ROW|MIXED:二進(jìn)制日志記錄的格式,默認(rèn)STATEMENT(建議改成 ROW
  • max_binlog_size=1073741824:單個(gè)二進(jìn)制日志文件的最大體積,到達(dá)最大值會自動(dòng)滾動(dòng),默認(rèn)為1G(文件達(dá)到上限時(shí)的大小未必為指定的精確值)
  • sync_binlog=1|0:設(shè)定是否啟動(dòng)二進(jìn)制日志即時(shí)同步磁盤功能,默認(rèn)0,由操作系統(tǒng)負(fù)責(zé)同步日志到磁盤
  • expire_log_days=N:二進(jìn)制日志可以自動(dòng)刪除的天數(shù)。默認(rèn)為0,即不自動(dòng)刪除
二進(jìn)制日志相關(guān)配置
  • 查看mariadb自行管理使用中的二進(jìn)制日志文件列表,及大小
    SHOW {BINARY|MASTER} LOGS
  • 查看使用中的二進(jìn)制日志文件
    SHOW MASTER STATUS
  • 查看二進(jìn)制文件中的指定內(nèi)容
    SHOW BINLOG EBENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
    SHOW BINLOG EVENTS IN 'mysql-bin.000001' FROM 6516 LIMIT 2,3;
二進(jìn)制日志的客戶端命令工具:mysqlbinlog
  • 格式:
    mysqlbinlog [OPTIONS] log_file...
    --start-position=# 指定開始位置
    --stop-position=#
    --start-datetime=
    --stop-datetime=
    時(shí)間格式:YYYY-MM-DD hh:mm:ss
    --base64-output[=name]
  • 示例:
    mysqlbinlog --start-position=6787 --stop-position=7527 /var/lib/mysql/mariadb-bin.000003
    mysqlbinlog --start-datetime=:2018-01-30 20:30:10" --stop-datetime="2018-01-30 20:35:22" mariadb-bin.000003;
清除指定二進(jìn)制日志:

PURGE {BINARY | MASTER} LOGS {TO 'log_name' | BEFORE datetime_expr}

  • 示例:
    PURGE BINARY LOGS TO 'mariadb-bin.000003';:刪除3之前的日志
    PURGE BINARY LOGS BEFORE '2017-01-23';:刪除指定日期之前的日志
    PURGE BINARY LOGS BEFORE '2017-01-23 09:25:30';:刪除指定時(shí)間之前的日志
  • 刪除所有二進(jìn)制日志,index文件重新記數(shù)
    RESET MASTER [TO #];:日志文件從 # 開始記數(shù),默認(rèn)從1開始,一般是 master 第一次啟動(dòng)時(shí)執(zhí)行,MariaDB10.1.6 開始支持 TO #
  • 切換日志文件:
    FLUSH LOGS;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容