Rya*_*yan 5 mysql bash shell cron logging
我们的mysql进程有时会积压并且进程开始排队.我想通过在慢速时间记录进程列表来调试何时以及为什么会发生这种情况.
show full processlist;如果50返回的行数多,我想通过cron作业运行并将输出保存到文本文件中.
你能为我指出正确的方向吗?
例如:
echo "show full processlist;" | mysql -uroot > processlist-`date +%F-%H-%M`.log
Run Code Online (Sandbox Code Playgroud)
我想只在结果包含文本50 rows in set(或大于50行)时才运行它.
Aar*_*own 14
pt-stalk专为此目的而设计.它每秒(或您指定的任何时间)对进程列表进行采样,然后达到阈值(Threads_running是默认值,在这种情况下是您想要的),收集一大堆数据,包括磁盘活动,tcpdumps,多个进程列表的样本,服务器状态变量,互斥/ innodb状态以及更多.
以下是如何启动它:
pt-stalk --daemonize --dest /var/lib/pt-stalk --collect-tcpdump --threshold 50 --cycles 1 --disk-pct-free 20 --retention-time 3 -- --defaults-file=/etc/percona-toolkit/pt-stalk_my.cnf
Run Code Online (Sandbox Code Playgroud)
上面的命令将采样Threads_running(--threshold;将其设置为n的值),每秒(默认值--interval)并且如果Threads_running对于1个连续样本(--cycles)大于50,则触发数据集合.--retention-time如果少于20%的磁盘空闲(--disk-pct-free),将保留3天()的样本并且不会开火.在每个集合中,将执行pcap格式tcpdump(--collect-tcpdump),可以使用传统的tcpdump工具或许多其他Percona Toolkit工具进行分析,包括pt-query-digest和pt-tcp-model.样本之间将有5分钟的休息时间(默认值--sleep),以防止自己的DoS.这个过程将被守护(--daemonize).之后的参数--将传递给所有mysql/mysqladmin命令,因此这是一个设置诸如--defaults-file存储登录凭据远离窥探的地方的好地方.
首先,确保MySQL的慢查询日志不是您所需要的。另外,MySQL的-e参数允许您在命令行上指定查询。
扭转逻辑,这将保存进程列表,并在进程列表不够长时将其删除:
date=$(date +...) # set the desired date format here
[ $(mysql -uroot -e "show full processlist" | tee plist-$date.log | wc -l) -lt 51 ] && rm plist-$date.log
Run Code Online (Sandbox Code Playgroud)