【问题标题】:How to log mysql queries of specific database - Linux如何记录特定数据库的 mysql 查询 - Linux
【发布时间】:2015-11-11 16:35:20
【问题描述】:

我一直在看这个帖子 How can I log "show processlist" when there are more than n queries?

运行这个命令可以正常工作

mysql -uroot -e "show full processlist" | tee plist-$date.log | wc -l

覆盖文件的问题

我也想在 cronjob 中运行它。

我已将此命令添加到/var/spool/cron/root

* * * * * [ $(mysql -uroot -e "show full processlist" | tee plist-`date +%F-%H-%M`.log | wc -l) -lt 51 ] && rm plist-`date +%F-%H-%M`.log

但它不起作用。或者它可能将日志文件保存在根文件夹之外的某个位置。

所以我的问题是:如何临时记录来自特定数据库和特定表的所有查询并将整个查询保存在 1 个文件中?

注意:我正在寻找的不是慢/长查询日志,而是读取正在为数据库运行的查询的临时解决方案

【问题讨论】:

  • 如果您希望tee 附加到文件而不是替换它,请使用-a 选项。

标签: mysql linux ssh server hosting


【解决方案1】:

解决办法是:

watch -n 1  "mysqladmin -u root -pXXXXX processlist | grep tablename"  | tee -a /root/plist.log

【讨论】:

  • 能否请您 edit 解释为什么这段代码回答了这个问题?纯代码答案是 discouraged,因为它们不教授解决方案。
【解决方案2】:

% 字符在crontab 命令中具有特殊含义,您需要对其进行转义。所以你需要这样做:

* * * * * [ $(mysql -uroot -e "show full processlist" | tee plist-`date +\%F-\%H-\%M`.log | wc -l) -lt 51 ] && rm plist-`date +\%F-\%H-\%M`.log

如果你想使用你原来的命令,但不是每次都覆盖文件,你可以使用tee-a选项追加:

mysql -uroot -e "show full processlist" | tee -a plist-$date.log | wc -l

要每秒运行命令一分钟,请编写一个 shell 脚本:

#!/bin/bash
for i in {1..60}; do
    [ $(mysql -uroot -e "show full processlist" | tee -a plist.log | wc -l) -lt 51 ] && rm plist.log
    sleep 1
done

然后您可以每分钟从 cron 运行此脚本:

* * * * * /path/to/script

虽然如果你想像这样连续运行一些东西,cron 可能不是最好的方法。您可以在系统启动时使用/etc/inittab 运行脚本,如果由于某种原因死机,它将自动重新启动。然后你就用一个无限循环:

#!/bin/bash
while :; do
    [ $(mysql -uroot -e "show full processlist" | tee -a plist.log | wc -l) -lt 51 ] && rm plist.log
    sleep 1
done        

【讨论】:

  • 这个命令对我来说很好 * * * * * [ $(mysql -uroot -e "show full processlist" | tee -a plist.log | wc -l) -lt 51 ] && rm plist.log 但我已将其添加到 /var/spool/cron/root 但我在哪里可以找到日志文件?
  • 它应该在root的主目录中,可能是/root
  • 使用cd ~root 进入根目录。
  • 是的,你是对的,我忘了这个 * * * * 每分钟运行一次,我希望它每秒运行一次我不确定是否可以 */60 * * * * ?跨度>
  • 不,cron 不能每分钟运行一次以上。您可以运行一个使用每秒运行一次的循环的 shell 脚本。
猜你喜欢
  • 2012-06-05
  • 2012-03-06
  • 2011-09-06
  • 1970-01-01
  • 2016-03-07
  • 2019-04-14
  • 2014-05-08
  • 1970-01-01
  • 2014-03-14
相关资源
最近更新 更多