Mysql日誌分析(錯誤日誌,Binlog日誌,慢日誌),有驚喜哦

Mysql日誌

1.錯誤日誌

1.作用

- 排查MySQL運行過程的故障.

2.默認配置

  • 1.默認就開啓了
    
  • 2.默認路徑和名字: datadir/hostname.err
    

在這裏插入圖片描述

3.人爲定製位置

- log_error=/tmp/mysql.log

重啓生效

show variables like 'log_error';

在這裏插入圖片描述

二進制日誌(binlog)

1.作用

- (1)備份恢復必須依賴二進制日誌
- (2)主從環境必須依賴二進制日誌

2. binlog配置 (5.7必須加server_id)

    1.默認:8.0版本以前,沒有開啓(注意:MySQL默認是沒有開啓二進制日誌的
	說明:和數據盤分開,防止數據盤損壞,導致binlong無法恢復
	2.默認配置方法

	server_id=6   # 主機編號。主從使用,    5.7以後開啓binlog要加此參數                        
	log_bin=/data/binlog/mysql-bin #日誌存放目錄+日誌名前綴,例如:mysql-bin.000001
	sync_binlog=1   #binlog日誌刷盤策略,雙一的第二個1。每次事務提交立即刷寫binlog到磁盤
	binlog_format=row  #binlog的記錄格式爲row模式
	重啓完成

在這裏插入圖片描述

- 基礎參數查看

- 開關(1:表示開啓)

	- select @@log_bin;

- 日誌路徑及名字

	- select @@log_bin_basename;

- 服務ID號

	- select @@server_id;

- 二進制日誌格式

	- select @@binlog_format;

- 雙一標準之二

	- select @@sync_binlog;

在這裏插入圖片描述
在這裏插入圖片描述

3.二進制內置查看命令

  • 查看一目前有幾個日誌binlog
 show binary logs;
  • 查看當前在使用的binlog
 show master status;
  • 查看二進制事件
 show binlog events in 'mysql-bin.000001 ';

binlog文件內容詳細查看

- mysql  -uroot  -proot  -e  "show binlog events in 'mysql-bin.000001'"
- 普通查看  mysqlbinlog 

	- mysqlbinlog   /mysql/mysql/data/binlog/mysql-bin.000001 > a.sql   #把binlog到成sql文件

- 翻譯查看

	- mysqlbinlog  --base64-output=decode-rows  -vvv /data/binlog/mysql-bin.000003

- 基於時間查看

	- mysqlbinlog  --start-datetime='2019-05-06 17:00:00'   --stop-datetime='2019-05-06 17:01:00'    /data/binlog/mysql-bin.000004 

- 基於Position號進行日誌截取

	- mysqlbinlog  --start-position=219  --stop-position=1347  /data/binlog/mysql-bin.000003 >/tmp/bin.sql

- 數據恢復

-   set sql_log_bin=0;
	source /tmp/bin.sql

binlog維護操作

- 1.日誌滾動

- flush logs;
- mysqladmin -uroot -proot flush-logs
- 自動滾動,默認1G滾動一次,可以設置參數
- select @@max_binlog_size;
- mysqldump -F
- 重啓數據自動滾動

- 2.日誌的刪除

- 注意:不要使用rm命令刪除日誌
- 自動刪除(默認:0 永不刪除,單位是天)

- select @@expire_logs_days; 

- 問題:到底設置多少天合適?    一個全備週期(7+1)天,一般生產一遍建議2個全備週期+1

- show variables like '%expire%';


expire_logs_days  0   
自動清理時間,是要按照全備週期+1
set global expire_logs_days=8;
永久生效:
my.cnf
expire_logs_days=15;
企業建議,至少保留兩個全備週期+1的binlog
- 手工刪除

		- PURGE BINARY LOGS TO 'mysql-bin.010';
		- PURGE BINARY LOGS BEFORE '2008-04-02 22:46:26';

	- 全部清空

		-  reset master;

			- 比較危險,在主從執行此操作,主從必宕機

binlog日誌的GTID新特性

1.GTID 介紹

- 5.6 版本新加的特性,5.7中做了加強
5.6 中不開啓,沒有這個功能.
5.7 中的GTID,即使不開也會有自動生成
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'

- 對於一個已提交事務的編號,並且是一個全局唯一的編號。
它的官方定義如下:

GTID = source_id :transaction_id
7E11FA47-31CA-19E1-9E56-C43AA21293967:29

2.開啓參數

開啓的參數
    gtid-mode=on
	enforce-gtid-consistency=true
查看
- select @@gtid_mode;

在這裏插入圖片描述

3.具備GTID後,截取查看某些事務日誌

 --include-gtids
 --exclude-gtids
 --skip-gtids

4.數據截取

  • mysqlbinlog --skip-gtids --include-gtids='3ca79ab5-3e4d-11e9-a709-000c293b577e:1-9' mysql-bin.000002 mysql-bin.000003 > /tmp/gtid.sql

5.數據恢復

set sql_log_bin=0;
source /tmp/bin.sql

慢日誌(slow-log)

1 作用:記錄運行較慢的語句,優化過程中常用的工具日誌.

2.配置方法(默認沒開啓)

select @@slow_query_log;      #0表示關閉

select @@slow_query_log_file;     #文件存放文字

** 開關:**

slow_query_log=1 

文件位置及名字

slow_query_log_file=/data/mysql/slow.log

設定慢查詢時間:

long_query_time=0.1

沒走索引的語句也記錄:

log_queries_not_using_indexes
vim /etc/my.cnf
slow_query_log=1 
slow_query_log_file=/data/mysql/slow.log
long_query_time=0.1
log_queries_not_using_indexes
systemctl restart mysqld

3.mysqldumpslow 分析慢日誌

  • mysqldumpslow -s c -t 10 /data/mysql/slow.log
  • 第三方工具(自己擴展)

https://www.percona.com/downloads/percona-toolkit/LATEST/
yum install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-Digest-MD5
- toolkit工具包中的命令:
./pt-query-diagest  /data/mysql/slow.log
Anemometer基於pt-query-digest將MySQL慢查詢可視化

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章