“没有数据库”或“表”DB.Table“不存在”PT-升级运行中的故障,其中包含来自TCPDump的多个DB的查询
-
26-09-2020 - |
题
我使用以下tcpdump命令收集了主机上的查询:
tcpdump -i any -s 65535 -x -n -nn -q -tttt 'port 3306' > tcpdump.tcp
.
查询在几个数据库中执行。
我使用以下命令通过pt查询摘要运行此文件:
pt-query-digest --output=slowlog --no-report --sample 100 --type tcpdump tcpdump.tcp > slow.log
.
然后我ran针对两个从这样的从头升级:
pt-upgrade --user user --ask-pass --run-time=1h --upgrade-table percona.pt_upgrade h=10.1.1.1 h=10.1.1.2 slow.log
.
但我有一堆失败,因为它似乎没有指定查询应该针对哪个数据库。
当查询在多个DB中收集查询时,如何使用PT升级?在任何地方的文档中没有指定非法。
您是否应该使用 - 使用pt-query-digest来使用-filter来仅输出特定数据库的查询,然后用pt-upgrade指定--database?每个数据库冲洗并重复。
需要几个小时的时间来解析我的巨大TCPDUMP捕获,因此这里的任何指导都很欣赏。
谢谢!
p.s。
我使用这个文章作为起点,但它已经过时了。例如pt-query-digest不再具有 - 打印选项。
解决方案
-
如果省略 - 静写 - 仍然无法工作 - _sample?
-
(手动)
还请注意,PT-Query-Digest可能无法报告数据库 解析TCPDUMP输出时查询。数据库仅被发现 在新客户端或何时的初始连接事件中 执行。如果TCPdump输出既不包含这些,那么 pt-query-digest无法发现数据库。
- 考虑使用常规日志而不是tcpdump?
其他提示
我有类似的问题。我也有缺少表和缺少的使用陈述。有时使用语句存在,但数据库错误。我使用一个非常简单的解决方法。
(prelude)我的第一个问题:我的慢速.Log是60龙,所以
-
我将其拆分使用option -l设置为20百万(每文件大约为1go),请确保文件之间的语句与
一起编辑它们头-numberoflines ab >> aa例如
-
找到问题的根源(少开放,您不想在与vi中的RAM中有1Go)
-
sed它与
sed -e'/nameofscriptinyourfilewhichisinthefirstline.php/,+nd'
-
将问题传达给开发人员并再次运行编辑的慢朗。
-
重复步骤2到4,直到您发现不再有任何错误。您可以通过此类命令运行您的sed列表
sed -e'...'| SED -E' ...'| sed - '...'> corrcle_aa
使用您需要编辑的行数。 (从我的角度来看,开发人员需要将这些信息放入调试目的,并且它是我们历史框架的一部分)。
fianl问题:我发现有类似和“%”的查询也是一个痛苦,因为解析器无法理解它们。 (仍在寻找解决方案)。
如果这有助于我很高兴。它不干净,很长,但它允许我找到不适合我们框架的所有查询,尽管它们以某种方式使其发出产品。由于我们在我们的MySQL版本中很晚才,我很高兴最终让他们为我工作。 ;)
p.s。 : 这是我的第一篇文章。
我们最终做了什么,这是根据数据库特定的(原始)日志文件的表名从慢速速度留出查询。然后我们指定 - rype rawlog和 - 与pt-upgrade的realazease。