温馨提示×

Ubuntu上MySQL日志如何管理

小樊
43
2025-09-12 13:54:23
栏目: 云计算

一、日志类型与默认路径

  • 错误日志:记录启动、运行错误,默认路径 /var/log/mysql/error.log
  • 通用查询日志:记录所有SQL查询(默认关闭),路径可自定义,如 /var/log/mysql/general.log
  • 慢查询日志:记录执行时间超过阈值(默认10秒)的查询,路径如 /var/log/mysql/slow.log
  • 二进制日志:记录数据变更操作,用于备份和主从复制,默认路径 /var/log/mysql/mysql-bin.xxxxxx

二、配置日志

  1. 修改配置文件
    编辑 /etc/mysql/my.cnf,在 [mysqld] 中添加/修改参数:

    # 错误日志
    log-error=/var/log/mysql/error.log
    
    # 通用查询日志(开启并指定路径)
    general_log=1
    general_log_file=/var/log/mysql/general.log
    
    # 慢查询日志(开启、设置阈值及路径)
    slow_query_log=1
    slow_query_log_file=/var/log/mysql/slow.log
    long_query_time=2
    
    # 二进制日志(开启、设置路径及大小)
    log-bin=mysql-bin
    max_binlog_size=100M
    expire_logs_days=7  # 自动清理7天前的日志
    

    保存后重启MySQL:sudo systemctl restart mysql

  2. 动态查看配置

    # 查看错误日志路径
    mysql -u root -p -e "SHOW VARIABLES LIKE 'log_error';"
    
    # 查看通用查询日志状态
    mysql -u root -p -e "SHOW VARIABLES LIKE 'general%';"
    

三、日志管理操作

  1. 查看日志

    • 实时查看sudo tail -f /var/log/mysql/error.log
    • 分页查看sudo less /var/log/mysql/slow.log
    • 搜索关键词sudo grep 'ERROR' /var/log/mysql/error.log
  2. 日志轮转

    • 使用Logrotate工具(推荐):
      编辑 /etc/logrotate.d/mysql,添加以下内容:
      /var/log/mysql/*.log {
          daily
          rotate 7
          missingok
          compress
          delaycompress
          sharedscripts
          postrotate
              /bin/kill -HUP $(cat /var/run/mysqld.pid)
          endscript
      }
      
      系统默认每天执行一次轮转,保留7天日志并压缩。
  3. 手动清理日志

    # 停止MySQL服务
    sudo systemctl stop mysql
    
    # 删除日志文件(谨慎操作,建议先备份)
    sudo rm /var/log/mysql/*.log
    
    # 重启MySQL
    sudo systemctl start mysql
    

    注:优先使用Logrotate自动清理,避免手动操作影响服务。

  4. 分析日志

    • 慢查询分析sudo pt-query-digest /var/log/mysql/slow.log(需安装Percona工具包)。
    • 二进制日志还原mysqlbinlog /var/log/mysql/mysql-bin.000001

四、注意事项

  • 性能影响:通用查询日志会记录所有操作,可能影响性能,建议仅在调试时开启。
  • 权限管理:确保日志文件权限为 mysql:mysql,避免未授权访问。
  • 磁盘监控:定期检查日志目录占用空间,避免因日志堆积导致磁盘不足。

参考来源:

0