MySQL(87)如何查看和清理查询日志?

发布于:2025-06-25 ⋅ 阅读:(15) ⋅ 点赞:(0)

管理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 使用命令行工具查看查询日志

可以使用命令行工具如catlessmoretail查看查询日志文件内容。

  • 使用cat查看完整的查询日志文件:
cat /var/log/mysql/mysql.log
  • 使用lessmore分页查看查询日志文件:
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,也可以手动清理查询日志。

  1. 确认当前查询日志文件位置,并暂时停用查询日志:
SET GLOBAL general_log = 'OFF';
SET GLOBAL slow_query_log = 'OFF';
  1. 重命名当前查询日志文件:
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
  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
  1. 重新启用查询日志:
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自动化日志轮换能够简化管理过程,防止日志文件占用过多磁盘空间。同时,结合手动清理方法,可以在需要时即时清理日志文件,确保数据库系统的稳定运行。


网站公告

今日签到

点亮在社区的每一天
去签到