跳到内容

pt-table-sync

名字

pt-table-sync—高效同步MySQL表数据。

剧情简介

使用

pt-表格-同步选项DSNDSN

pt-table-sync在MySQL表之间有效地同步数据。

此工具会更改数据,因此为了最大程度的安全性,您应该在使用它之前备份数据。对象同步复制从服务器时——复制——sync-to-master方法,它总是在复制主机上进行更改,从来没有直接复制从机。这通常是唯一安全的方法,使副本与主同步;对副本的更改通常首先是问题的根源。但是,它在主服务器上所做的更改应该是将数据设置为当前值的无操作更改,并且实际上只影响副本。

数据库同步。资源描述在host1来host2:

pt-table-sync——执行hhost1 Ddb, t资源描述hhost2

将host1上的所有表同步到host2和host3:

pt-table-sync——执行host1host2host3

使slave1拥有与其复制主节点相同的数据:

pt-table-sync——执行——sync-to-masterslave1

解决master1的所有slave上pt-table-checksum发现的差异:

pt-table-sync——执行——复制雷竞技下载官网percona.checksummaster1

同上,但只解决slave1的差异:

pt-table-sync——执行——复制雷竞技下载官网percona.checksum——sync-to-masterslave1

在master-master复制配置中同步master2,其中master2的db副本。已知或怀疑TBL是不正确的:

pt-table-sync——执行——sync-to-masterhmaster2 Ddb, t资源描述

请注意,在master-master配置中,下面的操作不会执行您想要的操作,因为它将直接对master2进行更改,然后通过复制并更改master1的数据:

不要在master-master设置中这样做!pt-table-sync——执行hmaster1 Ddb, t资源描述master2

风险

警告pt-table-sync修改数据!使用此工具前,请:

  • 阅读工具的文档

  • 检查工具已知的“bug”

  • 在非生产服务器上测试该工具

  • 备份您的生产服务器并验证备份

pt-table-sync是成熟的,在现实世界中得到了验证,并且经过了良好的测试,但如果使用不当,可能会产生不良后果。总是先测试同步——即将而且——打印

描述

pt-table-sync实现表数据的单向和双向同步。它同步表结构、索引或任何其他模式对象。下面介绍单向同步。“双向同步”将在后面描述。

这个工具很复杂,有几种不同的功能。为了安全有效地使用它,你应该明白三件事:使用的目的——复制查找差异,并指定主机。这三个概念密切相关,并决定了工具的运行方式。以下是缩写逻辑:

如果DSN一个t部分,同步只有表:如果1DSN:如果——sync-to-master:DSN一个奴隶。连接它的而且同步。如果更多的1DSN:第一个DSN源。同步每一个DSN转弯。其他的如果——复制:如果——sync-to-master:DSN一个奴隶。连接它的主人,找到记录差异,而且修复。其他的DSN的主人。找到奴隶而且连接每一个,找到记录差异,而且修复。其他的如果只有1DSN而且——sync-to-master:DSN一个奴隶。连接它的主人,找到而且过滤器——数据库等,而且同步每一个表格的主人。其他的找到表,过滤——数据库等,而且同步每一个DSN第一。

pt-table-sync可以以两种方式之一运行:与——复制或没有。默认值是不带任何参数运行——复制导致pt-table-sync用几种算法之一(参见“算法”)自动高效地查找差异。的值——复制,如果指定,则表示原因pt-table-sync使用之前运行pt-table-checksum与自己的checksum所发现的差异——复制选择。严格来说,你不需要使用——复制因为pt-table-sync可以发现差异,但很多人使用——复制例如,如果他们定期使用pt-table-checksum进行校验,然后根据需要修复差异pt-table-sync.如果您不确定,请仔细阅读每个工具的文档并自行决定,或咨询专家。

不管是否——复制是否使用时,需要指定同步哪些主机。有两种方法:用——sync-to-master或没有。指定——sync-to-master使pt-table-sync期望在命令行上有且只有一个从DSN。该工具将自动发现从服务器的主服务器并同步它,使其数据与主服务器的数据相同。这是通过在主服务器上进行更改来实现的,这些更改随后通过复制并更新从服务器以解决其差异。但是要小心:虽然这个选项指定并同步一个slave,但是如果在同一个master上有其他slave,他们将通过复制接收到针对你正在尝试同步的slave的更改。

或者,如果不指定——sync-to-master,命令行上给出的第一个DSN就是源主机。只有一个源主机。如果您没有指定——复制,则必须指定至少一个其他DSN作为目标主机。可以有一个或多个目标主机。源主机和目标主机必须是独立的;它们不能位于相同的复制拓扑中。pt-table-sync如果检测到目标主机是从主机,将终止并报错,因为更改是直接写入目标主机的(而且直接写入从主机是不安全的)。或者,如果你指定的话——复制(但不——sync-to-master),那么pt-table-sync在命令行上期望有且只有一个主DSN。该工具将自动发现所有主服务器的从服务器,并将它们同步到主服务器。这是一次同步多个(所有)slave的唯一方法(因为——sync-to-master只指定一个slave)。

命令行上的每个主机都指定为一个DSN。第一个深空网络(或者只有一个深空网络,例如——sync-to-master)为其他dsn提供默认值,无论这些其他dsn是在命令行上指定的还是由工具自动发现的。在这个例子中,

pt-table-sync——执行hhost1 umsandbox pmsandboxhhost2

host2 DSN继承u而且p来自host1 DSN的DSN部件。使用——explain-hosts选项查看如何pt-table-sync将解释命令行上给出的dsn。

限制

使用基于行的复制的副本

pt-table-sync属性时需要基于语句的复制——sync-to-master——复制选择。因此它会凝固binlog_format =声明如果需要,在主服务器上为其会话设置。要做到这一点,用户必须具备超级特权。

输出

如果您指定——详细选项,您将看到关于表之间差异的信息。每个表有一行。每个服务器分别打印。例如,

#同步h=host1,D=test,t=test1# delete替换插入更新算法开始结束退出数据库。表格# 00 3 0 Chunk 13:00:00 13:00:17

表测试。test1 on host1 required 3插入语句同步,它使用Chunk算法(见“算法”)。该表的同步操作从13:00:00开始,17秒后结束现在()在源主机上)。因为发现了差异,所以其“EXIT STATUS”为2。

如果您指定——打印选项,您将看到脚本用于同步表的实际SQL语句——执行也是指定的。

如果你想看到的SQL语句pt-table-sync是用来选择块,啃,行等,然后指定——打印一次,——详细两次。但是要小心:这会打印大量SQL语句。

在某些情况下,没有组合插入更新删除语句可以在不违反某些惟一键的情况下解决差异。例如,假设列a上有一个主键,列b上有一个唯一键。那么就没有办法用简单的UPDATE语句来同步这两个表:

+---+---++---+---+|一个|b||一个|b|+---+---++---+---+|1|2||1|1||2|1||2|2|+---+---++---+---+

该工具将查询重写为删除而且取代在这种情况下。这将在第一次索引违反后自动处理,因此您不必担心它。

使用时要小心pt-table-sync在任何master-master设置中。Master-master复制本来就很棘手,而且很容易出错。您需要确保正确地使用该工具进行主-主复制。有关正确用法的概述,请参阅“概要”。

还要注意具有外键约束的表删除更新定义,因为这些可能会导致子表发生意外的更改。看到——[不]check-child-tables

通常,当表有主键或唯一索引时,此工具最适合。尽管它可以同步缺少主键或唯一索引的表中的数据,但最好通过其他方式同步这些数据。

复制安全

一般来说,安全同步复制主从是一个不平凡的问题。有各种各样的问题需要考虑,比如其他进程更改数据、试图更改从服务器上的数据、目标和源服务器是否是主从对,等等。

一般来说,安全的方法是更改主服务器上的数据,并让更改像任何其他更改一样通过复制流到从服务器。但是,只有在可以将REPLACE替换到主表中时,这种方法才有效。REPLACE仅在表上有唯一索引时才有效(否则它就像普通的INSERT一样)。

如果表具有惟一的键,则应该使用——sync-to-master和/或——复制将从服务器同步到主服务器的选项。这通常会做正确的事情。当表上没有唯一键时,除了更改从表上的数据外别无选择pt-table-sync会察觉到你想这么做。除非你指定,否则它会抱怨并死亡——no-check-slave(见——[不]check-slave).

如果在主-主对上同步一个没有主键或唯一键的表,则必须更改目标服务器上的数据。因此,您需要指定——no-bin-log为安全起见(请参阅——[不]bin-log).如果您不这样做,您在目标服务器上所做的更改将复制回源服务器并更改那里的数据!

在master-master对上,通常安全的做法是使用——sync-to-master选项,这样就不会更改目标服务器上的数据。您还需要指定——no-check-slave保持pt-table-sync从抱怨它正在改变一个slave上的数据。

算法

pt-table-sync有一个通用的数据同步框架,使用不同的算法来发现差异。属性指定的索引、列类型和算法首选项,该工具自动为每个表选择最佳算法——算法.以下算法是可用的,按默认优先顺序列出:

查找第一列为数值(包括日期和时间类型)的索引,并将该列的值范围划分为约为1的块——块大小行。通过校验和整个数据块一次同步一个数据块。如果数据块在源和目标上不同,则分别对每个数据块的行进行校验和,以找到不同的行。

当列具有足够的基数使数据块最终达到合适的大小时,这是有效的。

初始的每个块校验和非常小,导致最小的网络流量和内存消耗。如果必须检查数据块的行,则仅通过网络发送主键列和校验和,而不是发送整行。如果发现某行不同,将获取整行,而不是之前的行。

请注意,如果将所有值以相同字符开头的char列分块,则此算法将不起作用。在这种情况下,该工具将退出并建议选择不同的算法。

一点一点地咬

找到一个索引,并以固定大小的小块上升该索引——块大小行,使用非回溯算法(有关此算法的更多信息,请参阅pt-archiver)。它与“Chunk”非常相似,但它不是基于索引基数预先计算表中每个部分的边界,而是使用限制定义每一个小口的上限,并定义前一个小口的上限下限。

它分步骤工作:一个查询查找将定义下一个啃点的上限的行,下一个查询对整个啃点进行校验和。如果源和目标之间的蚕食不同,它就会一行一行地检查蚕食,就像“Chunk”一样。

GroupBy

选择按所有列分组的整个表,并添加一个COUNT(*)列。比较所有列,如果它们相同,则比较COUNT(*)列的值,以确定在目标中插入或删除多少行。适用于没有主键或唯一索引的表。

在一个大流中选择整个表,并比较所有列。选择所有列。效率比其他算法低得多,但当没有合适的索引供它们使用时仍然有效。

未来的计划

未来的算法可能是TempTable(我最初在该工具的早期版本中称为自下而上)、DrillDown(我最初称为自上而下)和GroupByPrefix(类似于SqlYOG Job Agent的工作方式)。每种算法都有优缺点。如果您希望实现您最喜欢的技术,以便在可能不同的服务器上查找两个数据源之间的差异,我愿意提供帮助。算法遵循一个简单的界面,这使得编写自己的算法非常容易。

双向同步

双向同步是一个新的实验性特性。为了使它可靠地工作,有一些严格的限制:

只有作品同步一个服务器其他独立的服务器*工作任何道路复制*需要表格年代chunkable算法*多种方式,只有双向之间的两个服务器一个时间处理删除变化

例如,假设我们有三个服务器:c1 r1 r2。C1是中心服务器,是其他服务器的伪主服务器(即r1和r2不是C1的从服务器)。R1和r2是远程服务器。表foo中的行被更新并插入到所有三台服务器上,我们希望在所有服务器之间同步所有更改。表foo有列:

idint主要的关键ts时间戳汽车更新后的名字varchar

使用自动递增偏移量,以便来自任何服务器的新行不会创建冲突的主键(id)值。通常,当双向同步期间发现相同但不同的行时,由ts列确定的较新的行优先。“相同但不同”意味着两行具有相同的主键(id)值,但对于其他一些列(如本例中的name列)具有不同的值。相同而不同的冲突通过“冲突”来解决。冲突比较竞争行的某列以确定“赢家”。获胜的行成为源,它的值用于更新另一行。

用于实现双向同步的三个列之间存在您应该熟悉的细微差异:chunk column (——chunk-column),比较列(——列),冲突列(——conflict-column).chunk列仅用于对表进行chunk;例如,“WHERE id >= 5 AND id < 10”。块是校验和的,当块校验和显示差异时,该工具选择该块中的行并校验和——列对于每一行。如果列校验和不同,则行有一个或多个冲突的列值。在传统的单向同步中,冲突是一个没有意义的问题,因为它可以通过简单地用源行的值更新整个目标行来解决。然而,在双向同步中——conflict-column(按照其他规定)——冲突- *下面的选项列表)进行比较,以确定哪一行是“正确的”或“权威的”;这一行成为“源”。

要完全同步所有三台服务器,需要运行两次pt-table-sync是必需的。第一次运行同步c1和r1,然后同步c1和r2,包括r1的任何变化。此时,c1和r2完全同步,但r1与r2没有任何变化,因为c1和r1同步时没有这些变化。因此需要第二次运行,以相同的顺序同步服务器,但这一次当c1和r1同步时,r1得到r2的更改。

该工具不进行n -way同步,只在命令行上给出的第一个DSN和每个后续DSN之间进行双向同步。因此,这个例子中的工具将像这样运行两次:

pt-table-sync——双向hc1hr1hr2

——双向选项启用此功能,并导致执行各种健全检查。您必须指定其他选项pt-table-sync如何解决相同但不同行的冲突。这些选项是:

——conflict-column *——conflict-comparison *——conflict-value *——conflict-threshold *——conflict错误“>(可选)

使用——打印之前测试此选项——执行.打印的SQL语句将有注释,说明如果使用的话,语句将在哪个主机上执行——执行

技术边注:第一个DSN始终是“左”服务器,其他DSN始终是“右”服务器。由于任何一个服务器都可以成为源服务器或目标服务器,因此将它们视为“src”和“dst”是令人困惑的。因此,它们通常被称为左和右。这很容易记住,因为第一个DSN总是在命令行上的其他服务器DSN的左边。

退出状态

以下是退出状态(也称为返回值或返回码)pt-table-sync结束和退出。

状态意义= = = = = ========================================================0成功。1内部错误。2至少一个表格不同目的地。3.结合1而且2

选项

至少指定其中的一个——打印——执行,或——即将

——而且——复制相互排斥。

该工具接受额外的命令行参数。详细信息请参考“概要”和使用信息。

——算法

类型:字符串;默认值:一块,咬,GroupBy流

在比较表时使用的算法,按优先级排序。

对于每个表,pt-table-sync将检查表是否可以按照给定的顺序与给定的算法同步。使用第一个可以同步表的算法。看到“算法”。

——ask-pass

连接MySQL时提示输入密码。

——双向

开启首台主机与后续主机之间的双向同步。

更多信息请参见“双向同步”。

——[不]bin-log

默认值:是的

日志到二进制日志(SQL_LOG_BIN = 1).

指定——no-bin-logSQL_LOG_BIN = 0

——buffer-in-mysql

指示MySQL在内存中缓冲查询。

此选项将添加SQL_BUFFER_RESULT选项的比较查询。这将导致MySQL执行查询,并在将结果发送回之前将它们放在内部的临时表中pt-table-sync.这种策略的优点是pt-table-sync可以根据需要获取行,而不会在Perl进程中使用大量内存,同时释放MySQL表上的锁(以减少与其他查询的争用)。缺点是它在MySQL服务器上使用了更多的内存。

你可能想离开了——[不]buffer-to-client也启用了,因为缓冲到临时表中,然后将它全部提取到Perl的内存中可能是一件愚蠢的事情。此选项对于GroupBy和Stream算法最有用,因为它们可能从服务器获取大量数据。

——[不]buffer-to-client

默认值:是的

在比较时从MySQL中逐个获取行。

此选项启用mysql_use_result这会导致MySQL将选定的行保存在服务器上,直到工具获取它们。这允许工具使用更少的内存,但可能会使行锁定在服务器上的时间更长。

如果禁用此选项,则指定——no-buffer-to-client然后mysql_store_result,这将导致MySQL立即将所有选定的行发送给工具。这可能导致结果“游标”在服务器上保持打开的时间较短,但如果表很大,无论如何都可能需要很长时间,并占用所有内存。

对于大多数非平凡的数据大小,您希望启用此选项。

——双向使用。

——频道

类型:字符串

通过复制区域通道连接到服务器时使用的通道名称。假设您有两个主服务器,master_a在端口12345,master_b在端口1236,一个从服务器使用通道chan_master_a和chan_master_b连接到两个主服务器。如果你想逃跑的话pt-table-sync要使从服务器与master_a同步,pt-table-sync因为SHOW SLAVE STATUS将返回2行,所以无法确定正确的主节点。在这种情况下,可以使用-channel =chan_master_a指定在SHOW SLAVE STATUS命令中使用的通道名称。

——字符集

简写形式:-A;类型:字符串

默认字符集。如果值为utf8,将Perl在STDOUT上的binmode设置为utf8,将mysql_enable_utf8选项传递给DBD::mysql,并在连接mysql后运行SET NAMES utf8。任何其他值在没有utf8层的STDOUT上设置binmode,并在连接到MySQL后运行SET NAMES。

——[不]check-child-tables

默认值:是的

检查是否——执行将对子表产生不利影响。当——取代——复制,或——sync-to-master指定时,该工具可以使用取代语句。如果正在同步的表有子表删除级联更新级联,或更新,工具打印错误并跳过表,因为取代就变成了删除然后插入,所以删除将级联到子表并删除其行。在最坏的情况下,这会删除子表中的所有行!

指定——no-check-child-tables禁用此检查。要完全避免影响子表,还需要指定——no-foreign-key-checks所以MySQL不会将任何操作从父表级联到子表。

只有当——执行其中一个——取代——复制,或——sync-to-master都是确定的。——打印不检查子表。

错误消息只打印找到的第一个子表删除级联更新级联,或更新外键约束。可能还有其他受影响的子表。

——[不]check-master

默认值:是的

——sync-to-master,尝试验证检测到的主服务器是真正的主服务器。

——[不]check-slave

默认值:是的

检查目标服务器是否是从服务器。

如果目标服务器是从服务器,在其上进行更改通常是不安全的。然而,有时你不得不这样做;——取代除非有一个唯一的索引,否则无法工作,例如,在这种情况下,您不能对主节点进行更改。默认情况下pt-table-sync如果您试图更改从机上的数据,将会报错。指定——no-check-slave禁用此检查。使用它的风险由你自己承担。

——[不]check-triggers

默认值:是的

检查目标表上没有定义触发器。

触发器是在MySQL v5.0.2中引入的,所以对于旧版本,这个选项没有作用,因为触发器不会被检查。

——chunk-column

类型:字符串

在该表的这一列上划分块。

——chunk-index

类型:字符串

使用此索引对表进行块。

——块大小

类型:字符串;默认值:1000

每个块的行数或数据大小。

“chunk”和“Nibble”算法的每个行块的大小。大小可以是行数,也可以是数据大小。数据大小的后缀为k=kibibytes, M=mebibytes, G=gibibytes。数据大小通过除以平均行长转换为行数。

——列

简写形式:-c;类型:数组

比较这个以逗号分隔的列列表。

——配置

类型:数组

读取以逗号分隔的配置文件列表;如果指定,则必须是命令行上的第一个选项。

——conflict-column

类型:字符串

类期间行冲突时,比较此列——双向同步。

当找到相同但不同的行时,将根据。比较每行中此列的值——conflict-comparison——conflict-value而且——conflict-threshold以确定哪一行具有正确的数据并成为源。列可以是任何类型,只要有合适的类型——conflict-comparison(这几乎是所有类型,除了,例如,blob)。

此选项仅适用于——双向.更多信息请参见“双向同步”。

——conflict-comparison

类型:字符串

选择——conflict-column使用此属性作为源。

该选项会影响——conflict-column比较冲突行的值。可能的比较是以下magic_compare之一:

最新的|最古老的|最大的|至少|=|比较匹配选择===================================================================最新的最新的时间——conflict-column价值最大的最古老的时间——conflict-column价值最大的最大的数值”——conflict-column价值least最小数值——冲突列值=——conflict-column value =——conflict-value匹配Perl正则表达式模式——conflict-value

此选项仅适用于——双向.更多信息请参见“双向同步”。

——conflict错误

类型:字符串;默认值:警告

如何报告无法解决的冲突和冲突错误

此选项更改在无法解决冲突或导致某种错误时通知用户的方式。可能取值为:

警告:打印一个警告STDERR关于不肯舍弃冲突*死:死,停止同步,而且打印一个警告STDERR

此选项仅适用于——双向.更多信息请参见“双向同步”。

——conflict-threshold

类型:字符串

数量是多少——conflict-column必须超越其他。

——conflict-threshold如果两者之间的绝对差异,则阻止冲突得到解决——conflict-column值小于此值。例如,如果有两个——conflict-column具有时间戳值“2009-12-01 12:00:00”和“2009-12-01 12:05:00”,差异为5分钟。如果——conflict-threshold被设置为“500万”的冲突将得到解决,但如果——conflict-threshold设置为“6m”时,冲突将无法解决,因为差异不大于或等于6分钟。在后一种情况下,——conflict错误将报告失败。

此选项仅适用于——双向.更多信息请参见“双向同步”。

——conflict-value

类型:字符串

一定要使用这个值——conflict-comparison

该选项给出的值为=而且匹配——conflict-comparison

此选项仅适用于——双向.更多信息请参见“双向同步”。

——数据库

简写形式:-d;类型:哈希

只同步这个以逗号分隔的数据库列表。

一个常见的请求是同步来自同一个或不同服务器上的另一个数据库的表。这还不可能。——数据库不会这样做,你也不能用DSN的D部分这样做,因为在没有表名的情况下,它假设整个服务器都应该同步,而D部分只控制连接的默认数据库。

——defaults-file

简写形式:-F;类型:字符串

只从给定文件中读取mysql选项。你必须给出一个绝对路径名。

——即将

分析,确定使用的同步算法,打印并退出。

意味着——详细所以你可以看到结果。结果与实际运行该工具时看到的输出格式相同,但受影响的行将出现零。这是因为工具实际执行,但在比较任何数据之前停止,只返回0。这些零并不意味着不需要进行任何更改。

——引擎

简写形式:-e;类型:哈希

仅同步此以逗号分隔的存储引擎列表。

——执行

执行查询使表具有相同的数据。

这个选项使得pt-table-sync实际上,通过执行它为解决表差异而创建的所有查询来同步表数据。因此,桌子要换了!除非你还指定了——详细,这些变化将悄然进行。如果这不是你想要的,看看——打印——即将

——explain-hosts

打印连接信息并退出。

打印一个主机列表pt-table-sync将连接,与所有不同的连接选项,并退出。

——浮点精度

类型:int

精度为浮动而且number-to-string转换。使用MySQL中的ROUND()函数,将FLOAT和DOUBLE值四舍五入到小数点后的指定位数。这可以帮助避免由于相同值在不同MySQL版本和硬件上的不同浮点表示而导致的校验和不匹配。默认值是不舍入;这些值由CONCAT()函数转换为字符串,MySQL选择字符串表示。例如,如果指定值为2,则值1.008和1.009将四舍五入为1.01,并将校验和为相等。

——[不]foreign-key-checks

默认值:是的

启用外键检查(FOREIGN_KEY_CHECKS = 1).

指定——no-foreign-key-checksFOREIGN_KEY_CHECKS = 0

——函数

类型:字符串

用于校验和的哈希函数。

默认为CRC32.其他好的选择包括MD5而且SHA1.如果已安装FNV_64用户定义的函数,pt-table-sync会检测到它并倾向于使用它,因为它比内置的要快得多。如果已经安装了用户定义的函数,还可以使用MURMUR_HASH。它们都是与Percona Server一起发布的。雷竞技下载官网有关更多信息和基准测试,请参阅pt-table-checksum。

——帮助

求救并离开。

——[不]hex-blob

默认值:是的

十六进制()文本而且二进制列。

当从源中获取行数据以创建查询以同步数据时(即与——打印并由——执行),二进制列被HEX()包装,因此二进制数据不会产生无效的SQL语句。您可以禁用此选项,但可能不应该这样做。

——主机

简写形式:-h;类型:字符串

连接到主机。

——ignore-columns

类型:哈希

在比较中忽略这个以逗号分隔的列名列表。

此选项将导致不比较列。但是,如果确定一行在表之间不同,那么该行中的所有列都将同步。(目前还不能从同步进程本身中排除列,只能从比较中排除列。)

——ignore-databases

类型:哈希

忽略这个以逗号分隔的数据库列表。

(系统数据库,如information_schema而且performance_schema默认情况下被忽略)

——ignore-engines

类型:散列;默认值:联邦,MRG_MyISAM

忽略这个以逗号分隔的存储引擎列表。

——ignore-tables

类型:哈希

忽略这个以逗号分隔的表列表。

表名可以用数据库名限定。

——ignore-tables-regex

类型:字符串;组:过滤器

忽略名称与Perl正则表达式匹配的表。

——[不]index-hint

默认值:是的

在数据块和行查询中添加FORCE/USE INDEX提示。

默认情况下pt-table-sync在每个SQL语句中添加一个FORCE/USE INDEX提示,以强制MySQL使用同步算法选择的或指定的索引——chunk-index.这通常是一件好事,但在极少数情况下,索引可能不是查询的最佳索引,因此您可以通过指定——no-index-hint并让MySQL选择索引。

这不会影响打印的查询——打印;它只影响数据块和行查询pt-table-sync用于选择和比较行。

——锁

类型:int

锁定表:0=无,1=每个同步周期,2=每个表,或3=全局。

它使用.这有助于防止在检查表格时更改表格。可能取值为:

价值意义= = = = ========================================================0从来没有表。1而且解锁一个时间同步周期作为实现通过同步算法大多数细粒度的水平锁定可用。的例子,算法每一个C < N >行,而且然后解锁他们如果他们相同而且目的地,之前移动下一个块。2而且解锁之前而且每一个表格3.而且解锁一次每一个服务器DSN同步,C <冲洗锁>。

复制从机永远不会被锁定——复制——sync-to-master指定,因为在理论上锁定主表可以防止发生任何更改。(你没有改变你的slave的数据,对吧?)如果——等待,主进程(源进程)被锁定,然后工具等待从进程赶上主进程,然后继续。

如果——事务是指定的,未使用。相反,锁定和解锁是通过开始和提交事务实现的。例外情况是——锁是3。

如果——任何事务,则有什么价值吗——锁.看到——(没有)事务

——lock-and-rename

锁定源表和目标表,同步,然后交换名称。一旦表之间合理地保持同步(您可以选择通过各种方式来实现,包括转储和重新加载,甚至像pt-archiver这样的东西),这对于较少阻塞的ALTER TABLE非常有用。它需要恰好两个dsn,并假设它们在同一台服务器上,因此它不等待复制或类似的操作。表是用LOCK Tables锁定的。

——密码

简写形式:-p;类型:字符串

连接时使用的密码。如果password包含逗号,则必须用反斜杠转义:" exam,ple "

——pid

类型:字符串

创建给定的PID文件。如果PID文件已经存在,并且其中包含的PID与当前PID不同,该工具将不会启动。但是,如果PID文件存在,并且其中包含的PID不再运行,该工具将用当前的PID覆盖PID文件。当工具退出时,PID文件将自动删除。

——港口

简写形式:-P;类型:int

用于连接的端口号。

——打印

打印将解决差异的查询。

如果你不信任pt-table-sync,或者只是想看看它会做什么,这是一个安全的好方法。这些查询是有效的SQL,如果您想手动同步表,可以自己运行它们。

——recursion-method

类型:数组;默认值:processlist,主机

首选的递归方法用于查找从库。

可能的方法有:

方法使用=============================processlist显示PROCESSLIST主机显示奴隶主机没有找到奴隶

processlist方法是首选的,因为SHOW SLAVE HOSTS不可靠。但是,如果服务器使用非标准端口(不是3306),则需要使用hosts方法。通常pt-table-sync做正确的事情,找到奴隶,但你可以给出一个首选的方法,它将被首先使用。如果没有找到任何slave,则会尝试其他方法。

——取代

编写所有插入而且更新语句是取代

当存在唯一的索引违反时,它会根据需要自动打开。

——复制

类型:字符串

同步该表中列出的不同表。

指定pt-table-sync应检查指定的表以查找不同的数据。该表与pt-table-checksum的同名参数完全相同。也就是说,它包含主服务器和从服务器之间哪些表(以及值范围)不同的记录。

对于显示主从之间差异的每个表和值范围,pt-table-checksum是否将该表与相应的表同步在哪里子句,给它的主人。

这将自动设置——等待到60,并导致在主服务器上而不是从服务器上进行更改。

如果——sync-to-master时,该工具将假定您指定的服务器是从服务器,并像往常一样连接到主服务器进行同步。

否则,它将尝试使用显示PROCESSLIST查找指定服务器的从服务器。如果它无法找到任何奴隶通过显示PROCESSLIST,它将检查显示奴隶主机代替。您必须配置每个从服务器节目主持人report-port还有其他的方法。在找到slave之后,它将检查每个slave上的指定表,以找到需要同步的数据,并进行同步。

该工具首先检查主表的副本,假设主表可能也是从表。任何显示差异的表格都可以在从服务器上同步。例如,假设您的复制设置为A->B, B->C, B->D。假设您使用此参数并指定服务器B。该工具将检查服务器B的表副本。如果它看起来像服务器B在表中的数据test.tbl1与服务器A的副本不同,该工具将不会同步服务器C和D上的该表。

——slave-user

类型:字符串

设置用于连接从服务器的用户。此参数允许您拥有一个在slave上拥有较少权限的不同用户,但该用户必须存在于所有slave上。

——slave-password

类型:字符串

设置用于连接从机的密码。它可以与-slave-user一起使用,并且所有slave上的用户密码必须相同。

——set-vars

类型:数组

的列表中设置MySQL变量变量=值对。

默认情况下,工具集:

wait_timeout10000

在命令行上指定的变量将覆盖这些默认值。例如,指定——set-varswait_timeout = 500的默认值10000

如果无法设置变量,该工具将打印警告并继续。

——套接字

简写形式:-S;类型:字符串

用于连接的套接字文件。

——sync-to-master

将DSN视为从服务器,并将其同步到主服务器。

将指定的服务器视为从服务器。检查显示奴隶状态,连接到服务器的主服务器,并将主服务器作为源服务器,从服务器作为目标服务器。导致在主服务器上进行更改。集——等待默认为60——锁默认为1,并禁用——(没有)事务默认情况下。另请参阅——复制,这会改变该选项的行为。

——表

简写形式:-t;类型:哈希

只同步这个以逗号分隔的表列表。

表名可以用数据库名限定。

——timeout-ok

如果继续——等待失败。

如果你指定——等待在等待超时之前,从服务器没有赶上主服务器的位置,默认行为是中止。这个选项使工具继续运行。警告:如果您试图在两个服务器之间进行一致的比较,您可能不想在超时后继续进行。

——(没有)事务

使用事务而不是

开始和提交事务的粒度由——锁.默认情况下是启用的,但由于——锁默认情况下是禁用的,它没有效果。

大多数启用锁定的选项默认情况下也禁用事务,因此如果您想使用事务锁定(通过分享模式而且更新,你必须指定——事务明确。

如果你不详细说明——事务显式地pt-table-sync将在每个表的基础上决定是使用事务锁还是表锁。它目前在InnoDB表上使用事务,在所有其他表上使用表锁。

如果——任何事务,则pt-table-sync不使用事务(甚至对InnoDB表也不),锁是由——锁

启用时(显式或隐式),将设置事务隔离级别可重复的事务开始了一致的快照

——修剪

削减()VARCHARBIT_XOR而且ACCUM模式。帮助比较MySQL 4.1和>= 5.0。

当您不关心MySQL版本之间尾随空格的差异时,这是有用的,因为MySQL版本对尾随空格的处理不同。MySQL 5.0及以上版本中都保留尾随空格VARCHAR,而以前的版本会删除它们。

——[不]unique-checks

默认值:是的

启用唯一密钥检查(UNIQUE_CHECKS = 1).

指定——no-unique-checksUNIQUE_CHECKS = 0

——用户

简写形式:-u;类型:字符串

如果不是当前用户,则为登录用户。

——详细

简写形式:-v;累积:是的

打印同步操作的结果。

有关输出的更多细节,请参阅“OUTPUT”。

——版本

显示版本并退出。

——(没有)版本检查

默认值:是的

检查最新版本的Percona Toolkit、MySQL和其他程雷竞技下载官网序。

这是一个标准的“自动检查更新”功能,还有两个附加功能。首先,该工具检查自己的版本,以及以下软件的版本:操作系统、Percona监控和管理(PMM)、MySQL、Perl、MySQL Perl驱动程序(DBD:: MySQL)和Percona Toolkit。雷竞技下载官网raybet雷竞技竞猜在线官网其次,它检查并警告存在已知问题的版本。例如,MySQL 5.5.25有一个严重的错误,并重新发布为5.5.25a。

通过与Percona的Version Chec雷竞技下载官网k数据库服务器的安全连接来执行这些检查。服务器记录每个请求,包括软件版本号和所检查系统的唯一ID。该ID由Percona Toolkit安装脚本或第一次雷竞技下载官网调用Version Check数据库时生成。

在工具正常输出之前,任何更新或已知问题都打印到STDOUT。该特性不应干扰工具的正常操作。

更多信息,请访问https://www.雷竞技下载官网percona.com/doc/percona-toolkit/LATEST/version-check.html

——等待

简写形式:-w;类型:时间

奴隶们要等多久才能追上他们的主人。

在比较表之前,让主服务器等待从服务器完成复制。该值是在超时前等待的秒数(请参见——timeout-ok).集——锁到1和——(没有)事务默认为0。如果您看到如下错误,

MASTER_POS_WAIT返回-1

这意味着超过了超时,您需要增加超时时间。

该选项的默认值受其他选项的影响。要查看有效的值是什么,运行——帮助

要完全禁用等待(锁除外),请指定——等待0.当从服务器在未同步的表上滞后时,这将有所帮助。

——

类型:字符串

在哪里子句将同步限制到表的一部分。

——[不]zero-chunk

默认值:是的

为等价值为零或零的行添加一个块。只有在有效果的时候——块大小都是确定的。零块的目的是捕获潜在的大量零值,这将使第一个块的大小不平衡。例如,如果将大量负数插入到无符号整数列中,导致它们被存储为零,那么这些零值将由零块捕获,而不是由第一个块及其所有非零值捕获。

DSN选项

这些DSN选项用于创建DSN。每个选项给出如下选项=值.选项是区分大小写的,所以P和P不是同一个选项。的前面或后面不能有空格如果值包含空格,则必须加引号。DSN选项以逗号分隔。详细信息请参阅p雷竞技下载官网ercona-toolkit manpage。

  • 一个

dsn:字符集;复制:是的

默认字符集。

  • D

dsn:数据库;复制:是的

包含要同步的表的数据库。

  • F

dsn: mysql_read_default_file;复制:是的

只从给定文件中读取默认选项

  • h

dsn:主机;复制:是的

连接到主机。

  • p

dsn:密码;复制:是的

连接时使用的密码。如果password包含逗号,则必须用反斜杠转义:" exam,ple "

  • P

dsn:港口;复制:是的

用于连接的端口号。

  • 年代

dsn: mysql_socket;复制:是的

用于连接的套接字文件。

  • t

复制:是的

表要同步。

  • u

dsn:用户;复制:是的

如果不是当前用户,则为登录用户。

环境

环境变量PTDEBUG打开详细调试输出到STDERR。要启用调试并将所有输出捕获到一个文件,运行如下工具:

PTDEBUG1pt-table-sync...>文件2>1

注意:调试输出是大量的,可能会产生几兆字节的输出。

注意

使用可能会暴露密码。启用调试时,所有命令行参数都显示在输出中。

系统需求

您需要Perl、DBI、DBD::mysql和一些核心包,这些包应该安装在任何合理的Perl新版本中。

错误

有关已知错误的列表,请参见https://jira.雷竞技下载官网percona.com/projects/PT/issues

请在https://jira.雷竞技下载官网percona.com/projects/PT.在错误报告中包含以下信息:

  • 用于运行工具的完整命令行

  • 工具——版本

  • 所有涉及的服务器的MySQL版本

  • 工具的输出,包括STDERR

  • 输入文件(日志/转储/配置文件等)

如果可能,通过运行工具包含调试输出PTDEBUG;看到“环境”。

下载

访问http://www.雷竞技下载官网percona.com/software/percona-toolkit/下载最新版本的Percona Toolkit。雷竞技下载官网或者,从命令行获取最新版本:

wget雷竞技下载官网percona.com/get/percona-toolkit.tar.gz wget雷竞技下载官网percona.com/get/percona-toolkit.rpm wget雷竞技下载官网percona.com/get/percona-toolkit.deb

您还可以从最新版本中获得单独的工具:

wget雷竞技下载官网percona.com/get/TOOL

取代工具使用任何工具的名称。

作者

施瓦兹男爵

致谢

我的工作部分基于Giuseppe Maxia关于分布式数据库的工作,http://www.sysadminmag.com/articles/2004/0408/以及源自那篇文章的代码。有更多的解释和代码链接,在http://www.perlmonks.org/?node_id=381053

另一个程序员进一步扩展了Maxia的工作。Fabien Coelho改变并推广了Maxia的技术,引入对称性并避免了一些可能导致过于频繁的校验和碰撞的问题。这项工作发展为pg_comparator,http://www.coelho.net/pg_comparator/.Coelho还在题为“数据库表的远程比较”的论文中进一步解释了该技术(http://cri.ensmp.fr/classement/doc/A-375.pdf).

现有的文献主要讨论了如何找到表之间的差异,而不是如何解决发现的差异。我需要一种工具,它不仅能有效地发现问题,而且还能解决问题。我首先开始思考如何在我的文章中进一步改进这项技术https://web.archive.org/web/20071018105253/http://www.xaprb.com/blog/2007/03/05/an-algorithm-to-find-and-resolve-data-differences-between-mysql-tables/,在那里我讨论了一些关于Maxia/Coelho“自下而上”算法的问题。写完那篇文章后,我开始编写这个工具。我想通过一些改进来实现他们的算法,所以我确信我完全理解了它。我发现它不是我想的那样,而且比我最初看到的要复杂得多。Fabien Coelho很友好地通过电子邮件回答了一些问题。

这个工具的第一个版本实现了Coelho/Maxia算法的一个版本,我称之为“自下而上”,我自己的版本称为“自上而下”。这些算法比当前的算法要复杂得多,我已经把它们从这个工具中删除了,以后可能会把它们加回来。对自底向上算法的改进是我的原创工作,自顶向下算法也是如此。实际上解决这些差异的技术也是我自己的工作。

另一个可以同步表的工具是webyog中的SQLyog Job Agent。感谢SJA的作者Rohit Nadhani关于一般技术的对话。有一个比较pt-table-sync和SJA在https://web.archive.org/web/20070919024435/http://www.xaprb.com/blog/2007/04/05/mysql-table-sync-vs-sqlyog-job-agent/

感谢以下个人和组织在许多方面给予的帮助:

瑞姆-考夫曼集团http://www.rimmkaufman.com/, MySQL ABhttp://www.mysql.com/蓝岭互联网络公司http://www.briworks.com/, 雷竞技下载官网Perconahttp://www.雷竞技下载官网percona.com/, Fabien Coelho, Giuseppe Maxia和MySQL AB的其他人,Kristian Koehntopp (MySQL AB), Rohit Nadhani (WebYog), Perlmonks的热心僧侣,以及其他不计其数的人。

关于perc雷竞技下载官网ona工具箱

该工具是Percona Toolkit的一雷竞技下载官网部分,是Percona开发的MySQL高级命令行工具的集合。雷竞技下载官网Percona Toolkit在2011年6月从两个项目中分叉出来:Maatkit和Aspersa。这些项目是由Baron Schwartz创建的,主要由他和Daniel Nichter开发。访问http://www.雷竞技下载官网percona.com/software/以了解Percona的其他免费开源软件。雷竞技下载官网

版本

pt-table-sync3.5.2

Baidu
map