數據庫學習----MySQL 日誌

MySQL 日誌

記錄MySQL學習過程中的所有日誌,可能不一定所有的都會用到

MySQL 常用的日誌類型

日誌名稱 作用
錯誤日誌(error_log) 記錄mysql在啓動、運行或停止時出現的問題
常規日誌(general_log) 記錄所有發向MySQL的請求
慢查日誌(slow_query_log) 記錄符合條件的查詢
二進制日誌(binary_log) 記錄全部有效的數據修改日誌
中繼日誌(relay_log) 用於主從複製,臨時存儲從主庫的二進制日誌

錯誤日誌

  • 分析排除MySQL 運行錯誤
  • 記錄未經授權的訪問

配置錯誤日誌

  • log_error=$mysql/sql_log/mysql-error.log(MySQL 的錯誤日誌存儲目錄)
  • log_error_verbosity=[1,2,3] (級別越高,記錄的日誌越多)
verbosity 作用
1 Error messages
2 Error and warning messages
3 Error,warning,and note messages
  • log_error_services=[日誌服務組件;日誌服務組件] (MySQL 8.0 中才有)
組件名稱 作用
log_filter_internal 默認的日誌過濾組件,依賴log_error_verbosity
log_sink_internal 默認的日誌輸出組件,依賴log_error
log_sink_json 將錯誤日誌輸出到json文件
log_sink_syseventlog 將錯誤日誌輸出到系統日誌文件

查看日誌目錄存放目錄

select @@log_error;

查看log_error_verbosity

select @@log_error_verbosity;

查看log_error_services;

select @@log_error_services;

查看日誌使用的時區

select @@log_timestamps;

設置系統時間作爲時間撮

set persist log_timestamps='SYSTEM';

配置常規日誌

分析客戶端發送到MySQL 的實際請求(短時間內會有大量的日誌被記錄)

這個日誌會從建立連接開始知道連接斷開的所有操作日誌。

密碼明文是不會記錄下來的

  • general_log=[ON|OFF]打開或關閉常規日誌(不是特殊情況不要打開)
  • general_log_file=$mysql/sql_log/general.log (常規日誌文件的位置)
  • log_output=[FILE|TABLE|NONE] 保存在表中或文件中 mysql 庫中的 general_log表

查看general_log

select @@general_log; 0 未啓動 1啓動

查看general_log 文件位置

select @@general_log_file;

設置general_log 文件目錄

set persist general_log_file='/home/mysql/sql_log/general.log'

啓動general_log

set global general_log=on;

設置log_output的位置

set global general_log='table’;

關閉log_output

set global general_log=off;

配置慢查詢日誌

將執行成功並符合條件的查詢記錄到日誌中

找到需要優化的SQL

  • slow_query_log=[ON|OFF] (配置是否打開慢查詢日誌)
  • slow_query_log_file=$mysql/sql_log/slowlog.log(慢查詢日誌文件位置)
  • long_query_time=xx秒(執行成功符合的條件----查詢時間)記錄所有sql可以將這個參數設置爲0
  • log_queries_not_using_indexes=[ON|OFF] (記錄所有沒有使用索引的SQL)
  • log_slow_admin_statements=[ON|OFF] (記錄所有使用admin 操作的日誌)
  • log_slow_slave_statements=[ON|OFF] (記錄二進制日誌,主從數據庫,很少使用,基本不打開了)

查看慢查詢日誌設置的慢查詢時間

show variables like 'long_query_time';

修改慢查詢日誌的慢查詢時間

set global long_query_time=0.01;

配置二進制日誌

記錄所有對數據庫中數據的修改

基於時間點的備份和恢復

主從複製

  • log-bin [=base_name]

  • binlog_format=[Row|STATEMENT|MIXED] (二進制日誌格式)

    • Row 每修改一行就記錄一條記錄
    • STATEMENT 5.7之前 默認 只記錄執行的SQL 語句(可避免主從不一致的問題)
    • MIXED MySQL 數據Row 與 STATEMENT 寫得混合
  • binlog_row_image=[FULL|MINIMAL|NOBLOB]

    • FULL 全部記錄
    • MINIMAL 只記錄被修改的值
    • NOBLOB 值記錄除了BLOB 外的值的修改
  • binlog_rows_query_log_events=[ON|OFF] (在ROW格式下記錄SQL)

  • log_slave_updates=[ON|OFF] 記錄從主數據庫同步過來的二進制數據

  • sync_binlog=[1|0] 控制MySQL 如何刷新日誌到磁盤

    • 1 :每寫一次就刷一次
    • 0 :由操作系統決定
  • expire_logs_days=days(每天清理一次二進制日誌)

  • PURGE BINARY LOGS TO ‘mysql-bin.010’ (把mysql-bin.001~mysql-bin.009 全部刪除掉)

  • PURGE BINARY LOGS BEFORE ‘2010-10-22 10:12:33’ (小於這個時間點的二進制日誌全部刪除掉)

查看是否打開二進制日誌

show variables like 'log_bin';

查看配置文件目錄

show variables like 'log_bin_basename';

查看binlog_row_image

show variables like 'binlog_row_image';

查看二進制日誌格式

show variables like 'binlog_format';

讀取二進制日誌(轉換爲可讀的內容)

mysqlbinlog --no-defaults -vv --base64-output=DECODE-ROWS 二進制日誌名

修改二進制日誌格式

set global binlog_row_image=minimal;

打開ROW 格式下記錄SQL

set binlog_rows_query_log_events=on;

配置中繼日誌

只有在主從複製的數據庫中才有

臨時記錄從主服務器同步的二進制日誌

  • relay_log=filename (用於文件位置和文件前綴,不填的話則會存在數據目錄中,會用主機名作爲前綴)
  • relay_log_purge=[ON|OFF] (對relay_log進行自動清除)

PS:flush logs 可以刷新日誌的配置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章