管理MySQL查询日志(通用查询日志和慢查询日志)对于监控数据库活动和性能调优非常有用。下面详细介绍如何查看和清理查询日志,并结合具体的代码示例进行说明。
1. 查看查询日志
MySQL提供两种主要的查询日志:通用查询日志和慢查询日志。
1.1 确定查询日志文件位置
首先,你需要确定通用查询日志和慢查询日志的文件位置。可以通过查询MySQL系统变量来找到这些日志文件路径:
SHOW VARIABLES LIKE 'general_log_file';
SHOW VARIABLES LIKE 'slow_query_log_file';
这将返回查询日志文件的路径,例如:
+------------------+----------------------------+
| Variable_name | Value |
+------------------+----------------------------+
| general_log_file | /var/log/mysql/mysql.log |
+------------------+----------------------------+
+---------------------+----------------------------+
| Variable_name | Value |
+---------------------+----------------------------+
| slow_query_log_file | /var/log/mysql/mysql-slow.log |
+---------------------+----------------------------+
1.2 使用命令行工具查看查询日志
可以使用命令行工具如cat
、less
、more
和tail
查看查询日志文件内容。
- 使用
cat
查看完整的查询日志文件:
cat /var/log/mysql/mysql.log
- 使用
less
或more
分页查看查询日志文件:
less /var/log/mysql/mysql.log
more /var/log/mysql/mysql.log
- 使用
tail
查看查询日志文件的最后几行:
tail -n 100 /var/log/mysql/mysql.log
- 使用
tail -f
实时跟踪查询日志文件的输出:
tail -f /var/log/mysql/mysql.log
2. 清理查询日志
随着时间的推移,查询日志文件可能会变得非常大。为了防止日志文件占用过多磁盘空间,需要定期清理查询日志。
2.1 使用logrotate
进行日志轮换
logrotate
是Linux中的一个日志管理工具,可以自动进行日志文件的轮换、压缩和删除。
创建或编辑/etc/logrotate.d/mysql
文件,添加以下内容来配置查询日志的轮换:
/var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log {
daily
rotate 7
missingok
compress
delaycompress
notifempty
create 640 mysql adm
sharedscripts
postrotate
test -x /usr/bin/mysqladmin || exit 0
if [ -f /var/run/mysqld/mysqld.pid ]; then
/usr/bin/mysqladmin flush-logs
fi
endscript
}
解释:
daily
:每天轮换日志文件。rotate 7
:保留最近7个日志文件。missingok
:如果日志文件不存在,不报错。compress
:轮换后压缩旧日志文件。delaycompress
:推迟压缩到下一次轮换。notifempty
:如果日志文件为空,不进行轮换。create 640 mysql adm
:以指定权限创建新的日志文件。sharedscripts
:共享脚本,只在所有日志文件处理完后执行一次。postrotate
:在日志轮换后执行的脚本。
2.2 手动清理查询日志
如果不使用logrotate
,也可以手动清理查询日志。
- 确认当前查询日志文件位置,并暂时停用查询日志:
SET GLOBAL general_log = 'OFF';
SET GLOBAL slow_query_log = 'OFF';
- 重命名当前查询日志文件:
mv /var/log/mysql/mysql.log /var/log/mysql/mysql.log.1
mv /var/log/mysql/mysql-slow.log /var/log/mysql/mysql-slow.log.1
- 创建新的查询日志文件,并设置正确的权限:
touch /var/log/mysql/mysql.log
chown mysql:mysql /var/log/mysql/mysql.log
chmod 640 /var/log/mysql/mysql.log
touch /var/log/mysql/mysql-slow.log
chown mysql:mysql /var/log/mysql/mysql-slow.log
chmod 640 /var/log/mysql/mysql-slow.log
- 重新启用查询日志:
SET GLOBAL general_log = 'ON';
SET GLOBAL slow_query_log = 'ON';
3. 完整示例脚本
以下是一个示例脚本,展示了如何查看和清理MySQL查询日志:
查看查询日志
# 查看通用查询日志
cat /var/log/mysql/mysql.log
# 分页查看通用查询日志
less /var/log/mysql/mysql.log
# 实时跟踪通用查询日志
tail -f /var/log/mysql/mysql.log
# 查看慢查询日志
cat /var/log/mysql/mysql-slow.log
# 分页查看慢查询日志
less /var/log/mysql/mysql-slow.log
# 实时跟踪慢查询日志
tail -f /var/log/mysql/mysql-slow.log
清理查询日志
使用logrotate
创建或编辑/etc/logrotate.d/mysql
文件,添加以下内容:
/var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log {
daily
rotate 7
missingok
compress
delaycompress
notifempty
create 640 mysql adm
sharedscripts
postrotate
test -x /usr/bin/mysqladmin || exit 0
if [ -f /var/run/mysqld/mysqld.pid ]; then
/usr/bin/mysqladmin flush-logs
fi
endscript
}
手动清理
# 确认当前查询日志文件位置,并暂时停用查询日志
mysql -u root -p -e "SET GLOBAL general_log = 'OFF';"
mysql -u root -p -e "SET GLOBAL slow_query_log = 'OFF';"
# 重命名当前查询日志文件
mv /var/log/mysql/mysql.log /var/log/mysql/mysql.log.1
mv /var/log/mysql/mysql-slow.log /var/log/mysql/mysql-slow.log.1
# 创建新的查询日志文件
touch /var/log/mysql/mysql.log
chown mysql:mysql /var/log/mysql/mysql.log
chmod 640 /var/log/mysql/mysql.log
touch /var/log/mysql/mysql-slow.log
chown mysql:mysql /var/log/mysql/mysql-slow.log
chmod 640 /var/log/mysql/mysql-slow.log
# 重新启用查询日志
mysql -u root -p -e "SET GLOBAL general_log = 'ON';"
mysql -u root -p -e "SET GLOBAL slow_query_log = 'ON';"
小结
通过查看和清理MySQL查询日志,可以有效地监控和管理数据库的运行状况。使用logrotate
自动化日志轮换能够简化管理过程,防止日志文件占用过多磁盘空间。同时,结合手动清理方法,可以在需要时即时清理日志文件,确保数据库系统的稳定运行。