MySQL的执行语句日志(也称为慢查询日志)记录了执行时间超过指定阈值的SQL语句。通过查看这些日志,可以分析和优化数据库性能。
首先,确保MySQL服务器已经开启了慢查询日志。可以通过以下命令查看和配置慢查询日志:
-- 查看慢查询日志是否开启
SHOW VARIABLES LIKE 'slow_query_log';
-- 开启慢查询日志
SET GLOBAL slow_query_log = 'ON';
-- 设置慢查询日志文件路径
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow-query.log';
-- 设置慢查询阈值(单位:秒)
SET GLOBAL long_query_time = 2;
开启慢查询日志后,可以通过查看日志文件来获取执行时间较长的SQL语句:
tail -f /var/log/mysql/slow-query.log
通用查询日志记录了所有执行的SQL语句,可以通过以下命令查看和配置通用查询日志:
-- 查看通用查询日志是否开启
SHOW VARIABLES LIKE 'general_log';
-- 开启通用查询日志
SET GLOBAL general_log = 'ON';
-- 设置通用查询日志文件路径
SET GLOBAL general_log_file = '/var/log/mysql/general-query.log';
开启通用查询日志后,可以通过查看日志文件来获取所有执行的SQL语句:
tail -f /var/log/mysql/general-query.log
如果指定的日志文件路径不存在,MySQL将无法写入日志文件。可以通过以下命令创建日志文件目录并设置正确的路径:
mkdir -p /var/log/mysql
touch /var/log/mysql/slow-query.log
touch /var/log/mysql/general-query.log
chown -R mysql:mysql /var/log/mysql
如果MySQL用户没有写入日志文件的权限,会导致日志无法写入。可以通过以下命令更改日志文件的所有者和权限:
chown mysql:mysql /var/log/mysql/slow-query.log
chown mysql:mysql /var/log/mysql/general-query.log
chmod 644 /var/log/mysql/slow-query.log
chmod 644 /var/log/mysql/general-query.log
如果日志文件过大,会影响磁盘空间和性能。可以通过定期清理日志文件来解决这个问题。例如,可以编写一个脚本定期清理超过一定天数的日志文件:
#!/bin/bash
LOG_DIR="/var/log/mysql"
DAYS=7
find $LOG_DIR -type f -name "*.log" -mtime +$DAYS -exec rm -f {} \;
将上述脚本添加到定时任务中,定期执行清理操作:
crontab -e
添加以下行:
0 0 * * * /path/to/your/cleanup_script.sh
通过以上步骤,可以有效地查看和管理MySQL的执行语句日志,从而优化数据库性能和进行故障排查。