MySQL日誌簡介

來源:互聯網
上載者:User

標籤:linux、mysql

MySQL中的日誌主要分為以下幾種:

    查詢日誌

    慢查詢日誌

    錯誤記錄檔

    二進位日誌

    中繼日誌

    交易記錄

說明:

支援本文實驗使用的linux系統是CentOS7版本,使用的資料庫是base源內建的MariaDB,資料庫使用的儲存引擎使用預設的InnoDB


1、查詢日誌

記錄查詢語句、日誌儲存位置

日誌的存放位置有兩個地方:一是儲存在指定檔案中,一是儲存在指定的表中。考慮到I/O壓力,一般二者不會同時記錄

MariaDB [mysql]>  SHOW VARIABLES LIKE ‘general%‘;+------------------+-------------+| Variable_name    | Value       |+------------------+-------------+| general_log      | ON          || general_log_file | centos7.log |+------------------+-------------+2 rows in set (0.00 sec)#general_log預設是關閉的

從上述代碼可以看出,查詢日誌具有兩個變數;

下面來查看general_log表的詳細資料:

MariaDB [mysql]> DESC  general_log;+--------------+------------------+------+-----+-------------------+-----------------------------+| Field        | Type             | Null | Key | Default           | Extra                       |+--------------+------------------+------+-----+-------------------+-----------------------------+| event_time   | timestamp(6)     | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP || user_host    | mediumtext       | NO   |     | NULL              |                             || thread_id    | int(11)          | NO   |     | NULL              |                             || server_id    | int(10) unsigned | NO   |     | NULL              |                             || command_type | varchar(64)      | NO   |     | NULL              |                             || argument     | mediumtext       | NO   |     | NULL              |                             |+--------------+------------------+------+-----+-------------------+-----------------------------+6 rows in set (0.00 sec)

事件時間

使用者主機

事件的進程id

服務id

命令類型

參數

以上這些資訊構成了general_log的主要內容,即記錄的查詢日誌的操作內容可以通過上述資訊顯示

SET @@global.general_log=ON; #預設此變數是全域的,但是修改後能夠立即生效

開啟查詢日誌後,接著我們進行一些查詢操作如:

SELECT user,host,password FROM mysql.user;

這些查詢操作就會被記錄到記錄檔centos7.log檔案中,此檔案是預設檔案可以修改。而此檔案的存放路徑是相對路徑即/var/lib/mysql/

cat  /var/lib/mysql/centos7.log #能看到記錄的查詢操作了

以上示範的是日誌資訊記錄在檔案中,日誌還可以記錄在指定表中,只要修改一個變數即可:

SET @@global.log_output=TABLE;#預設是FILE

關於表的日誌記錄與檔案記錄類似,不再示範


2、慢查詢日誌

慢查詢:一條查詢指令已耗用時間超出一定時間長度的操作,這種操作會對使用者的體驗大打折扣,應該盡量避免

一般建議啟動此慢查詢日誌功能

MariaDB [mysql]> SELECT @@global.long_query_time;+--------------------------+| @@global.long_query_time |+--------------------------+|                10.000000 |+--------------------------+1 row in set (0.00 sec)

預設的慢查詢時間是10秒鐘

SELECT @@global.slow_query_log;#預設關閉慢查詢日誌SELECT @@global.slow_query_log_file;#預設檔案名稱為主機名稱-slow.log,如centos7-slow.log SELECT @@global.log_output;  #預設是檔案記錄

並不是所有的指令執行時間超過10秒鐘都會記錄,其是有一個過濾器的

SELECT @@global.log_slow_filter;#此變數指定的指令才會使用慢查詢

慢查詢日誌的用法與general_log的基本相同,不再贅述


3、錯誤記錄檔

顧名思義,記錄錯誤資訊,主要記錄如下幾類資訊:

(1) mysqld啟動和關閉過程中輸出的資訊; 

(2) mysqld運行中產生的錯誤資訊; 

(3) event scheduler運行時產生的資訊;

(4) 主從複製架構中,從伺服器複製線程啟動時產生的日誌;

錯誤記錄檔是否開啟,可以使用下述命令查看

SELECT @@global.log_error;#預設是開啟的,即指定具體記錄檔路徑 如/var/log/mariadb/mariadb.log #如果未開啟,則查詢的結果是OFF


4、二進位日誌

用於記錄引起資料改變或存在引起資料改變的潛在可能性的語句(STATEMENT)或改變後的結果(ROW),也可能是二者混合;

作用:

    重放 (replay),即發生故障時可以使用二進位日誌重新操作一遍故障發生前的指令

試想一下,在進行了全量備份資料庫後,過了一天主要資料庫裝置突然出現故障,這時我們雖然能夠使用全量備份來恢複資料庫,但是前一天的資料還未來得及備份,也就是說

少了一天的資料,這種情況下就可以使用二進位日誌恢複缺失的一天的資訊;

下面舉個例子說明二進位日誌在資料恢複中的重要作用:

  •     建立資料庫、表,插入資料

CREATE DATABASE RDBMS;USE RDBMS;CREATE TABLE tbl (id int primary key,name char(30) not null,age int not null);INSERT INTO tbl VALUES (1,‘xiao wang‘,20),(2,‘xiao li‘,22);
  • 檢查資訊

MariaDB [RDBMS]> DESC tbl;         +-------+----------+------+-----+---------+-------+| Field | Type     | Null | Key | Default | Extra |+-------+----------+------+-----+---------+-------+| id    | int(11)  | NO   | PRI | NULL    |       || name  | char(30) | NO   |     | NULL    |       || age   | int(11)  | NO   |     | NULL    |       |+-------+----------+------+-----+---------+-------+3 rows in set (0.00 sec)MariaDB [RDBMS]> SELECT * FROM tbl;+----+-----------+-----+| id | name      | age |+----+-----------+-----+|  1 | xiao wang |  20 ||  2 | xiao li   |  22 |+----+-----------+-----+2 rows in set (0.00 sec)
  • 修改mysql的服務組態檔,開啟二進位日誌功能

rpm -ql mariadb-server#可以查到設定檔的位置vim /etc/my.cnf.d/server.cnf[server]log_bin = /app/logs/master-log#指定二進位日誌的存放路徑,之所以在設定檔修改而不用命令列,是因為命令列不支援開啟二進位日誌功能
  • 查看二進位日誌資訊

SHOW MASTER|BINARY LOGS;#查看二進位記錄檔列表SHOW MASTER STATUS;#查看當前正在使用的二進位記錄檔SHOW BINLOG EVENTS IN ‘master-log.000001‘;#查看二進位記錄檔的事件資訊
  • 將當前資料庫進行全量備份

mysqlbinlog  -uroot -p master-log.000001 > /root/binlog.sql#binlog.sql就是備份的資料庫檔案#mysqlbinlog是mysql內建的二進位日誌工具

當在全新的備份伺服器上就行恢複時

mysql < /root/binlog.sql

按上述方式恢複即可


在/app/logs/下的二進位檔案是無法直接使用cat或less查看的,所以需要使用mysqlbinlog專用工具

mysqlbinlog  -uroot -pcentos master-log.000007 -j 430 --stop-position=874#-j 指定開始位置#--stop-position指定結束位置

查看的內容包含以下資訊:

事件的起始位置# at 553

事件發生的日期時間:#160831  9:56:08

事件發生的伺服器id:server id 1

事件的結束位置:end_log_pos 624

事件的類型:Query

事件發生時所在伺服器執行此事件的線程的ID: thread_id=2 

語句的時間戳記與將其寫入二進位記錄檔中的時間差:exec_time=0

錯誤碼:error_code=0

設定事件發生時的時間戳記:SET TIMESTAMP=1472608568/*!*/;

事件內容:BEGIN


以上就是關於mysql日誌的簡單介紹


本文出自 “a_pan” 部落格,謝絕轉載!

MySQL日誌簡介

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.