MySQL如何ROOT登录_MySQL root账户登录与权限管理教程

mysql如何启用日志审计

使用pt-query-digest工具分析MySQL慢查询日志报告

等一下,昨晚我半夜被数据库闹钟吵醒了。
查找了很久,发现是查询日志存储速度慢的结果。
别告诉我,这个 pt-query-digest 真是个好东西。

不久前,我们的电商系统慢如乌龟,后台查询日志积累了好几G。
我当时很着急。
最后运维老大调整了几个参数,将long_query_time设置为0.5 秒,然后运行pt-query-digest。
结果瞬间就发现了好几个N+1 的问题。
这是一个使用不带索引的 EXISTS 的查询,并扫描了表中 9 0% 的数据 - 如果早点发现,用户就会关闭服务器。

等等,还有一件事。
我记得上次测试环境失败了。
我检查了慢日志,发现临时表爆炸了。
使用pt-query-digest过滤tmp_disk_tables参数:直接用三重JOIN找到报表SQL,并将页面转换为IN子查询。
此操作特别适合月末的报告高峰期,否则如果在磁盘上打开临时表,会导致服务器过载。

我突然想到最好的办法就是使用tcpdump来捕获网络数据包。
上次租用服务器时,我没有SSH许可证,所以我安装了wireshark并在交换机端口上捕获它。
将 pcap 文件放入 pt-query-digest 中,您实际上可以获得惰性 SQL 的底层协议数据。
虽然慢查询日志只能看到“结果”,但网络抓包却能看到“过程”,结合起来就特别有趣。

我们现在每周使用 pt-stalk 进行实时跟踪,并直接将显示处理器的输出提供给消化。
例如,这个命令: 重击 pt-stalk --function=show-processlist --iterations=5 --interval=2 | pt-stalk --function=show-processlist --iterations=5 --interval=2 | pt-query-digest --type=进程列表 运行五秒后,您可以看到当前哪个查询消耗 CPU 最多,比传统慢日志至少提前 3 0 分钟为您提供预警。
但有一个陷阱。
捕获快照时不要忘记添加 --stop-wait 参数,否则 pt-stalk 会陷入 SHOW PROCESSLIST 尚未完成的状态。

话虽如此,最令人惊讶的是这些滤镜的组合。
我们有一个游戏迷,从以下几个方面找出AFK玩家的不寻常SQL——因为我们使用了 - 过滤器。
虽然不是常见的性能优化,但是如果日志使用正确,它可以用作检测器。

但是现在我已经迁移到云端,数据库日志直接传输到 S3 我需要使用 AWS CLI 传输文件以运行 Digest。
每次更新S3 存储桶策略之前,应该先使用--type=csv log检查权限,以免客户端数据被解析为慢查询。
这个工作看似简单,但做完之后你会发现,原木其实是一个篮子,里面什么都可以放。