温馨提示×

MySQL在Ubuntu上如何进行日志管理

小樊
35
2025-11-30 12:52:53
栏目: 云计算

MySQL 在 Ubuntu 上的日志管理

一 日志类型与默认路径

  • 常见日志与作用如下(Ubuntu 上常见路径与默认状态):
    • 错误日志 Error log:记录启动、运行、停止中的错误与告警;默认路径:/var/log/mysql/error.log;默认:启用。
    • 通用查询日志 General query log:记录所有客户端 SQL;默认路径:未启用,常见自定义为 /var/log/mysql/mysql.log;默认:关闭。
    • 慢查询日志 Slow query log:记录超过阈值的 SQL;默认路径:未启用,常见自定义为 /var/log/mysql/mysql-slow.log;默认:关闭。
    • 二进制日志 Binary log:记录数据更改,用于复制与时间点恢复;默认路径:数据目录(常见 /var/lib/mysql/)下以 mysql-bin.000001 等命名;默认:视安装与配置而定。
  • 提示:通用查询日志与慢查询日志默认不开启,需手动配置;二进制日志是否启用取决于安装选项与配置。

二 查看日志位置与状态

  • 命令行实时查看:
    • 错误日志:sudo tail -f /var/log/mysql/error.log
    • 通用查询日志:sudo tail -f /var/log/mysql/mysql.log(需已开启)
    • 慢查询日志:sudo tail -f /var/log/mysql/mysql-slow.log(需已开启)
  • SQL 查询变量确认路径与开关:
    • 错误日志:SHOW VARIABLES LIKE ‘log_error’;
    • 通用查询日志:SHOW VARIABLES LIKE ‘general_log’; SHOW VARIABLES LIKE ‘general_log_file’;
    • 慢查询日志:SHOW VARIABLES LIKE ‘slow_query_log’; SHOW VARIABLES LIKE ‘slow_query_log_file’; SHOW VARIABLES LIKE ‘long_query_time’;
    • 二进制日志:SHOW VARIABLES LIKE ‘log_bin’; SHOW VARIABLES LIKE ‘binlog_format’;
  • 说明:文件路径与是否开启以实例实际配置为准,修改配置后需重启或执行刷新日志命令生效。

三 启用与配置日志

  • 编辑配置文件:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf,在 [mysqld] 段落按需添加或修改:
    • 通用查询日志(不建议长期开启于生产):
      • general_log = 1
      • general_log_file = /var/log/mysql/mysql.log
    • 慢查询日志(建议开启并合理设置阈值):
      • slow_query_log = 1
      • slow_query_log_file = /var/log/mysql/mysql-slow.log
      • long_query_time = 2(单位:秒)
    • 二进制日志(用于复制与 PITR,开启前评估磁盘与保留策略):
      • log_bin = /var/log/mysql/mysql-bin(或保留默认数据目录下的 mysql-bin 前缀)
      • binlog_format = ROW(或 STATEMENT/MIXED,按场景选择)
  • 使配置生效:
    • 重启:sudo systemctl restart mysql
    • 或仅刷新日志:mysql -e “FLUSH LOGS;”
  • 安全与权限建议:将日志目录与文件属主设为 mysql:adm,权限如 640,例如:
    • sudo chown -R mysql:adm /var/log/mysql
    • sudo chmod 640 /var/log/mysql/*.log
  • 注意:开启通用查询日志会带来显著的 I/O 与磁盘占用,通常仅在排障或审计短期启用。

四 日志轮转与归档

  • 使用 logrotate 管理 MySQL 文本日志(error.log、general.log、slow.log 等):
    • 新建配置:sudo nano /etc/logrotate.d/mysql
    • 示例策略(按日轮转、保留 7 天、压缩、切割后通知 MySQL 刷新日志):
      /var/log/mysql/*.log {
          daily
          rotate 7
          compress
          delaycompress
          missingok
          notifempty
          create 640 mysql adm
          postrotate
              /usr/bin/mysql -e "FLUSH LOGS;" >/dev/null 2>&1 || true
          endscript
      }
      
    • 测试与生效:
      • 手动测试:sudo logrotate -f /etc/logrotate.conf
      • 观察:ls -lh /var/log/mysql/ 检查是否生成 .gz 与轮转索引
  • 二进制日志归档与分析:
    • 使用 mysqlbinlog 导出为可读 SQL 便于归档与审计:
      • sudo mysqlbinlog /var/lib/mysql/mysql-bin.000001 > /path/to/archive/binlog-000001.sql
    • 按需在备份或维护窗口执行 PURGE BINARY LOGS 清理已备份的 binlog,避免磁盘占满。

五 生产环境实践与建议

  • 仅在生产按需开启通用查询日志;慢查询日志建议常开,并结合 pt-query-digest 等工具分析。
  • 为所有日志目录与文件设置最小权限(如 mysql:adm,640),并纳入备份策略。
  • 为二进制日志设定合理保留周期(配合备份与复制拓扑),避免无限制增长。
  • 结合 logrotate 设置合适的保留天数与压缩策略,切割后通过 FLUSH LOGS 确保文件句柄与写入连续性。
  • 监控日志目录容量与增长趋势,设置告警,防止因日志占满磁盘导致实例异常。

0