php mysql 日誌 MySQL日誌管理

2021-10-18 12:36:44 字數 4751 閱讀 6757

任何一種資料庫中,都有各種各樣的日誌。mysql也不例外,在mysql中有4種不同的日誌、分別錯誤日誌、二進位制日誌、查詢日誌和慢查詢日誌。這些日誌記錄著mysql資料庫不同方面的蹤跡。下文將介紹這4種不同的日誌作用和用途。

一.錯誤日誌

錯誤日誌在mysql資料庫中很重要,它記錄著mysqld啟動和停止,以及伺服器在執行過程中發生的任何錯誤的相關資訊。

1.配置資訊

--log-error=[file-name]用來指定錯誤日誌存放的位置。

如果沒有指定[file-name],預設hostname.err做為檔名,預設存放在datadir目錄中。

也可以將log-error配置到my.cnf檔案中,這樣就省去了每次在啟動mysqld時都手工指定--log-error.例如:

[mysql@test2]$ vi /etc/my.cnf

# the mysql server

[mysqld]

log-error = /var/lib/mysql/test2_mysqld.err

二.二進位制日誌

二進位制日誌也通常被稱為binlog,它記當著所有的ddl和dml,但不包括資料查詢語句。

1.配置資訊

--log-bin=[file-name]用來指定錯誤日誌存放的位置。

如果沒有指定[file-name],預設為主機名後面跟-bin做為檔名,預設存放在datadir目錄中。

也可以將log-bin配置到my.cnf檔案中,這樣就省去了每次在啟動mysqld時都手工指定--log-bin.例如:

# the mysql server

[mysqld]

log-bin = /var/lib/mysql/log-bin

2.檢視blnlog

由於binlog以是binary方式訪問,不能直接檢視,需要用mysql提供的mysqlbinlog工具檢視。

3.刪除binlog

(1).用reset master命令刪除所有日誌,新日誌重新從000001開始編號

(2).用purge master logs to 'mysq-bin.******' 命令可以刪除指定編號前的所有日誌

(3).用purge master logs to before 'yyyy-mm-dd hh24:mi:ss'命令可以刪除'yyyy-mm-dd hh24:mi:ss'之前的產生的所有日誌

(4).可以在my.cnf中指定--expire_logs_days=#,此引數設定了binlog日誌的過期天數

三.查詢日誌

查詢日誌記錄了clinet的所有的語句。

note:由於log日誌記錄了資料庫所有操作,對於訪問頻繁的系統,此種日誌會造成效能影響,建議關閉。

1.配置資訊

--log=[file-name]用來指定錯誤日誌存放的位置。

如果沒有指定[file-name],預設為主機名(hostname)做為檔名,預設存放在datadir目錄中。

也可以將log配置到my.cnf檔案中,這樣就省去了每次在啟動mysqld時都手工指定--log.例如:

# the mysql server

[mysqld]

#query-log

log = /var/lib/mysql/query_log.log

2.讀取查詢日誌

查詢日誌是純文字格可,可以使用os文字讀取工具直接開啟檢視。例如:

[mysql@test2]$ tail -n 15 query_log.log

080313 7:58:28 17 query show tables

080313 8:07:45 17 quit

080313 10:01:48 18 connect root@localhost on

080313 10:02:38 18 query select database()

18 init db test

080313 10:02:42 18 query show tables

080313 10:03:07 18 query select * from pet

080313 10:06:26 18 query insert into pet values('hunter','yxyup','cat','f','1996-04-29',null)

080313 10:06:39 18 query select * from pet

080313 10:07:13 18 query update pet set ***='m' where name='hunter'

080313 10:07:38 18 query delete from pet where name='hunter'

080313 10:13:48 18 query desc test8

080313 10:14:13 18 query create table t1(id int,name char(10))

080313 10:14:41 18 query alter table t1 add *** char(2)

四.慢查詢日誌

慢查詢日誌是記錄了執行時間超過引數long_query_time(單位是秒)所設定值的sql語句日誌。

note:慢查詢日誌對於我們發現效能有問題的sql有很幫助,建議使用並經常分析

1.配置資訊

--log-slow-queries=[file-name]用來指定錯誤日誌存放的位置。

如果沒有指定[file-name],預設為hostname-slow.log做為檔名,預設存放在datadir目錄中。

也可以將log-slow-queries配置到my.cnf檔案中,這樣就省去了每次在啟動mysqld時都手工指定--log-slow-queries.例如:

# the mysql server

[mysqld]

#slow-query-log

log-slow-queries = /var/lib/mysql/slow_query_log.log

2.讀取慢查詢日誌

[mysql@test2]$ cat slow_query_log.log

/usr/local/mysql/bin/mysqld, version: 5.0.26-standard-log. started with:

tcp port: 3306 unix socket: /var/lib/mysql/mysql.sock

time id command argument

# time: 080313 5:41:46

# user@host: root[root] @ localhost

# query_time: 108 lock_time: 0 rows_sent: 0 rows_examined: 8738

use test;

select count(1) from t1 a, t1 b,t1 c where a.id=b.id and b.name=c.name;

# time: 080313 5:52:04

# user@host: root[root] @ localhost

# query_time: 583 lock_time: 0 rows_sent: 0 rows_examined: 508521177

select count(1) from t1 a, t1 b where a.id=b.id;

/usr/local/mysql/bin/mysqld, version: 5.0.26-standard-log. started with:

tcp port: 3306 unix socket: /var/lib/mysql/mysql.sock

time id command argument

# time: 080313 10:39:59

# user@host: root[root] @ localhost

# query_time: 11 lock_time: 0 rows_sent: 4537467 rows_examined: 4537467

use test;

select id from tail;

如果慢查詢日誌記錄很多可以使用mysqldumpslow進行分類彙總

[mysql@test2]$ mysqldumpslow slow_query_log.log

reading mysql slow query log from slow_query_log.log

count: 1 time=583.00s (583s) lock=0.00s (0s) rows=0.0 (0), root[root]@localhost

select count(n) from t1 a, t1 b where a.id=b.id

count: 1 time=108.00s (108s) lock=0.00s (0s) rows=0.0 (0), root[root]@localhost

select count(n) from t1 a, t1 b,t1 c where a.id=b.id and b.name=c.name

count: 1 time=11.00s (11s) lock=0.00s (0s) rows=4537467.0 (4537467), root[root]@localhost

select id from tail;

是否啟用了日誌

mysql>show variables like 'log_%';

怎樣知道當前的日誌

mysql> show master status;

顯示二進位制日誌數目

mysql> show master logs;

php mysql日誌系統設計

日誌系統的作用 1 了解線上系統的執行狀態 2 快速準確定位線上問題 3 發現系統瓶頸 4 預警系統潛在風險 5 挖掘產品最大價值 6 設計目標 1 支援高併發日誌寫入 2 億級訊息內容儲存 3 支援監控報警 4 分布式 高可用 儲存選擇 mysql tokudb redis mysql tokud...

php mysql查詢 php查詢mysql的例項

php查詢mysql的例項 背景 從mysql查詢各字段值輸出並且按照條件用紅色字型顯示滿足條件字段值。條件 1.syntime小於當前前一周時間的話顯示紅色。2.a欄位為 無 的話,顯示紅色。3.b欄位為 無 的話,顯示紅色。圖一資料庫結構 圖二資料庫各字段值 我的 我只滿足了第乙個條件,其餘兩個...

php mysql例子 PHP連線mysql例子

我準備建立乙個簡單的通訊錄,資料庫的名字叫txl,資料庫只有乙個表叫personal info,表中有5個字段 pi id pi name pi tel pi qq pi email 首先我們要建立資料庫 create database txl 然後我們建立表 create table person...