Mysql日誌管理

1. Mysql 日誌類型

日誌文件 選項 文件名 程序
表名稱
錯誤 --log-error host_name.err N/A
常規 --general_log host_name.log N/A
general_log
慢速查詢 --slow_query_log long_query_time host_name-slow. log slow_log mysqldumpslow
二進制 --log-bin --expire-logs-days host_name-bin.000001 mysqlbinlog
審計 --audit_log --audit_log_file ... audit.log N/A

2.錯誤日誌

查看錯誤日誌mysql

查看錯誤日誌
mysql> show variables like 'log_error';
mysql> show variables like '%log%';
配置:
[mysqld]
log-error=/data/mysql/mysql.log

錯誤日誌的做用:sql

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

記錄了服務器運行中產生的錯誤信息數據庫

記錄了服務在啓動和中止是所產生的信息vim

在從服務器上若是啓動了複製進程的時候,複製進程的信息也會被記錄服務器

記錄event錯誤日誌架構

3.通常查詢日誌

genral_logapp

記錄全部的已執行成功的操做。工具

能夠做爲審計功能性能

[mysqld]
general_log=on
general_log_file=/tmp/general.log #修改完成重啓數據庫
cat /tmp/general.log

4.二進制日誌

二進制日誌不依賴與存儲引擎的,依賴於SQL層

說明:默認開啓,精確的記錄了用戶對數據庫中的數據進行操做的命令和操做的數據對象。

二進制日誌文件的做用:

  • 提供了增量備份的功能
  • 提供了數據基於時間點的恢復,這個恢復的時間點能夠由用戶控制
  • 爲mysql的複製架構提供基礎,將這主服務器的二進制日誌複製到從服務器上並執行一樣的操做,就可將數據進行同步,能夠作主從

二進制日誌格式:

  • 基於語句 statement
  • 基於行 row 數據變化過程
  • 混合方式 mixed

二進制日誌事件:

  • position 基於位置
  • datetime 基於時間

查看是否開啓

mysql> show variables like '%log%bin%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin                         | OFF   |
| log_bin_basename                |       |
| log_bin_index                   |       |
| log_bin_trust_function_creators | OFF   |
| log_bin_use_v1_row_events       | OFF   |
| sql_log_bin                     | ON    |
+---------------------------------+-------+

開啓方式

vim /etc/my.cnf
[mysqld]
log-bin=/application/mysql/data/mysql-bin #配置文件修改,完成後重啓數據庫

查詢二進制日誌

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      120 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------

查詢bin log設置
mysql> show variables like '%binlog%';

定義記錄方式

statement :記錄量少,未來恢復的時候可能有問題

例子:一個表1000w行,update t1  name=‘a;

若是以statement(語句)記錄二進制日誌,將會記錄整個全部的1000W行變化。

只記錄update T1 set name='a';

例子二:update ti set date=now();

若是以statement (語句)記錄二進制日誌,只記錄update ti set date=now();未來恢復的時候

row =-------》推薦 基於行記錄,記錄數據的過程

以上例子1若是是row(行)模式記錄的全部整個1000W行的變化日誌。記錄的數據準確

缺點 :記錄量很是大.

mysql> show variables like '%format%';#查看

設置row模式

[root@db02 data]# vim /etc/my.cnf
[mysqld]
binlog-format=row
命令行修改
mysql> SET GLOBAL binlog_format= 'STATEMENT';
mysql> SET GLOBAL binlog_format= 'ROW';
mysql> SET GLOBAL binlog_format= 'MIXED';

查看

mysql> show variables like '%format%';

二進制日誌操做者

[root@db02 data]# ll mysql-bin.*
-rw-rw---- 1 mysql mysql 143 Nov 21 10:12 mysql-bin.000001
-rw-rw---- 1 mysql mysql 120 Nov 21 10:12 mysql-bin.000002
-rw-rw---- 1 mysql mysql  82 Nov 21 10:12 mysql-bin.index

二進制文件是能夠滾動的,條件是:

重啓數據庫的時候會自動滾動一個新的

執行mysql> flush logs;命令的時候

mysql命令行彙總的查看:

查看當前在使用的二進制文件

mysql> show binary logs;

刪除二進制文件

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

根據存在時間刪除日誌:
SET GLOBAL expire_logs_days= 7;#以天爲單位
…或者…
PURGE BINARY LOGS BEFORE now() -INTERVAL 3 day;
根據文件名刪除日誌:
PURGE BINARY LOGS TO 'mysql-bin.000010';

查看二進制文件內容

1.events 事件

二進制日誌如何定義:命令的最小發生單元

2.position

每一個事件在整個二進制文件中的相對位置號就是position

截取一段有用的日誌

mysqlbinlog  --start-position=120  --stop-position=384 mysql-bin.000004 >/tmp/inc.sql

恢復

1.臨時會話關閉二進制日誌

mysql> set sql_log_bin=0;

5.慢查詢日誌

MySQL的慢查詢日誌是MySQL提供的一種日誌記錄,它用來記錄在MySQL中響應時間超過閥值的語句,具體指運行時間超過long_query_time值的SQL,則會被記錄到慢查詢日誌中。long_query_time的默認值爲10,意思是運行10s以上的語句。

默認狀況下,MySQL數據庫並不啓動慢查詢日誌,須要咱們手動來設置這個參數,固然,若是不是調優須要的話,通常不建議啓動該參數,由於開啓慢查詢日誌或多或少會帶來必定的性能影響。慢查詢日誌支持將日誌記錄寫入文件,也支持將日誌記錄寫入數據庫表。

慢查詢日誌

  • 是將mysql服務器中影響數據庫性能的相關SQL語句記錄到日誌文件
  • 經過對這些特殊的SQL語句分析,改進以達到提升數據庫性能的目的。
  • 做爲優化的一中工具日誌。幫咱們定位問題

慢日誌設置

long_query_time:設定慢查詢的閥值,超出次設定值的SQL即被記錄到慢查詢日誌,缺省值爲10

slow_query_log:指定是否開啓慢查詢日誌

slow_query_log_file:指定慢日誌文件存放位置,能夠爲空,系統會給一個缺省的文件host_name-slow.log

min_examined_row_limit:查詢檢查返回少於該參數指定行的SQL不被記錄到慢查詢日誌

log_queries_not_using_indexes: 不使用索引的慢查詢日誌是否記錄到索引

2. 開啓慢查詢日誌

查看:

mysql> show variables like '%slow_query_log%';

+---------------------+---------------------------------------+

| Variable_name       | Value                                 |

+---------------------+---------------------------------------+

| slow_query_log      | OFF                                   |

| slow_query_log_file | /application/mysql/data/db02-slow.log |

+---------------------+---------------------------------------+

開啓:

配置文件修改

vim /etc/my.cnf

slow_query_log=on
slow_query_log_file=/tmp/slow.log

6.慢日誌分析工具mysqldumpslow

mysqldumpslow命令/path/mysqldumpslow -s c -t 10 /database/mysql/slow-log這會輸出記錄次數最多的10條SQL語句,其中:

-s 按照那種方式排序
    c:訪問計數
    l:鎖定時間
    r:返回記錄
    al:平均鎖定時間
    ar:平均訪問記錄數
    at:平均查詢時間
-t 是top n的意思,返回多少條數據。
-g 能夠跟上正則匹配模式,大小寫不敏感。

例子:

/path/mysqldumpslow-s r -t 10 /database/mysql/slow-log獲得返回記錄集最多的10個查詢。

/path/mysqldumpslow-s t -t 10 -g 「left join」/database/mysql/slow-log獲得按照時間排序的前10條裏面含有左鏈接的查詢語句。

相關文章
相關標籤/搜索