试图运行PT-table-Checksum,以检测MySQL复制中的从属漂移。但是,我的奴隶不使用标准的TCP侦听端口,因此,当我运行工具时,我会发现一个错误:

Cannot connect to P=3306,h=,p=...

它仍然可以检查主表的表格,但是在不连接到奴隶的情况下,它不是很有用。在运行命令时,我无法弄清楚如何指定从奴隶的替代端口。我当前的命令看起来像

pt-table-checksum -h  -P 3388 -p 
有帮助吗?

解决方案

问题是复制品不向主人报告其端口。默认情况下,PT-Table-Checksum尝试通过填充未知数的默认值来连接;如果未知数不使用默认值,则将失败。在这种情况下,有两个选择:

1)使用-RECURSION-METHOD选项从检查Show ProcessList转换为检查Show Shave主机,并配置从属以报告其主机。我不建议这样做。

2)我建议您使用 - recursion-method = dsn,并创建一个装满DSN(数据源名称)指令的表,该指令告诉工具如何连接到每个副本。如果此表为foo.bar,则您将使用-RECURSION-METHOD = DSN = D = foo,t = bar。

这仅在工具包的2.0系列中可用,但是无论如何您都应该使用它,因为PT-Table-Checksum在2.0中得到了极大的改进。

其他提示

Percona工具不使用标准MySQL客户端参数。您需要以其格式指定DSN。看 http://www.percona.com/doc/percona-toolkit/2.0/pt-table-checksum.html#dsn-options

你会想要类似的东西

pt-table-checksum h=myhost,u=user,p=pass,P=port

就我个人而言,我不喜欢将凭据放入会出现在ProcessList中的某些内容,以便您可以做

pt-table-checksum --defaults-file=/path/to/my.cnf h=myhost,P=port

my.cnf看起来像

[client]
user=usernameXYZ
password=asdf234JKL

如果您希望它复制到您的奴隶,则需要指定一个 - 复制 说明其表格将校验和放入的选项(因此,将从值放入每个从属上)。如果这是您的第一次,您可能想为您创建该表 - 创建复制表.

除非您希望它监视落后的奴隶,否则它不需要直接连接到奴隶。它基本上会发出诸如

替换为CheckSumstables ...(Masterv1,MasterV2,(选择Blah ...))

沿替换的选择部分写入BINLOG的字面主值。当该奴隶在奴隶上执行时,选择要获得奴隶校验和。

我最近花了很多时间使用此工具,因此请先开始回答您需要帮助的更具体的问题,因此我不仅重写了整个手册,而且可能出错的所有可能的事情。

注意:如果您运行

export PTDEBUG=1

在任何Percona脚本之前,它都会为您提供大量的调试信息,以帮助您指向问题的方向。还请记住,这些都是Perl脚本,因此您可以自己检查源以(也许)查看出了什么问题。

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