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
    • 最新
    • 标签
主页 / server / 问题 / 450118
Accepted
Max
Max
Asked: 2012-11-20 06:07:37 +0800 CST2012-11-20 06:07:37 +0800 CST 2012-11-20 06:07:37 +0800 CST

我能用 percona 工具包的 pt-table-sync 做什么?

  • 772

我一直在寻找一种工具来同步来自 2 个不同数据库的表,并找到了pt-table-sync. 我阅读了文档并感到困惑:他们主要使用引用复制环境的示例,但我认为复制的全部意义在于为您处理数据同步,因此我的问题是:

问题

  1. pt-table-sync如果复制过程应该为您处理数据同步,那么使用它有什么意义呢?

  2. 我可以pt-table-sync在非复制环境中使用吗(2+主机之间没有任何关系,是不是给的pt-table-sync --execute host1 host2 host3例子的作用)?

  3. 如果我必须pt-table-sync在复制的环境中使用,我可以不使用吗bin-logs(master有一个例子讨论解决因 pt-table-checksum想知道是否bin-logs绝对必要而发现的差异)?

mysql
  • 3 3 个回答
  • 8534 Views

3 个回答

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2012-11-20T10:56:02+08:002012-11-20T10:56:02+08:00

    问题 1 的答案

    MySQL Replication 有两个主要问题

    • MySQL 复制是异步的。这可能会引入复制延迟。这表现为通过从属 I/O 线程的主从之间的通信问题。这可以在逻辑上和数字上看到Seconds_Behind_Master。

    • Data Drift. 这是一种间歇性情况,其中主服务器和从服务器由于 MySQL 复制领域之外的因素而完全不同步。例如,请注意一种更好地同步复制的方法:使用选项sync-binlog. 当你设置sync-binlog为 1 时,mysqld 将对你在二进制日志中记录的每个条目执行当前二进制日志的刷新。这可以荒谬地减慢大师的速度。默认情况下,sync-binlog为 0。

      • 这里有个问题:有了sync-binlog=0,谁负责把二进制日志刷到磁盘?
      • 答案(请坐下):操作系统!!!
      • 有了这个答案,它就把 Slave 置于一个可怕的劣势,因为它的 I/O 线程受控于 Master 的操作系统。当 Master 的操作系统开始将二进制日志更改刷新到磁盘并且 Slave 的 I/O 线程可以检测到下一个传入的 SQL 语句时,该语句将通过 I/O 线程发送到 Slave。
      • Percona 有一个关于处理数据漂移的很好的 PDF

    问题 2 的答案

    这里的直接答案是否定的,因为pt-table-sync它被设计为通过选项检测从站的 I/O 线程--sync-to-master。

    问题 3 的答案

    这里的直接答案是否定的,因为 MySQL 复制需要知道

    • Master 上当前的二进制日志是什么?(这是Master_Log_File来自SHOW SLAVE STATUS\G)
    • Slave 从 Master 的当前二进制日志中读取的最新位置是什么?(这是Read_Master_Log_Pos来自SHOW SLAVE STATUS\G)

    如果你只是想让你的二进制日志不碍事,你可以做以下两件事之一

    • 选项 1:在 Master 上,设置expire-logs-days为 3 以保留最近 3 天的二进制日志
      • expire-logs-days=3在/etc/my.cnf中加入
      • 无需重启:只需运行SET GLOBAL expire_logs_days = 3;
    • 选项 2:SHOW SLAVE STATUS\G在从站上运行。取值Relay_Master_Log_File。并使用它来清除 Master 上的二进制日志以更新该日志文件。
      • 假设你SHOW SLAVE STATUS\G在 Slave 上运行
      • 你明白了Relay_Master_Log_File: mysql-bin.000035
      • 在 Master 上运行:PURGE BINARY LOGS TO 'mysql-bin.000035';

    建议

    如果您想对 pt-table-sync 更有信心,请尝试使用该--print选项并重定向到文本文件而不是该--execute选项。这将生成通常在 Master 上执行的 SQL。此后,您可以直接在该 Slave 上运行 SQL。将其视为 的彩排--execute。

    • 7
  2. Stefan Lasiewski
    2012-11-20T11:41:29+08:002012-11-20T11:41:29+08:00

    但我认为复制的全部意义在于为您处理数据同步

    是的,MySQL 复制确实尝试同步复制的数据库。但是,MySQL 复制很棘手,复制可能会因各种原因而失败。根据我的经验,复制错误很少见,但它们确实会在服务器意外崩溃时发生,当用户在 master 上的大插入中间点击“Control-C”时,等等。MySQL.com 没有提供很好的工具来处理许多这些问题。幸运的是,一些工程师,例如 Baron Schwartz(Percona Toolkit(以前称为 Maatkit)的原作者)开发了一些工具来简化 MySQL 的管理。

    例如,我目前有一个包含 5000 万行的表。由于几周前服务器崩溃,少数行不同步。我需要发现哪些行不同步,但手动执行会很痛苦。我使用 pt-table-checksum 检查副本上的复制错误,并使用 pt-table-sync 来发现副本上缺少哪些行。

    如果您正在考虑 MySQL 复制,我强烈建议您研究并使用 Percona 工具包。如果我们从 Percona Toolkit 开始,我们的 MySQL 数据库的管理就会简单得多。

    我阅读了文档并感到困惑:

    Percona Toolkit 的文档就像技术手册一样编写。不幸的是,它在描述如何使用这些工具、它们如何帮助你等方面做得不好。http://www.mysqlperformanceblog.com有一些这样的信息,但它主要集中在 MySQL 的 Percona 分支上(这就是他们谋生的方式),这需要读者做一些翻译。

    • 3
  3. Marki555
    2015-06-17T00:21:16+08:002015-06-17T00:21:16+08:00

    问题 1 的答案

    pt-table-sync(与 一起pt-table-checksum)可用于纠正复制错误,如数据损坏、有人直接修改从站上的数据、服务器崩溃、模式更改顺序错误等。

    但是pt-table-sync,如果数据变化不大,也可以在没有复制的情况下使用,以近乎实时地保持表同步。

    问题2的正确答案

    当然你也可以在非复制环境中使用它,手册中也提到了它。我从 cron 使用它每 5 分钟保持 3 个 mysql 服务器“同步”。他们有相同的数据副本,只是有时(在第一台服务器上)会发生变化,因此为此目的进行复制就有些过分了。

    您可以指定要同步的单个数据库或单个表。您可以有多个目标服务器。pt-table-sync使用几种有效的算法来检测数据库表中的更改并仅复制更改(它将更改分为 4 组:删除、替换、插入、更新)。

    • 3

相关问题

  • 开源与专有关系 db mgt 系统的优缺点是什么?

  • 在 solaris 10 上为 mysql 设置 max_allowed_pa​​cket

  • 如何移动 MySQL 的数据目录?

  • 通过 VPN 连接什么是远程服务器 IP?

  • mysql崩溃

Sidebar

Stats

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

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve