当前位置:Gxlcms > mysql > mysql_history_monitor

mysql_history_monitor

时间:2021-07-01 10:21:17 帮助过:55人阅读

上篇加了bash_history的监控,这篇说mysql_history的监控。不像bash4,mysql自始至终没有提供过syslog的代码,只能自己通过守护进程去实时获取~/.mysql_history的记录了。一个小脚本如下: #!/usr/bin/perl -wuse POE qw(Wheel::FollowTail);use Log::Syslog

上篇加了bash_history的监控,这篇说mysql_history的监控。不像bash4,mysql自始至终没有提供过syslog的代码,只能自己通过守护进程去实时获取~/.mysql_history的记录了。一个小脚本如下:

  1. #!/usr/bin/perl -w
  2. use POE qw(Wheel::FollowTail);
  3. use Log::Syslog::Fast qw(:all);
  4. defined(my $pid = fork) or die "Cant fork:$!";
  5. unless($pid){
  6. }else{
  7. exit 0;
  8. }
  9. POE::Session->create(
  10. inline_states => {
  11. _start => sub {
  12. $_[HEAP]{tailor} = POE::Wheel::FollowTail->new(
  13. Filename => "/root/.mysql_history",
  14. InputEvent => "got_log_line",
  15. ResetEvent => "got_log_rollover",
  16. );
  17. },
  18. got_log_line => sub {
  19. #通过Data::Dumper看到实际是$_[10],不过在POE::Session里定义了sub ARG0 () { 10 };这样写起来简单了
  20. to_rsyslog($_[ARG0]);
  21. },
  22. got_log_rollover => sub {
  23. to_rsyslog('roll');
  24. },
  25. }
  26. );
  27. POE::Kernel->run();
  28. exit;
  29. sub to_rsyslog {
  30. $message = join' ',@_;
  31. #rsyslog开的是UDP的514端口;而LOG_LOCAL0和LOG_INFO都是syslog定义的,乱写的话会自动归入kernel | alert
  32. my $logger = Log::Syslog::Fast->new(LOG_UDP, "10.0.0.123", 514, LOG_LOCAL0, LOG_INFO, "mysql_231", "mysql_monitor");
  33. $logger->send($message ,time);
  34. };

当然,mysql的history其实不止一个位置,需要判断~

人气教程排行