You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL Server日志被大量成功登录记录占满,如何分离该类日志?

成功登录日志分离最佳处理方案

下面根据不同使用场景提供可落地的实现方案:

方案1:通过日志服务内置规则实时分流(首推,无性能损耗)

适配使用rsyslog、syslog-ng等系统标准日志服务,或者数据库自带日志模块的场景:

  • 系统日志服务配置(以rsyslog为例):
    1. 新建规则配置文件/etc/rsyslog.d/10-login-filter.conf,按照你日志的实际特征填写匹配规则,示例如下:
    # 匹配SQL服务用户的成功登录日志,写入独立文件
    :msg, contains, "Login Success: sql_svc_user" /var/log/sql_service_login.log
    # 匹配远端连接服务用户的成功登录日志,写入独立文件
    :msg, contains, "Login Success: remote_conn_user" /var/log/remote_conn_login.log
    # 若不需要上述日志继续写入原错误日志,添加下面的终止规则
    & stop
    
    1. 重启rsyslog服务生效:systemctl restart rsyslog
  • SQL服务日志配置:
    调整数据库日志输出级别,将成功登录事件从错误日志中剥离,归类到独立的通用日志/连接日志文件中。例如MySQL可配置general_log单独存储所有连接请求,同时将错误日志级别调整为只记录警告、错误级别的事件。

方案2:日志轮转时后置拆分(适合不想修改现有日志输出规则的场景)

通过logrotate的钩子脚本在日志轮转时自动拆分内容:

  1. 编辑对应日志的logrotate配置文件,添加预处理逻辑:
/var/log/error.log {
    # 原有轮转配置保留,新增下面的预处理规则
    prerotate
        # 提取成功登录记录到独立归档文件
        grep -E "Login Success.*(sql_svc_user|remote_conn_user)" $1 >> /var/log/archive/login_history.log
        # 从原错误日志中删除对应记录
        sed -i "/Login Success.*(sql_svc_user|remote_conn_user)/d" $1
    endscript
}

方案3:排查时临时过滤(零配置,适合临时排查场景)

不需要修改任何服务配置,查看日志时直接通过命令过滤不需要的内容:

# 查看错误日志时自动跳过所有成功登录记录
grep -v -E "Login Success.*(sql_svc_user|remote_conn_user)" /var/log/error.log
# 实时滚动查看最新日志时过滤
tail -f /var/log/error.log | grep -v -E "Login Success.*(sql_svc_user|remote_conn_user)"

内容的提问来源于stack exchange,提问作者edsobo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 05:00:03