首先連接上mysql:
$ mysql -h 192.168.0.x -P3306 -uusername -p123456
進入Mysql之后,查詢general_log:
mysql> SHOW VARIABLES LIKE "general_log%"; +------------------+----------------------------+ | Variable_name | Value | +------------------+----------------------------+ | general_log | OFF | | general_log_file | /var/run/mysqld/mysqld.log | +------------------+----------------------------+ 2 rows in set (0.00 sec)
如果這個時候general_log是關閉的,可用命令設置為ON:
mysql> SET GLOBAL general_log = 'ON'; Query OK, 0 rows affected (0.00 sec)
同理也可以設置文件路徑:
mysql> SET GLOBAL general_log_file = '/var/run/mysqld/mysqld.log'; Query OK, 0 rows affected (0.06 sec)
打開/var/run/mysqld/mysqld.log文件看到的是如下展示:
Time Id Command Argument 190529 22:26:07 4 Query REPLACE INTO * 1 Query REPLACE INTO * 4 Query REPLACE INTO * 1 Query REPLACE INTO *
從該文件可以看出來,秒數發生改變的時候,才會打印帶日期的日志。那么可用通過該文件兩個帶日期的行之間的行數差距,即可算出其QPS:
- 篩選帶有日期的行,帶上行號轉存到文件
$ grep "^1905" -n mysqld.log > Line.txt
- 編寫一個Python腳本,計算QPS
1 #coding=utf-8 2 import os,sys 3 4 if __name__ == '__main__': 5 file = open('Line.txt', 'r') 6 if file == None: 7 print "open file failed" 8 sys.exit(1) 9 outFile = open("QPS.csv", 'w') 10 outFile.write("Time,QPS"); 11 lastLine = 0 12 for line in file: 13 params = line.split(' ') 14 if len(params) < 2: 15 continue 16 17 time = params[1] 18 lineAndDate = params[0] 19 subParams = lineAndDate.split(':') 20 if len(subParams) < 2: 21 continue 22 line = int(subParams[0]) 23 date = subParams[1] 24 fullDate = "%s %s" %(date, time) 25 QPS = line - lastLine 26 lastLine = line 27 28 outFile.write("\r\n%s,%d"%(fullDate,QPS)) 29 outFile.close() 30 file.close()
然后執行腳本,計算結果導出到QPS.csv: