由于我为服务器上的所有查询启用了 mariadb 日志,因此使用 Netdata 每秒都会显示这些查询:
SHOW GLOBAL VARIABLES LIKE 'max_connections'
11 Query SHOW GLOBAL STATUS
11 Query commit
我不得不说它没有帮助我投资服务器上发生的事情,因为它污染了我的记录。
有没有办法避免每秒记录这种查询?
答案1
虽然可能更明智的做法是指出数据库的具体问题,而不是试图清理日志(我建议使用 grep 或 sed)。但这是一个过度设计的解决方案,它将一劳永逸地解决您的日志记录问题。
我们将把 mysql 日志重定向到 fifo 管道,该管道将由 syslog-ng 读取和过滤。
为此,转到存储 general-log-file 的文件夹,删除/重命名原始日志,并使用以下命令在其位置创建一个 fifo 管道:
mkfifo mysql-general.log
检查你的 my.cnf 是否指向该文件:
[mysqld]
general-log-file = /path/to/your/log/mysql-general.log
然后,配置您的/etc/syslog-ng/syslog-ng.conf
(centos 7 实际上需要先安装它)读取 FIFO 管道并根据需要进行过滤,同时将结果写入最终文件。
这是一个适合您需要的示例配置:
source s_mysql_general_log { pipe("/path/to/your/log/mysql-general.log" program_override("mysql-general-log")); };
filter f_mysql_general_log { not match("^SHOW GLOBAL VARIABLES LIKE 'max_connections'") and not match("^11 Query SHOW GLOBAL STATUS") and not match("^11 Query commit"); };
destination d_mysql_general_log { file("/var/log/mysql-general.log"); }
log { source(s_mysql_general_log); filter(f_mysql_general_log); destination(d_mysql_general_log); flags(final); };
因此,您将获得/var/log/mysql-general.log
没有您不喜欢的查询的文件……稍后我将尝试发布此解决方案的 systemd 版本