aws mysql 開啟慢查詢日志, 並利用mysqlsla 分析


1.開啟慢查詢日志服務

  (a) sql 查詢配置

# 查看慢日志是否開啟,開啟為ON
show variables like 'slow_query%';
show variables like 'long_query_time';

# 設置全局,查詢時間超過1s的日志記錄下來
set global slow_query_log='ON';
set global long_query_time=1;

# 如果使用慢日志輸出為table, mysql.slow_log表中sql_text 為blob格式,查看時需要轉化
SELECT CONVERT(sql_text using utf8) sql_text from mysql.slow_log;

 

  (b) aws 控制台配置

  RDS服務>參數組 更改的參數組更改如下參數:

- slow_query_log:要創建慢速查詢日志,請設置為 1。默認值為 0- general_log:要創建一般日志,請設置為 1。默認值為 0- long_query_time:只記錄查詢時間超過制定時間的sql,單位毫秒.
- log_queries_not_using_indexes:要將所有不使用索引的查詢記錄到慢速查詢日志,請設置為 1。默認值為 0。即使查詢的執行時間小於 long_query_time 參數值,只要它們不使用索引,就會被系統記錄。
- log_output:您可為 log_output 參數指定下列選項之一。
    TABLE (默認) – 將慢速查詢寫入 mysql.slow_log 表。
    FILE  (推薦) – 查詢日志寫入文件系統。日志文件每小時輪換一次。並刪除 24 小時之前的日志文件。
    NONE– 禁用日志記錄。

 

2. 利用aws-cli工具,將aws-mysql慢日志導出到本地服務器查看

 

1. aws-cli 指令
aws k    # 獲取aws的所有的命令功能, 例如:ec2 對應的是ec2的服務,s3對應s3服務等
aws rds k  # 查看rds的所有功能
aws rds describe-db-log-files help # 查看日志文件命令如何使用

2. 指令攜帶參數
describe-db-log-files #查看數據庫日志
--region ap-southeast-1 #mysql所在時區
--db-instance-identifier duofen #要導出日志的數據庫名稱, 我這里是duofen
--no-paginate #不分頁
--filename-contains slowquery # 日志名稱過濾, 這里只查詢名字里帶slowquery的慢日志
--output text # 輸出格式為文本
--log-file-name slowquery/mysql-slowquery.log # 具體某一個日志名稱

3. 查看mysql系統日志
aws rds describe-db-log-files --no-paginate --db-instance-identifier duofen --filename-contains slowquery --output text

4.將日志文件導出到指定文件
aws rds --region ap-southeast-1 download-db-log-file-portion --db-instance-identifier duofen --no-paginate --log-file-name slowquery/mysql-slowquery.log --output text > slowquery.$(date +%Y%m%d%H).txt;

 

  腳本批量拉取慢查詢日志(aws rds 只保存24小時以內日志,共有24個日志) 

#!/bin/bash
# 獲取慢日志列表
filename=`aws rds describe-db-log-files --db-instance-identifier duofen | grep LogFileName | awk -F"/" '{print $2}' | tr -d '",' | grep 'slowquery'`

# 創建存放路徑
fileDir=/data/mysqlLog/$(date +%Y%m%d)
if [ ! -d fileDir  ];then
  mkdir -p $    fileDir
fi

# 循環下載到本地/data/mysqlLog文件夾下
for f in $filename
do
    echo "$f"
    aws rds download-db-log-file-portion --db-instance-identifier duofen --log-file-name slowquery/$f --starting-token 0 --output text > $fileDir/$f 
done
    
# 將日志合並到slowqueryresult.txt文件
cat $fileDir/mysql-slowquery.* > /data/mysqlLog/slowqueryresult.$(date +%Y%m%d).txt

 

3.mysql慢日志分析工具mysqlsla 安裝

# 安裝依賴包
yum install  -y wget  perl  perl-DBI  perl-DBD-MySQL  mysql  perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker 

# 源碼安裝mysqlsla

cd /usr/local/software
wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz
tar -xvf mysqlsla-2.03.tar.gz
cd  mysqlsla-2.03

# 配置並編譯 perl Makefile.PL make make install # 將
/usr/local/bin 放到系統變量PATH vim /etc/profile export PATH=/usr/local/bin:$PATH
/etc/profile

# 查看是否安裝成功,不提示(-bash: mysqlsla: command not found),就是成功的
mysqlsla -version

 

4.mysqlsla 指令分析日志

1. 查詢參數說明:

-lt    # log的類型為slow, 主要有slow,general,binary,msl,udl

-sort  # 結果進行排序,默認是按照t_sum來進行排序的

-top   # 顯示sql的數量,默認是10,表示去按照規則排序的前多少條

-sf    # 過濾sql語句的類型,比如select,update,drop 例如"+SELECT,INSERT",

--databases # 要處理哪個庫的日志


2. 統計參數說明

1.queries total: # 總查詢次數

2.unique:     # 去重后的sql數量

3.sorted by:   # 輸出報表的內容排序 最重大的慢sql統計信息, 包括 平均執行時間, 等待鎖時間, 結果行的總數, 掃描的行總數.

4.Count:      # sql的執行次數及占總的slow log數量的百分比.

5.Time:       # 執行時間, 包括總時間, 平均時間, 最小, 最大時間, 時間占到總慢sql時間的百分比.

6.95% of Time:  # 去除最快和最慢的sql, 覆蓋率占95%的sql的執行時間.

7.Lock Time:    # 等待鎖的時間.

8.95% of Lock:   # 95%的慢sql等待鎖時間.

9.Rows sent:     # 結果行統計數量, 包括平均, 最小, 最大數量.

10.Rows examined:  # 掃描的行數量.

11.Database:     # 屬於哪個數據庫.

12.Users:       # 哪個用戶,IP, 占到所有用戶執行的sql百分比.

13.Query abstract: # 抽象后的sql語句.

14.Query sample:   # sql語句

 

3. 使用范例

# 查詢記錄最多的10條,可以指定具體的數據庫 
mysqlsla -lt slow -sort t_sum -sf "+select,update,INSERT" -db duofen -top 10 /data/mysqlLog/slowqueryresult.20190508.txt

# 統計慢查詢執行時間最長的20條sql,並寫到longsql.log中
mysqlsla -lt slow -sf "+select" -top 20 /data/mysqlLog/slowqueryresult.20190508.txt > /data/mysqlLog/longsql.log

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM