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
