首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于percona工具箱的pt-table同步,我能做什么呢?

对于percona工具箱的pt-table同步,我能做什么呢?
EN

Server Fault用户
提问于 2012-11-19 14:07:37
回答 3查看 8.7K关注 0票数 3

我一直在寻找一个工具来同步来自两个不同数据库的表,并找到了pt-table-sync。我阅读了这些文档并感到困惑:它们大多使用引用复制环境的示例,但我认为复制的全部目的是为您处理数据的同步问题,因此我提出了以下问题:

问题

  1. 如果复制过程应该为您处理数据的同步,那么使用pt-table-sync有什么意义呢?
  2. 我是否可以在一个非复制的环境中使用pt-table-sync (在与彼此无关的2+主机之间,这是给出的pt-table-sync --execute host1 host2 host3示例的作用)?
  3. 如果我必须在复制环境中使用pt-table-sync,那么是否可以不使用master上的bin-logs (有一个例子讨论了解决pt-table-checksum发现的差异,因此想知道bin-logs是否是绝对必要的)?
EN

回答 3

Server Fault用户

回答已采纳

发布于 2012-11-19 18:56:02

对问题1的回答

MySQL复制存在两个主要问题

  • MySQL复制是异步的。这可能会导致复制延迟。这表现在通过奴隶I/O线程在主从和奴隶之间的沟通问题。这在逻辑上和数字上都可以在Seconds_Behind_Master中看到。
  • Data Drift。这是一种间歇性的情况,因为MySQL复制领域之外的因素,主和从都是不同步的。例如,请注意一种更好地同步复制的方法:使用选项sync-binlog。当您将sync-binlog设置为1时,mysqld将对您在二进制日志中记录的每个条目执行当前二进制日志的刷新。会让大师的速度慢下来。默认情况下,sync-binlog为0。
    • 这里有一个问题:使用sync-binlog=0,谁负责将二进制日志刷新到磁盘?
    • 回答(请坐):操作系统!!
    • 有了这个答案,它把奴隶作为一个可怕的劣势,因为它的I/O线程是在主人的操作系统的摆布。当主操作系统准备将二进制日志更改刷新到磁盘,而从服务器的I/O线程可以检测到下一个传入的SQL语句时,该语句就会通过I/O线程传递给奴隶。
    • Percona有一个关于处理数据漂移的很好的PDF

对问题2的回答

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

对问题3的回答

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

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

如果您只是希望您的二进制日志不碍事,您可以做两件事之一。

  • 选项1:在主目录中,将expire-logs-days设置为3以保存最后3天的二进制日志
    • 在/etc/my.cnf中添加expire-logs-days=3
    • 不需要重新启动:只需运行SET GLOBAL expire_logs_days = 3;

  • 选项2:在奴隶上运行SHOW SLAVE STATUS\G。以Relay_Master_Log_File的值为例。并使用它清除母版上的二进制日志,以提升该日志文件。
    • 假设您在奴隶上运行SHOW SLAVE STATUS\G
    • 你得到这个Relay_Master_Log_File: mysql-bin.000035
    • 在主服务器上运行以下命令:PURGE BINARY LOGS TO 'mysql-bin.000035';

建议

如果您希望对pt-table-sync有更多的信心,请尝试使用--print选项并将其重定向到文本文件而不是--execute选项。这将生成通常在Master上执行的SQL。之后,您可以直接在该从服务器上运行SQL。把它想象成--execute的彩排。

票数 7
EN

Server Fault用户

发布于 2012-11-19 19:41:29

但我认为复制的全部目的是为您处理数据的同步问题。

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

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

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

我读了这些文档后感到困惑:

Percona的文档编写得像一本技术手册。不幸的是,它并没有很好地描述如何使用这些工具,它们如何帮助您等等。http://www.mysqlperformanceblog.com有一些这样的信息,但是它主要关注于MySQL的Percona分支(这是他们的谋生方式),这需要读者做一些翻译。

票数 3
EN

Server Fault用户

发布于 2015-06-16 08:21:16

对问题1的回答

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

但是,如果数据变化不太大,pt-table-sync也可以用于在几乎实时的情况下保持表的同步。

对问题2的正确回答

当然,您也可以在非复制环境中使用它,手册也提到了它。我使用它从cron保持3 mysql服务器“同步”每5分钟。它们具有相同的数据副本,这些副本有时只会更改(在第一台服务器上),因此为此目的的复制将是过度的。

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

票数 3
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/450118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档