MySQL日誌管理

MySQL日誌管理

錯誤日誌

配置方法:mysql

vim /etc/my.cnf
[mysqld]
log-error=/tmp/mysql.log

查看配置方式:sql

show variables like '%log%error%';

做用:數據庫

記錄mysql數據庫的通常狀態信息及報錯信息,是咱們對於數據庫常規報錯處理的經常使用日誌。

通常查詢日誌

配置方法:vim

vim /etc/my.cnf
[mysqld]
general_log=on
general_log_file=/data/mysql/server2.log

查看配置方式:服務器

show variables like '%gen%';

做用:函數

記錄mysql全部執行成功的SQL語句信息,能夠作審計用,可是咱們不多開啓;
能夠做爲審計功能,通常狀況下這個日誌不會開,除非有特殊要求 例如:ELK

二進制日誌

建議剛部署mysql數據庫的時候就開啓二進制日誌工具

二進制日誌不依賴於存儲引擎的,依賴於sql層,記錄和sql語句有關的信息性能

  • 在sql層已經執行完成的語句,若是是事務,應當是已經完成的事務
  • 功能做用:備份和時間點恢復、主從

二進制日誌記錄了什麼?

已提交的數據記錄,以事件的形式記錄到二進制文件中測試

二進制記錄格式

必定要配置好二進制日誌spa

  • row(行模式):表中行數據的變化過程,記錄數據詳細,但對IO要求比較高,記錄數據在任何狀況下都是準確的。生產中通常是這種模式,此模式在5.7之後爲默認的模式
  • statement:語句模式,將SQL語句進行記錄。記錄信息簡潔,記錄的是sql語句自己,可是在語句中出現函數操做的話,有可能記錄的數據不許確(5.6中默認的模式,在生產環境慎用)
  • mixed:以上二者的混合模式。通過判斷,選擇row+statement混合的一種記錄模式。通常不用

開啓二進制日誌

配置文件開啓:
  vim /etc/my.cnf   log-bin=/data/mysql-bin ---- 在全局打開,二進制日誌的「總閘」 命令行開啓:   set sql_log_bin=1/0;    ---- 在會話級別臨時生效 二進制日誌的「分開關」,只有總閘開啓纔有意義(默認打開),有時候會臨時關閉掉,隻影響當前會話

做用:

一、是否開啓  

二、二進制日誌路徑/data 

三、二進制日誌文件名前綴mysql-bin 

四、文件名名以「前綴」.000001~N

設置二進制日誌記錄格式(建議是ROW)

配置文件中修改:

vim /etc/my.cnf
binlog-format=row
改完以後重啓

命令行修改:

mysql> SET GLOBAL binlog_format = 'STATEMENT';
mysql> SET GLOBAL binlog_format = 'ROW';
mysql> SET GLOBAL binlog_format = 'MIXED';

查看binlog設置

show variables like '%binlog%';

binlog日誌的查看方式

查看binlog原始信息

mysqlbin mysql-bin.000002

在row模式下,翻譯成語句

mysqlbinlog --base64-output='decode-rows' -v mysql-bin.000002

查看binlog事件

show binary logs;     全部在使用的binlog信息,查看全部存在的二進制日誌文件
show binlog events in '';  查看文件內容
show master status;   查看當前正在使用的二進制日誌文件

二進制日誌管理

默認狀況下,不會刪除舊的日誌文件。

刪除二進制日誌

根據存在時間刪除日誌:

SET GLOBAL expire_logs_days = 7;
或者PURGE BINARY LOGS BEFORE now() - INTERVAL 3 day;
reset master;  將全部binlog日誌刪除,並從新生成,從000001開始

根據文件名刪除日誌:

PURGE BINARY LOGS TO 'mysql-bin.000010';

刷新二進制日誌

flush logs

截取二進制日誌

mysqlbinlog --start-position=XX --stop-position=XX >a.sql

如何截取binlog信息內容,按需求恢復(常規思路)

(1)、使用show binary logs;   show master status;  查看當前正在使用的文件

(2)、show binlog events in '';  從後往前看,找到誤操做的事務,判斷事務開啓position和結束position

(3)、把誤操做的剔除掉,留下正常操做到兩個腳本中 :mysqlbinlog --start-position=XX --stop-position=XX 二進制日誌文件 >/tmp/in.sql

(4)、先測試庫操做,把誤操做的數據導出,而後生產庫恢復       ### 使用:source 恢復,恢復的時候,在當前窗口臨時關閉二進制日誌記錄

遇到的問題:

一、時間長

二、對生產數據有必定影響,有可能會出現冗餘數據

好的解決方案:

一、flashback(閃回功能)

二、經過備份,延時從庫

慢日誌slow log

是將mysql服務器中影響數據庫性能的相關SQL語句記錄到日誌文件

經過對這些特殊的SQL語句分析,改進以達到提升數據庫性能的目的。

調優過程當中的工具日誌,統計收集執行慢的語句

慢日誌設置

配置方法:

vim /etc/my.cnf
slow_query_log=NO
slow_query_log_file=/tmp/slow.log
  • long_query_time :設定慢查詢的閥值,超出次設定值的SQL即被記錄到慢查詢日誌,缺省值爲10s,現有版本能夠指定零點幾秒
  • slow_query_log: 指定是否開啓慢查詢日誌
  • slow_query_log_file: 指定慢日誌文件存放位置,能夠爲空,系統會給一個缺省的文件host_name-slow.log
  • min_examined_row_limit:查詢檢查返回少於該參數指定行的SQL不被記錄到慢查詢日誌
  • log_queries_not_using_indexes:不使用索引的慢查詢日誌是否記錄到索引
相關文章
相關標籤/搜索