AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 25414
Accepted
gertvdijk
gertvdijk
Asked: 2012-10-05 03:32:12 +0800 CST2012-10-05 03:32:12 +0800 CST 2012-10-05 03:32:12 +0800 CST

我是否必须过滤复制中的 percona.checksums 表以用于 pt-table-checksum?

  • 772

我已经设置了MySQL复制,一主一从。现在我开始使用 Percona 的pt-table-checksum. 检测从站上的任何变化或漂移的绝佳工具。

据我从其文档中了解到,它在主服务器上运行,将校验和写入percona.checksums表,并在使用常规远程 MySQL 连接连接(自动检测)的从服务器上类似地运行。但是,percona.checksums表实际上也被复制了!如果从站上的数据不同,则来自主站的校验和可能会在从站上被覆盖而不会被检测到。

现在,我担心这可能会导致我在检测变化时观察到的假阴性。

是否pt-table-checksum采取了预防措施来防止percona.checksums桌面上的复制?

  • 如果是这样,这是如何工作的?(据我所知,不能像这样更改复制过滤器)这可能有助于我查明我的观察的其他原因(见下文)。
  • 如果不是,那么我如何确定该表的内容反映了该特定服务器的校验和?我应该放置一个复制过滤器吗?Percona 的工具包文档实际上不鼓励这样做。

实际观察

我在我的测试设置中看到了一个事件,其中以某种方式运行pt-table-checksum没有检测到故意对从站进行的更改。检查校验和表的内容显示了主人的校验和。在从站本身上运行该工具然后显示校验和应该是不同的!这让我相信存在竞争条件,这也是难以重现的原因。

另一个假设

假设 slave 在运行的时候发生了漂移,网络连接中断了一小会儿pt-table-checksum。它会在输出中显示它无法连接到从站stderr,但不会失败。不久之后,网络恢复,复制恢复,复制主表的内容percona.checksums。然后运行pt-table-checksum --replicate-check-only​​, 将提供漏报。我在这里吗?如果是这样,在这种情况下我该如何防止这种情况发生?

这是一个常规的 MySQL 服务器/客户端,使用 Percona 的工具包。

版本:

  • pt表校验和2.1.4
  • MySQL客户端:5.5.24
  • MySQL 服务器:5.5.24-0ubuntu0.12.04.1-log (Ubuntu 12.04)
mysql replication
  • 1 1 个回答
  • 1075 Views

1 个回答

  • Voted
  1. Best Answer
    R. S.
    2012-11-05T18:52:30+08:002012-11-05T18:52:30+08:00

    你错了。它只在主服务器上运行校验和,不在从服务器上运行。

    示例查询运行:

    REPLACE INTO `percona`.`checksums` (db, tbl, chunk, chunk_index, lower_boundary, upper_boundary, this_cnt, this_crc) SELECT 'db', 'table', '1', NULL, NULL, NULL, COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `field1`, `field2`, `field3`, `field4`, `field5`, `field6`, `field7`)) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `db`.`table` /*checksum table*/;
    

    这是有效的,因为它需要基于语句的复制,所以查询是在每个从站上针对他们的数据而不是主站找到的数据运行的。这记录在限制下的 pt-table-checksums 文档中

    pt-table-checksum requires statement-based replication, and it sets
    binlog_format=STATEMENT on the master, but due to a MySQL limitation
    replicas do not honor this change. Therefore, checksums will not replicate
    past any replicas using row-based replication that are masters for further replicas.
    

    如果您在校验和查询复制后修改数据,当然不会显示数据已更改,因为在计算校验和时它是正确的。

    如果您在更改从站上的数据后重新运行校验和,那么它应该会拾取它,假设您没有使用 n>2 层复制设置。

    回复:另一个假设,没关系,与奴隶的连接只对不匹配的“实时”检测很重要,而不是校验和实际计算正确。即使在网络中断的情况下,也不应该出现漏报。

    说得通?

    • 2

相关问题

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • PostgreSQL 9.0 Replication 和 Slony-I 有什么区别?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve