“没有数据库”或“表”DB.Table“不存在”PT-升级运行中的故障,其中包含来自TCPDump的多个DB的查询

dba.stackexchange https://dba.stackexchange.com/questions/103198

  •  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龙,所以

  1. 我将其拆分使用option -l设置为20百万(每文件大约为1go),请确保文件之间的语句与

    一起编辑它们

    头-numberoflines ab >> aa例如

  2. 找到问题的根源(少开放,您不想在与vi中的RAM中有1Go)

  3. sed它与

    sed -e'/nameofscriptinyourfilewhichisinthefirstline.php/,+nd'

  4. 使用您需要编辑的行数。 (从我的角度来看,开发人员需要将这些信息放入调试目的,并且它是我们历史框架的一部分)。

    1. 将问题传达给开发人员并再次运行编辑的慢朗。

    2. 重复步骤2到4,直到您发现不再有任何错误。您可以通过此类命令运行您的sed列表

      sed -e'...'| SED -E' ...'| sed - '...'> corrcle_aa

    3. fianl问题:我发现有类似和“%”的查询也是一个痛苦,因为解析器无法理解它们。 (仍在寻找解决方案)。

      如果这有助于我很高兴。它不干净,很长,但它允许我找到不适合我们框架的所有查询,尽管它们以某种方式使其发出产品。由于我们在我们的MySQL版本中很晚才,我很高兴最终让他们为我工作。 ;)

      p.s。 : 这是我的第一篇文章。

我们最终做了什么,这是根据数据库特定的(原始)日志文件的表名从慢速速度留出查询。然后我们指定 - rype rawlog和 - 与pt-upgrade的realazease。

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top