温馨提示×

ubuntu中mysql日志查看技巧

小樊
43
2025-09-27 05:35:24
栏目: 云计算

Ubuntu中MySQL日志查看与管理技巧

一、常见日志类型及查看方法

1. 错误日志(Error Log)

作用:记录MySQL服务启动、运行及停止过程中的错误信息,是排查数据库故障的核心日志。
默认路径:Ubuntu下通常位于/var/log/mysql/error.log(部分安装方式可能为/var/log/mysqld.log)。
查看命令

  • 实时跟踪最新错误:sudo tail -f /var/log/mysql/error.log
  • 使用journalctl查看系统日志中的MySQL错误(需systemd支持):sudo journalctl -u mysql.service -f
    注意:若路径不确定,可通过MySQL命令动态获取:SHOW VARIABLES LIKE 'log_error';

2. 慢查询日志(Slow Query Log)

作用:记录执行时间超过阈值的SQL语句,是数据库性能优化的关键依据。
启用步骤

  • 编辑配置文件(/etc/mysql/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf),在[mysqld]部分添加:
    slow_query_log = 1
    slow_query_log_file = /var/log/mysql/slow-query.log
    long_query_time = 2  # 设置慢查询阈值为2秒(可根据需求调整)
    log_queries_not_using_indexes = 1  # 记录未使用索引的查询
    
  • 重启MySQL服务使配置生效:sudo systemctl restart mysql
    查看命令
  • 实时查看慢查询日志:sudo tail -f /var/log/mysql/slow-query.log
  • 使用mysqldumpslow工具分析(按执行时间排序前10条):sudo mysqldumpslow -s t -t 10 /var/log/mysql/slow-query.log
  • 使用pt-query-digest工具生成详细报告(需安装Percona Toolkit):sudo pt-query-digest /var/log/mysql/slow-query.log

3. 通用查询日志(General Query Log)

作用:记录所有客户端执行的SQL语句(包括连接、断开、查询等),用于审计或追踪操作历史。
启用步骤

  • 编辑配置文件,在[mysqld]部分添加:
    general_log = 1
    general_log_file = /var/log/mysql/general.log
    log_output = FILE  # 设置日志输出为文件(可选:TABLE、NONE)
    
  • 重启MySQL服务:sudo systemctl restart mysql
    查看命令
  • 实时查看通用查询日志:sudo tail -f /var/log/mysql/general.log
  • 动态开启(无需重启):
    SET GLOBAL general_log = 'ON';
    SET GLOBAL log_output = 'FILE';
    SET GLOBAL general_log_file = '/var/log/mysql/general.log';
    

4. 二进制日志(Binary Log)

作用:记录所有修改数据的SQL语句(如INSERT、UPDATE、DELETE),用于数据恢复、主从复制。
启用步骤

  • 编辑配置文件,在[mysqld]部分添加:
    log_bin = mysql-bin  # 启用二进制日志(默认路径为/var/lib/mysql/)
    binlog_format = ROW  # 推荐使用ROW格式(更精确)
    expire_logs_days = 7  # 自动清理7天前的日志(可选)
    
  • 重启MySQL服务:sudo systemctl restart mysql
    查看命令
  • 查看当前二进制日志文件列表:SHOW BINARY LOGS;
  • 使用mysqlbinlog工具查看具体日志内容:sudo mysqlbinlog /var/lib/mysql/mysql-bin.000001
  • 导出日志到SQL文件(用于恢复):sudo mysqlbinlog /var/lib/mysql/mysql-bin.000001 > recovery.sql

二、日志管理技巧

1. 日志轮转(Logrotate)

作用:自动压缩、删除旧日志,避免日志文件占用过多磁盘空间。
默认配置:Ubuntu下MySQL的日志轮转配置通常位于/etc/logrotate.d/mysql,内容示例:

/var/log/mysql/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 640 mysql adm
    sharedscripts
    postrotate
        systemctl restart mysql > /dev/null
    endscript
}

参数说明

  • daily:每日轮转;
  • rotate 7:保留7个旧日志文件;
  • compress:压缩旧日志;
  • postrotate:轮转后重启MySQL以重新打开日志文件。
    手动触发轮转sudo logrotate -vf /etc/logrotate.d/mysql-v显示详细信息,-f强制轮转)

2. 日志分析工具

  • grep:搜索特定关键词(如错误信息):grep "ERROR" /var/log/mysql/error.log
  • awk:统计错误数量:awk '{print $1}' /var/log/mysql/error.log | sort | uniq -c | sort -nr
  • pt-query-digest:高级分析工具(支持慢查询、二进制日志),生成包含查询频率、执行时间、锁等待等信息的详细报告

三、注意事项

  • 权限问题:查看日志文件需超级用户权限(使用sudo),部分日志(如通用查询日志)可能需要调整log_output参数为FILE才能保存到文件。
  • 性能影响:启用通用查询日志或慢查询日志会增加I/O开销,生产环境建议仅在需要时开启,分析完成后关闭。
  • 日志清理:定期清理旧日志(如通过logrotatesudo journalctl --vacuum-size=500M清理journal日志),避免磁盘空间耗尽。

0