有没有办法从/var/log/mysql/mysql-slow.log
文件中过滤 mysql 慢查询数据库。我有一个带有 5 个实时数据库的 mysql 服务器。我正在尝试优化此服务器。
另外我想知道优化 mysql 服务器的最佳实践是什么。
我的设置是:
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 5
log-queries-not-using-indexes
答案1
mysqldumpslow /var/log/mysql/mysql-slow.log
这将为您提供一个不同的慢速和非索引查询列表,按查询运行的次数排序,次数最多的查询排在最前面。对每个日志运行该操作,如果查询执行时间小于慢速时间 (5),则它是一个非索引查询。
希望这对某人有帮助。
答案2
我没有慢查询日志可以查看,所以我无法自己测试,但你可能想看看类似mysql 日志过滤器
这是一个 PHP 脚本,可以解析 MySQL 慢查询日志,并提供许多不同的选项。也许其中一个可以让您获得所需的信息,或者至少更接近所需的信息。值得一试!
答案3
我发现了一个很好的实用程序 mysqlsla,可以解析慢查询日志或按数据库过滤它们。 http://hackmysql.com/mysqlsla
我们还可以使用这个 bash 脚本来自定义慢查询并生成报告。该脚本使用实用程序 mysqlsla。
#!/bin/bash
# Script to process multiple mysql slow logs
# using mysqlsla http://hackmysql.com/mysqlsla
# Directory containing slow logs
sl_dir="/home/rhys/Desktop/slow_logs";
cd "$sl_dir";
#slow_logs=$(ls "$sl_dir");
# Folder for reports
if [ ! -d "$sl_dir"/reports ]; then
mkdir "$sl_dir"/reports;
fi
# process each slow log file
for file in "$sl_dir"/*
do
echo "Processing file: $file";
filename=$(basename "$file")
mysqlsla -lt slow "$file" > "reports/$filename.rpt";
echo "Finished processing file: $file";
done
答案4
此脚本提供的输出比 mysqldumpslow 更清晰: