Mysql常用日志類型及場景。


日志相關的常見問題

1、mysql常用日志有哪些?我們在什么情況下使用這些日志?
2、如何通過日志類審計用戶活動? 通過插件實現,mysql GPL版沒有審計日志。percona mysql有審計日志功能。

(1)常用日志類型

  • 錯誤日志(error-log):記錄mysql在啟動、運行和停止時出現的問題診斷分析。
  • 常規日志(general_log):記錄所有mysql客戶端發向mysql服務器的請求。包括連接請求、數據庫操作請求以及一些管理命令,無論請求是否成功都會記錄在這個日志中,可想如果是一個繁忙的業務系統場景,這個日志會很大,所以開啟這個日志會對數據庫服務器性能會有一定的影響,在業務系統中用完一定要記得關掉和清理這個日志中的內容。
  • 慢查詢日志(slow_query_log):記錄符合條件的查詢。
  • 二進制日志(binary_log):記錄全部有效的數據修改日志。
  • 中繼日志(relay_log):用於主從復制,臨時存儲從主庫同步的二進制日志。

(2)各種日志的配置和使用場景

  ①錯誤日志(error-log)a.分析排查mysql運行錯誤;b.記錄未經授權的訪問。
  log_error=$mysql/sql_log/mysql-error.log
  log_error_verbosity=[1,2,3]   5.7新增  錯誤日志中記錄錯誤信息的級別;
>select @@log_error_verbosity;
注釋:
1:Error messages
2:Error and warning messages
3:Error,waring and note message
  log_error_services=[日志服務組件;日志服務組件] 8.0新增  
常用錯誤日志的服務組件:
log_filter_internal: 默認的日志過濾組件,依賴log_error_verbosity
log_sink_internal:   默認的日志輸出組件,依賴log_error
log_sink_json:       將錯誤日志輸出到json文件
log_sink_syseventlog:將錯誤日志輸出到系統日志文件
  log_timestamps: 這個參數主要是控制 error log、slow_log、genera log,等等記錄日志的顯示時間參數,但不會影響 general log 和 slow log 寫到表 (mysql.general_log, mysql.slow_log) 中的顯示時間,該參數全局有效,可以被設置的值有:UTC  SYSTEM,默認使用 UTC。它還支持動態設置,不過建議大家在配置文件中就寫上,以免重啟之后造成不必要的麻煩。
>select @@log_timestamps;
>set GLOBAL log_timestamps = SYSTEM

  ②常規日志(general_log): 分析客戶端發送到mysql的實際請求

general_log = [ON|OFF]/[1/0]
general_log_file = $mysql/sql_log/general.log
log_output = [file|table|none]
show variables like 'general_log';

  ③慢查日志(slow_query_log):a.將執行成功並符合條件的查詢記錄到日志中,b.找到需要優化的sql.

slow_query_log=[on|off]
slow_query_log_file=$mysql/sql_log/slowlog.log
long_query_time=XX秒 (可以精確到微秒)查詢超過這個值才會被記錄到slowlog中,互聯網行業中一般設置0.001s比較合適。
set global long_query_time=0.001. 只對新建立的連接起作用。設置為0 是記錄所有sql.
log_queries_not_using_indexes=[on|off]
log_slow_admin_statements=[on|off].設置為on時將會記錄管理類命令比如create drop等。
log_slow_slave_statements=[on|off] 。前提要開啟binlog.

   ④二進制日志(binary_log):a.記錄所有對數據庫中數據的修改;b.基於時間點的備份和恢復;c.高可用架構的基礎-主從復制

常用配置參數:
log_bin =  [base_name]  靜態參數 只能在my.cnf中配置 重啟服務后生效。 5.7之前一般不會啟用這個參數。
binlog_format = [row/statement/mixed] 動態參數。 5.7之后默認row 主從復制中安全性比較高
binlog_row_image = [full/minimal/noblob]  minimal 只會記錄被修改的值,noblob會記錄除blob外的所有修改前修改后的值。full沒修改的列對應值也會記錄。
set session binlog_row_image = 'minimal';
binlog_rows_query_log_events = [on|off]  會同時記錄執行的sql語句
log_slave_updates = [on|off]   默認情況下slave不會記錄同步主庫過來的binlog日志,有些情況比如級聯復制  slave是另一個mysql實例的主,還有需要gtid復制。都需要記錄從主從同步過來的binlog日志。
sync_binlog = [1|0]  控制如何刷新二進制日志到磁盤,mysql每寫一次二進制日志都會向磁盤刷新一次。
二進制日志的清除:
expire_logs_days = days  動態參數
purge binary logs to 'mysql-bin.010' 將指定日志前的二進制日志都刪除。
purge binary logs before 'yyyy-mm-dd hh24:mi:ss';刪除指定日期前的日志。

  ⑤中繼日志(relay_log):

relay_log = filename  指定relay log存放位置和名稱。
relay_log_purge = [on|off]   自動清理

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM