【MySQL工具】pt-archiver

目录

名称

概述

示例

风险

描述

OUTPUT(输出)

ERROR-HANDLING(错误处理)

选项说明


名称

pt-archiver - 将MySQL表中的行归档到另一个表或文件中。

概述

用法:pt-archiver [选项] --source DSN --where WHERE
pt-archiver 从MySQL表中逐条处理记录。--source 和 --dest 参数使用DSN(数据源名称)语法;如果COPY设置为yes,则--dest默认为--source中键的值。

示例

将所有行从oltp_server归档到olap_server和文件中:

pt-archiver --source h=oltp_server,D=test,t=tbl --dest h=olap_server \--file '/var/log/archive/%Y-%m-%d-%D.%t'                           \--where "1=1" --limit 1000 --commit-each

从子表中清除(删除)孤立行:

pt-archiver --source h=host,D=db,t=child --purge \--where 'NOT EXISTS(SELECT * FROM parent WHERE col=child.col)'

风险


Percona Toolkit是一个成熟、经过实际验证且经过充分测试的工具,但所有数据库工具都可能对系统和数据库服务器构成风险。在使用此工具之前,请:

  • 阅读工具的文档
  • 查看工具的已知“BUG”
  • 在非生产服务器上测试工具
  • 备份生产服务器并验证备份

描述


pt-archiver是用于归档表的工具,如归档和清除SQL作业的高效编写方法所述。目标是实现一个低影响、单向作业,以逐步从表中移出旧数据,同时尽可能不影响OLTP查询。您可以将数据插入到另一个表中(该表不必位于同一服务器上)。您也可以将数据写入适合LOAD DATA INFILE格式的文件中。或者,您什么也不做,在这种情况下,它只是一个增量DELETE。

pt-archiver可通过插件机制进行扩展。您可以注入自己的代码,以添加高级归档逻辑,这对于归档相关数据、应用复杂的业务规则或在归档过程中构建数据仓库可能很有用。

您需要仔细选择某些选项的值。最重要的是--limit、--retries和--txn-size。

策略是找到第一行(或多行),然后向前扫描某个索引以更有效地找到更多行。每个后续查询都不应扫描整个表;它应该在索引中查找,然后扫描,直到找到更多可归档的行。使用--source参数的“i”部分指定索引可能对此至关重要;使用--dry-run来检查生成的查询,并确保EXPLAIN它们以查看它们是否高效(大多数情况下,您可能希望扫描主键,这是默认值)。更好的做法是,在运行查询之前和之后检查处理程序状态计数器的差异,并确保每个查询都没有扫描整个表。

您可以通过--no-ascend和--ascend-first部分或完全禁用查找然后扫描的优化。有时,对于多列键,这可能更高效。请注意,pt-archiver旨在从它选择的索引的开头开始,并仅向前扫描。如果您尝试通过它偏好的索引之外的其他索引从表末尾逐条处理,这可能会导致长时间的表扫描。如果这适用于您,请参阅--source并阅读关于i部分的文档。

OUTPUT(输出)

如果指定了--progress(进度)选项,输出将包含一行表头,以及间隔性的状态输出。状态输出的每一行都会列出当前的日期和时间、pt-archiver已经运行了多少秒,以及已经归档了多少行。

如果指定了--statistics(统计信息)选项,pt-archiver将输出时间和其他信息,以帮助您确定归档过程中哪个部分耗时最多。

ERROR-HANDLING(错误处理)

pt-archiver会尝试捕获信号并优雅地退出;例如,如果您向它发送SIGTERM信号(在类UNIX系统上按Ctrl-C),它将捕获该信号,打印一条关于信号的消息,并相对正常地退出。它不会执行--analyze(分析)或--optimize(优化)操作,因为这些操作可能需要很长时间才能完成。它会正常运行所有其他代码,包括调用任何插件的after_finish()方法(见“扩展”)。

换句话说,如果捕获到信号,将跳出主归档循环并跳过优化/分析步骤。

选项说明

  • 至少指定 --dest--file 或 --purge 中的一个。
  • --ignore 和 --replace 互斥。
  • --txn-size 和 --commit-each 互斥。
  • --low-priority-insert 和 --delayed-insert 互斥。
  • --share-lock 和 --for-update 互斥。
  • --analyze 和 --optimize 互斥。
  • --no-ascend 和 --no-delete 互斥。
  • 在 --dest 中的 DSN 值如果 COPY 设置为是,则默认为 --source 的值。

--analyze


类型:字符串

在 --source 和/或 --dest 上运行 ANALYZE TABLE

完成后运行 ANALYZE TABLE。参数是一个任意字符串。如果包含字母 's',则分析源;如果包含 'd',则分析目标。可以指定其中一个或两者。例如,以下将分析两者:

--analyze=ds
有关 ANALYZE TABLE 的详细信息,请参见 MySQL :: MySQL 8.4 Reference Manual :: 15.7.3.1 ANALYZE TABLE Statement。

--ascend-first


仅对索引的第一列进行升序扫描。

如果希望使用升序索引优化(参见 --no-ascend),但不想承担对大型多列索引进行升序扫描的开销,可以使用此选项告诉 pt-archiver 仅对索引的最左列进行升序扫描。这可以在不进行任何升序扫描的情况下提供显著的性能提升,同时避免了对整个索引进行升序扫描的成本。

有关此选项与插件如何交互的讨论,请参阅“EXTENDING”。

--ask-pass


连接到 MySQL 时提示输入密码。

--buffer


将输出缓冲到 --file 并在提交时刷新。

禁用自动刷新到 --file,并且仅在事务提交时将 --file 刷新到磁盘。这通常意味着文件由操作系统进行块刷新,因此在提交之间也可能会有一些隐式刷新到磁盘。默认是在每行之后将 --file 刷新到磁盘。

危险在于崩溃可能会导致数据丢失。

使用 --buffer 带来的性能提升大约在 5% 到 15% 之间。具体效果可能因情况而异。

--bulk-delete


使用单个语句删除每个块(暗示 --commit-each)。

使用单个 DELETE 语句批量删除每个块的行。该语句删除块中第一行和最后一行之间的所有行(包括这两行)。它暗示 --commit-each,因为逐行插入并提交行然后再进行批量删除是一个糟糕的想法。

通常的方法是通过主键删除每一行。批量删除可能会快得多。但是,如果有一个复杂的 WHERE 子句,则可能并不会更快。

此选项完全延迟所有 DELETE 处理,直到块的行处理完成。如果在源上有插件,其 before_delete 方法将不会被调用。相反,稍后会调用其 before_bulk_delete 方法。

警告:如果在源上有插件有时在 is_archivable() 中不返回 true,则只有在了解其行为的情况下才应使用此选项。如果插件指示 pt-archiver 不归档一行,它仍然会被批量删除!

--[no]bulk-delete-limit
默认:是

向 --bulk-delete 语句添加 --limit

这是一个高级选项,除非您知道自己在做什么以及为什么要这样做,否则不应禁用它!默认情况下,--bulk-delete 会向批量删除 SQL 语句附加一个 --limit 子句。在某些情况下,可以通过指定 --no-bulk-delete-limit 来省略此子句。但是,仍然必须指定 --limit

--bulk-insert


使用 LOAD DATA INFILE 插入每个块(暗示 --bulk-delete --commit-each)。

使用 LOAD DATA LOCAL INFILE 插入每个块的行。这可能比使用 INSERT 语句逐行插入要快得多。它是通过为每个块的行创建一个临时文件并将行写入该文件(而不是插入它们)来实现的。当块完成时,它会上传这些行。

为了保护数据的安全性,此选项强制使用批量删除。在将行插入目标之前逐行删除它们是不安全的。强制使用批量删除可以确保删除操作会等到插入操作成功为止。

--low-priority-insert--replace 和 --ignore 选项与此选项一起工作,但 --delayed-insert 不行。

如果 LOAD DATA LOCAL INFILE 抛出错误,如“所用命令不允许与此 MySQL 版本一起使用”,请参阅 L DSN 选项的文档。

--channel

类型:字符串

在使用复制通道连接到服务器时使用的通道名称。假设你有两个主服务器,master_a 在端口 12345,master_b 在端口 1236,并且有一个从服务器通过通道 chan_master_a 和 chan_master_b 连接到这两个主服务器。如果你想运行 pt-archiver 来将从服务器与 master_a 同步,pt-archiver 将无法确定哪个是正确的主服务器,因为 SHOW SLAVE STATUS 会返回两行。在这种情况下,你可以使用 --channel=chan_master_a 来指定在 SHOW SLAVE STATUS 命令中使用的通道名称。

--charset

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

默认字符集。如果值是 utf8,则将 Perl 的 binmode 设置为 utf8 输出,将 mysql_enable_utf8 选项传递给 DBD::mysql,并在连接到 MySQL 后运行 SET NAMES UTF8。任何其他值都会在没有 utf8 层的情况下设置 binmode 输出,并在连接到 MySQL 后运行 SET NAMES。

请注意,只有 MySQL 已知的字符集才会被识别;例如,“UTF8”有效,但“UTF-8”无效。

另请参阅 --[no]check-charset。

--[no]check-charset

默认值:是

确保连接和表的字符集相同。禁用此检查可能会导致文本错误地从一种字符集转换为另一种字符集(通常是从 utf8 转换为 latin1),这可能会导致数据丢失或乱码。当需要进行字符集转换时,禁用此检查可能是有用或必要的。

--[no]check-columns

默认值:是

确保 --source 和 --dest 具有相同的列。

默认情况下启用;使 pt-archiver 检查源表和目的表是否具有相同的列。它不检查列顺序、数据类型等。它只是检查源表中的所有列是否存在于目的表中,反之亦然。如果存在任何差异,pt-archiver 将以错误退出。

要禁用此检查,请指定 --no-check-columns。

--check-interval

类型:时间;默认值:1s

如果给出了 --check-slave-lag,这定义了当发现从服务器滞后时工具暂停的时间。这个检查每 100 行执行一次。

--check-slave-lag

类型:字符串;可重复:是

在指定的 DSN 的从服务器滞后小于 --max-lag 之前暂停归档。此选项可以指定多次以检查多个从服务器。

--columns

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

要归档的列的逗号分隔列表。

指定一个逗号分隔的列列表来检索、写入文件并插入到目的表中。如果指定了此选项,pt-archiver 将忽略其他列,除非它需要将它们添加到 SELECT 语句中以升序索引或删除行。它内部检索和使用这些额外的列,但不会将它们写入文件或目的表。它会将它们传递给插件。

另请参阅 --primary-key-only。

--commit-each

提交每组检索和归档的行(禁用 --txn-size)。

在每组行归档后、检索下一组行之前以及如果指定了 --sleep 则在休眠之前,提交事务并刷新 --file。禁用 --txn-size;使用 --limit 与 --commit-each 一起控制事务大小。

此选项用作快捷方式,使 --limit 和 --txn-size 具有相同的值,但更重要的是,它避免了在搜索更多行时保持事务打开。例如,假设你正在从非常大的表的开头归档旧行,使用 --limit 1000 和 --txn-size 1000。在一段时间内每次找到并归档 1000 行后,pt-archiver 找到最后 999 行并将它们归档,然后执行下一个 SELECT 以查找更多行。这会扫描表的其余部分,但找不到更多行。它已长时间保持事务打开,但最终还是确定完成了。你可以使用 --commit-each 来避免这种情况。

--config

类型:数组

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

--database

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

连接到此数据库。

--delayed-insert

向 INSERT 语句添加 DELAYED 修饰符。

向 INSERT 或 REPLACE 语句添加 DELAYED 修饰符。有关详细信息,请参阅 http://dev.mysql.com/doc/en/insert.html。

--dest

类型:DSN

指定要归档到的表的 DSN。

此项目指定 pt-archiver 将从中归档的 --source 行插入到的表。它使用与 --source 相同的 key=val 参数格式。大多数缺失值默认为与 --source 相同的值,因此你不需要重复在 --source 和 --dest 中相同的选项。使用 --help 选项查看哪些值是从 --source 复制的。

警告:使用定义 --source 套接字的默认选项文件(F)DSN 选项会导致 pt-archiver 在连接到 --dest 时使用该套接字,除非为 --dest 指定了另一个套接字。这意味着 pt-archiver 在连接到 --dest 时可能会错误地连接到 --source。例如:

--source F=host1.cnf,D=db,t=tbl --dest h=host2
当 pt-archiver 连接到 --dest,即 host2 时,它将通过 --source,即 host1,在 host1.cnf 中定义的套接字进行连接。

--dry-run

打印查询语句并退出,不进行任何操作。

使pt-archiver在打印将要使用的文件名和SQL语句后退出。

--file


类型:字符串

要归档的文件,支持DATE_FORMAT()类似的格式化。

归档行要写入的文件名。文件名中允许使用MySQL DATE_FORMAT()格式化代码的子集,如下所示:

%d 月份中的天数,数字(01..31)
%H 小时(00..23)
%i 分钟,数字(00..59)
%m 月份,数字(01..12)
%s 秒(00..59)
%Y 年份,数字,四位
您还可以使用以下额外的格式代码:

%D 数据库名
%t 表名
示例:

--file '/var/log/archive/%Y-%m-%d-%D.%t'
文件的内容格式与MySQL手册中记录的SELECT INTO OUTFILE相同:行以换行符终止,列以制表符终止,NULL字符表示为\N,特殊字符通过\进行转义。这使得您可以使用LOAD DATA INFILE的默认设置重新加载文件。

如果您希望在文件顶部有一个列标题,请参阅--header。文件默认自动刷新;请参阅--buffer。

--for-update


向SELECT语句添加FOR UPDATE修饰符。

详细信息,请参阅http://dev.mysql.com/doc/en/innodb-locking-reads.html。

--header


在--file文件的顶部打印列标题。

将列名作为给定--file文件的第一行写入。如果文件已存在,则不写入标题;这保持文件可以通过LOAD DATA INFILE加载,以防您向其中追加更多输出。

--help


显示帮助并退出。

--high-priority-select
向SELECT语句添加HIGH_PRIORITY修饰符。

详细信息,请参阅http://dev.mysql.com/doc/en/select.html。

--host


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

连接到主机。

--ignore


为INSERT语句使用IGNORE。

导致--dest的INSERT操作变为INSERT IGNORE。

--limit


类型:整数;默认值:1

每次语句获取并归档的行数。

限制检索要归档行的SELECT语句返回的行数。默认是一行。增加限制可能会更有效,但如果您在归档时稀疏地跳过许多行,请小心;这可能会根据存储引擎、事务隔离级别和选项(如--for-update)与其他查询产生更多的争用。

--local


不要将OPTIMIZE或ANALYZE查询写入binlog。

向ANALYZE和OPTIMIZE查询添加NO_WRITE_TO_BINLOG修饰符。详细信息,请参阅--analyze。

--low-priority-delete


向DELETE语句添加LOW_PRIORITY修饰符。

详细信息,请参阅http://dev.mysql.com/doc/en/delete.html。

--low-priority-insert
向INSERT或REPLACE语句添加LOW_PRIORITY修饰符。

详细信息,请参阅http://dev.mysql.com/doc/en/insert.html。

--max-flow-ctl


类型:浮点数

对于PXC集群,与–max-lag有些相似。检查集群因Flow Control而暂停的平均时间,如果超过了选项中指定的百分比,则使工具暂停。默认不进行Flow Control检查。此选项适用于PXC版本5.6或更高版本。

--max-lag


类型:时间;默认值:1s

如果由--check-slave-lag指定的从库落后,则暂停归档。

此选项使pt-archiver在每次准备获取另一行时检查从库。如果从库的延迟大于选项的值,或者从库未运行(因此其延迟为NULL),则pt-archiver将休眠--check-interval秒,然后再次检查延迟。它重复此操作,直到从库赶上,然后继续获取并归档该行。

此选项可能消除了对--sleep或--sleep-coef的需要。

--no-ascend

不使用升序索引优化。

默认的升序索引优化使pt-archiver优化重复的SELECT查询,使其在上一个查询结束的地方开始查找索引,然后沿着索引扫描,而不是每次都从表的开头开始扫描。这通常是重复访问的好策略,因此默认启用。

大型多列索引可能会导致WHERE子句变得足够复杂,以至于这种优化实际上可能效率更低。例如,考虑一个四列的主键(a, b, c, d)。要在上一个查询结束的地方开始的WHERE子句如下:

 
WHERE (a > ?)
OR (a = ? AND b > ?)
OR (a = ? AND b = ? AND c > ?)
OR (a = ? AND b = ? AND c = ? AND d >= ?)

用值填充占位符会使用内存和CPU,增加网络流量和解析开销,并可能使MySQL优化查询变得更加困难。四列键并不是大问题,但如果是一个允许每列都为NULL的十列键,就可能成为问题。

如果你知道只是以块的形式从表开头删除行,并且不留任何空洞,那么升序索引可能不是必需的,因为实际上从表开头开始是最有效的做法。

另请参阅--ascend-first。有关此选项与插件如何交互的讨论,请参阅“EXTENDING”部分。

--no-delete

不删除归档的行。

导致pt-archiver在处理完行后不删除它们。这不允许使用--no-ascend,因为同时启用它们会导致无限循环。

如果源DSN上有插件,则会调用其before_delete方法,即使pt-archiver不会执行删除操作。有关插件的更多信息,请参阅“EXTENDING”。

--optimize

类型:字符串

--source和/或--dest上运行OPTIMIZE TABLE

在完成后运行OPTIMIZE TABLE。有关选项语法的详细信息,请参阅--analyze,有关OPTIMIZE TABLE的详细信息,请参阅http://dev.mysql.com/doc/en/optimize-table.html。

--output-format

类型:字符串

--file一起使用以指定输出格式。

有效格式包括:

  • dump:使用制表符作为字段分隔符的MySQL转储格式(默认)
  • csv:使用逗号作为分隔符,并可选地用引号括起字段。此格式等效于FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'

--password

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

连接时使用的密码。如果密码包含逗号,必须使用反斜杠进行转义:“exam,ple”

--pid

类型:字符串

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

--plugin

类型:字符串

用作通用插件的Perl模块名称。

指定通用插件的Perl模块名称。它目前仅用于统计信息(请参阅--statistics),并且必须具有new()statistics()方法。

new(src => $src, dst => $dst, opts => $o)方法获取源和目标DSN以及它们的数据库连接,就像连接特定的插件一样。它还获取一个OptionParser对象($o)以访问命令行选项(例如:$o->get('purge'))。

statistics(\%stats, $time)方法获取归档作业收集的统计信息的哈希引用以及整个作业开始的时间。

--port

简写形式:-P;类型:整数

连接使用的端口号。

--primary-key-only

仅主键列。

指定--columns时使用主键列的快捷方式。如果你只想清除行,这是一种提高效率的方法;它避免了在只需要主键列用于DELETE语句时从服务器获取整行。另请参阅--purge

--progress

类型:整数

每X行打印一次进度信息。

每X行打印当前时间、已用时间和已归档的行数。

--purge

清除而不是归档;允许省略--file--dest

允许在没有--file--dest参数的情况下进行归档,这实际上是一种清除操作,因为行只是被删除。

如果你只想清除行,请考虑使用--primary-key-only指定表的主键列。这将防止无理由地从服务器获取所有列。

--quick-delete

DELETE语句添加QUICK修饰符。

有关详细信息,请参阅http://dev.mysql.com/doc/en/delete.html。如文档中所述,在某些情况下,使用DELETE QUICK后跟OPTIMIZE TABLE可能更快。你可以使用--optimize来做到这一点。

--quiet

简写形式:-q

不打印任何输出,例如--statistics的输出。

抑制正常输出(包括--statistics的输出),但不抑制--why-quit的输出。

--replace

导致插入到--destINSERT被写为REPLACE

--retries

类型:整数;默认值:1

每次超时或死锁的重试次数。

指定在InnoDB锁等待超时或死锁时pt-archiver应重试的次数。重试次数用尽后,pt-archiver将带着错误退出。

在混合使用事务存储引擎和非事务存储引擎之间进行归档时,请仔细考虑你希望发生的事情。到--destINSERT和从--sourceDELETE是在不同的连接上进行的,因此即使它们在同一服务器上,也不会实际参与同一事务。但是,pt-archiver在代码中实现了简单的分布式事务,因此两个连接上的提交和回滚应该按预期发生。

目前,我还没有编写任何代码来处理除InnoDB之外的事务存储引擎的错误。如果你需要这个功能,请提出请求。

--run-time

类型:时间

在退出前运行的时间。

可选后缀s=秒,m=分钟,h=小时,d=天;如果没有后缀,则使用s。

--[no]safe-auto-increment

默认值:是

不归档具有最大AUTO_INCREMENT的行。

添加一个额外的WHERE子句,以防止pt-archiver在升序单列AUTO_INCREMENT键时删除最新的行。这可以防止在服务器重启时重用AUTO_INCREMENT值,并且默认启用。

额外的WHERE子句包含归档或清除作业开始时自动递增列的最大值。如果pt-archiver运行时插入了新行,它将看不到这些新行。

--sentinel

类型:字符串;默认值:/tmp/pt-archiver-sentinel

如果此文件存在则退出。

由--sentinel指定的文件如果存在,会导致pt-archiver停止归档并退出。默认值是/tmp/pt-archiver-sentinel。如果需要,您可能会发现这在优雅地停止cron作业时非常有用。另请参阅--stop。

--slave-user

类型:字符串

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

--slave-password

类型:字符串

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

--set-vars

类型:数组

在此以逗号分隔的变量=值对列表中设置MySQL变量。

默认情况下,该工具设置:

wait_timeout=10000

命令行上指定的变量会覆盖这些默认值。例如,指定--set-vars wait_timeout=500会覆盖默认值10000。

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

--share-lock

向SELECT语句添加LOCK IN SHARE MODE修饰符。

参见http://dev.mysql.com/doc/en/innodb-locking-reads.html。

--skip-foreign-key-checks

使用SET FOREIGN_KEY_CHECKS=0禁用外键检查。

--sleep

类型:整数

抓取之间的睡眠时间。

指定SELECT语句之间的睡眠时间。默认是不睡眠。在睡眠之前,事务不会被提交,--file文件也不会被刷新。请参见--txn-size以控制这些行为。

如果指定了--commit-each,则会在睡眠之前进行提交和刷新。

--sleep-coef

类型:浮点数

将--sleep计算为最后一个SELECT时间的倍数。

如果指定了此选项,pt-archiver将睡眠的时间为最后一个SELECT查询时间乘以指定的系数。

这是一种稍微复杂一些的SELECT节流方式:在每次SELECT之间睡眠不同的时间,具体取决于SELECT花费的时间。

--socket

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

用于连接的套接字文件。

--source

类型:DSN

指定要从中归档的表的DSN(必需)。此参数是一个DSN。请参阅DSN选项的语法。大多数选项控制pt-archiver如何连接到MySQL,但此工具的语法中有一些扩展的DSN选项。D、t和i选项选择要归档的表:

--source h=my_server,D=my_database,t=my_tbl

a选项指定要设置为连接默认值的数据库(使用USE)。如果b选项为true,则使用SQL_LOG_BIN禁用二进制日志。m选项指定可插拔操作,外部Perl模块可以提供这些操作。唯一必需的部分是表;其他部分可能从环境(如选项文件)中的各种位置读取。

特别值得一提的是'i'部分。这告诉pt-archiver它应该扫描哪个索引以进行归档。这将在用于获取可归档行的SELECT语句中出现为FORCE INDEX或USE INDEX提示。如果不指定任何内容,pt-archiver将自动发现一个好的索引,如果存在主键,则优先使用主键。根据我的经验,这通常效果很好,所以大多数时候您可能只需要省略'i'部分。

索引用于优化对表的重复访问;pt-archiver会记住它从每个SELECT语句中检索到的最后一行,并使用它来构造一个WHERE子句,该子句使用指定索引中的列,应允许MySQL从上一个SELECT结束的地方开始下一个SELECT,而不是可能每次连续的SELECT都从表的开头开始扫描。如果您正在使用外部插件,请参阅“EXTENDING”以了解它们如何与升序索引交互。

'a'和'b'选项允许您控制语句如何流经二进制日志。如果指定了'b'选项,则会在指定的连接上禁用二进制日志记录。如果指定了'a'选项,则连接将USE指定的数据库,您可以使用它来防止从服务器使用--replicate-ignore-db选项执行二进制日志事件。这两个选项可以用作实现相同目标的不同方法:从主服务器归档数据,但将其保留在从服务器上。例如,您可以在主服务器上运行清除作业,并使用您选择的方法阻止它在从服务器上发生。

警告:使用定义用于--source的套接字的默认选项文件(F)DSN选项会导致pt-archiver在未为--dest指定另一个套接字的情况下使用该套接字连接到--dest。这意味着pt-archiver可能会错误地连接到--source,而它本应连接到--dest。例如:

--source F=host1.cnf,D=db,t=tbl --dest h=host2

当pt-archiver连接到--dest(host2)时,它将通过--source(host1)在host1.cnf中定义的套接字进行连接。

--statistics

收集并打印时间统计信息。

使pt-archiver收集有关其所做工作的时间统计信息。这些统计信息可供--plugin指定的插件使用。

除非您指定了--quiet,否则pt-archiver会在退出时打印统计信息。统计信息如下所示:

Started at 2008-07-18T07:18:53, ended at 2008-07-18T07:18:53
Source: D=db,t=table
SELECT 4
INSERT 4
DELETE 4
Action         Count       Time        Pct
commit            10     0.1079      88.27
select             5     0.0047       3.87
deleting           4     0.0028       2.29
inserting          4     0.0028       2.28
other              0     0.0040       3.29

前两行(或三行)显示时间和源表及目标表。接下来的三行显示检索、插入和删除的行数。

剩余的行显示计数和时间。列分别是操作、该操作被计时的总次数、总耗时以及程序总运行时间的百分比。行按总时间的降序排序。最后一行是未明确归因于任何操作的其他时间。操作将根据命令行选项而有所不同。

如果给出了--why-quit,则其行为会略有不同。此选项会导致它在仅因为没有更多行时也打印退出原因。

此选项需要标准Time::HiRes模块,该模块是较新Perl版本核心的一部分。

--stop


通过创建哨兵文件来停止正在运行的实例。

使pt-archiver创建由--sentinel指定的哨兵文件并退出。这应该会停止所有正在监视相同哨兵文件的其他运行实例。另见--unstop。

--txn-size


类型:int;默认值:1

每事务的行数。

指定每个事务的行数大小。将此值设置为0将完全禁用事务。pt-archiver处理完这么多行后,会提交--source和(如果指定了的话)--dest,并刷新由--file指定的文件。

此参数对性能至关重要。如果您正在从正在执行大量联机事务处理(OLTP)工作的实时服务器上归档数据,则需要在事务大小和提交开销之间找到一个良好的平衡。较大的事务可能会导致更多的锁争用和死锁,但较小的事务会导致更频繁的提交开销,这可能会很显著。举个例子,在编写pt-archiver时,我使用了一个小测试集,其中值为500时,在一个否则安静的MySQL实例上,将数据归档到磁盘和另一个表中,每1000行大约需要2秒。而将事务禁用(值为0,启用自动提交)后,性能下降到每千行38秒。

如果您不是从或向事务存储引擎归档数据,您可能希望禁用事务,以便pt-archiver不会尝试提交。

--unstop


删除哨兵文件

使pt-archiver删除由--sentinel指定的哨兵文件并继续执行。另见--stop。

--user


简写形式:-u;类型:string

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

--version


显示版本并退出。

--[no]version-check


默认值:yes

检查Percona Toolkit、MySQL和其他程序的最新版本。

这是一个标准的“自动检查更新”功能,具有两个附加功能。首先,该工具会检查其自身的版本以及以下软件的版本:操作系统、Percona Monitoring and Management(PMM)、MySQL、Perl、Perl的MySQL驱动程序(DBD::mysql)和Percona Toolkit。其次,它会检查并警告存在已知问题的版本。例如,MySQL 5.5.25存在一个严重错误,并作为5.5.25a重新发布。

为了执行这些检查,会与Percona的版本检查数据库服务器建立安全连接。服务器会记录每个请求,包括软件版本号和检查系统的唯一ID。该ID由Percona Toolkit安装脚本生成,或者在第一次进行版本检查数据库调用时生成。

任何更新或已知问题都会在工具的正常输出之前打印到STDOUT。此功能绝不会干扰工具的正常运行。

更多信息,请访问https://www.percona.com/doc/percona-toolkit/LATEST/version-check.html。

--where


类型:string

WHERE子句,用于限制要归档的行(必需)。

指定一个WHERE子句以限制哪些行被归档。不要包含WHERE这个词。您可能需要引用参数以防止shell对其进行解释。例如:

--where 'ts < current_date - interval 90 day'
为了安全起见,--where是必需的。如果您不需要WHERE子句,请使用--where 1=1。

--why-quit


除非行已耗尽,否则打印退出原因。

如果pt-archiver因任何其他原因(而不是要归档的行已耗尽)而退出,则使其打印一条消息。如果您有一个带有--run-time指定的cron作业,并且想要确保pt-archiver在时间用完之前完成,那么这可能会很有用。

如果指定了--statistics,行为会略有改变。即使只是因为没有更多行,它也会打印退出原因。

即使指定了--quiet,此输出也会打印。这样,您可以将pt-archiver放入cron作业中,如果发生异常退出,您会收到一封电子邮件。

DSN选项
这些DSN选项用于创建DSN。每个选项的格式为option=value。选项是区分大小写的,因此P和p不是相同的选项。等号前后不能有空格,如果值包含空格,则必须对其进行引用。DSN选项用逗号分隔。有关详细信息,请参阅percona-toolkit手册页。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/463973.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust 力扣 - 643. 子数组最大平均数 I

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们遍历长度为k的窗口&#xff0c;我们只需要记录窗口内的最大和即可&#xff0c;遍历过程中刷新最大值 结果为窗口长度为k的最大和 除以 k 题解代码 impl Solution {pub fn find_max_average(nums: Vec<…

Vscode使用launch.json进行传参调试代码

目录 1 操作2 后记 1 操作 {// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid830387"version": "0.2.0","…

Fooocus图像生成软件本地部署教程:在Windows上快速上手AI创作

文章目录 前言1. 本地部署Fooocus图像生成软件1.1 安装方式1.2 功能介绍 2. 公网远程访问Fooocus3. 固定Fooocus公网地址 前言 本篇文章将介绍如何在本地Windows11电脑部署开源AI生图软件Fooocus&#xff0c;并结合Cpolar内网穿透工具轻松实现公网环境远程访问与使用。 Foooc…

#渗透测试#SRC漏洞挖掘#自动化脚本的编写01

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

python 使用进程池并发执行 SQL 语句

这段代码使用了 Python 的 multiprocessing 模块来实现真正的并行处理&#xff0c;绕过 Python 的全局解释器锁&#xff08;GIL&#xff09;限制&#xff0c;从而在多核 CPU 上并发执行多个 SQL 语句。 from pyhive import hive import multiprocessing# 建立连接 conn hive.…

SpringBoot+VUE2完成WebSocket聊天(数据入库)

下载依赖 <!-- websocket --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency><!-- MybatisPlus --><dependency><groupId>com.ba…

电子电气架构 --- 车载诊断的快速入门

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…

继承的内容

封装&#xff1a; 1.在类中&#xff0c;把数据和方法放在一起&#xff0c;只展示成员函数&#xff0c;不展示定义的数据为私有。 2.一个类型放到另一个类型里面&#xff0c;通过typedef成员函数调整&#xff0c;封装另一个全新的类型。相当于是一个包装。 继承&#xff1a; st…

设计模式之结构型模式---装饰器模式

目录 1.概述2.类图3.应用场景及优缺点3.1 应用场景3.2 优缺点3.2.1 优点3.2.2 缺点 4.实现4.1 案例类图4.2 代码实现4.2.1 定义抽象构建角色4.2.2 定义具体构建角色4.2.3 定义抽象装饰器角色4.2.4 定义具体装饰角色4.2.5 装饰器模式的使用 1.概述 装饰器模式是指在不改变现有对…

接口测试(十一)jmeter——断言

一、jmeter断言 添加【响应断言】 添加断言 运行后&#xff0c;在【察看结果树】中可得到&#xff0c;响应结果与断言不一致&#xff0c;就会红色标记

vue-i18n国际化多国语言i18n国际语言代码对照表

uniapp是自带有i18n这个插件 需要自己去给每一个需要国际化的字符去手动配置key&#xff0c;所以如果是已经完成的项目可能工作量就稍微有点大了 第一步&#xff1a; 语言命名是有规范的不能乱取名&#xff0c;具体可以参考国际语言代码 i18n国际语言代码对照表 zh_CN 中文(简体…

GitHub | 发布到GitHub仓库并联文件夹的方式

推送到Github 推送步骤如果你只想更新单个文件&#xff0c;只需在第 4 步中指定该文件的路径即可。可能问题一 效果 推送步骤 更新 GitHub 仓库中的文件通常涉及以下步骤&#xff1a; 克隆仓库&#xff1a; 首先&#xff0c;你需要将 GitHub 上的仓库克隆到本地。使用 git …

Docsify文档编辑器:Windows系统下个人博客的快速搭建与发布公网可访问

文章目录 前言1. 本地部署Docsify2. 使用Docsify搭建个人博客3. 安装Cpolar内网穿透工具4. 配置公网地址5. 配置固定公网地址 前言 本文主要介绍如何在Windows环境本地部署 Docsify 这款以 markdown 为中心的文档编辑器&#xff0c;并即时生成您的文档博客网站&#xff0c;结合…

杂货 | 每日资讯 | 2024.11.1

注意&#xff1a;以下内容皆为AI总结 2024年11月1日&#xff0c;人工智能&#xff08;AI&#xff09;领域发生了多项重要事件&#xff0c;标志着技术发展的新阶段。本文将详细探讨以下三大事件&#xff1a; OpenAI为ChatGPT新增搜索功能IEEE发布《2025年及以后的技术影响》报…

RuoYi 样例框架运行步骤(测试项目自用,同学可自取)

目录 后台 API 运行导入&#xff0c;下载包端口号mysql 准备运行 PC&#xff08;电脑端&#xff09;运行安装 nodejs安装 yarn 及其依赖&#xff0c;启动服务登录admin(admin123) 或 ry(admin123) App&#xff08;移动&#xff09;运行下载 HBuilderX运行app运行注意&#xff1…

Puppeteer点击系统:解锁百度流量点击率提升的解决案例

在数字营销领域&#xff0c;流量和搜索引擎优化&#xff08;SEO&#xff09;是提升网站可见性的关键。我开发了一个基于Puppeteer的点击系统&#xff0c;旨在自动化地提升百度流量点击率。本文将介绍这个系统如何通过模拟真实用户行为&#xff0c;优化关键词排名&#xff0c;并…

项目解决方案:跨不同的物理网络实现视频监控多画面的实时视频的顺畅访问

目录 一、碰到的需求问题 二、需求分析 三、方案分析 &#xff08;一&#xff09;方法1&#xff1a;使用HTTP代理 1. 安装HTTP代理服务器 2. 配置Nginx代理 3. 重启Nginx 4. 访问视频流 &#xff08;二&#xff09;方法2&#xff1a;使用反向代理 1. 安装反向代理服务…

MQTT自动发送消息工具(自动化测试MQTT)

点击下载《MQTT客户端服务端工具》 点击下载《MQTT自动发送消息软件(自动化测试MQTT)》 1. 前言 在软件开发过程中&#xff0c;MQTT常被用作消息队列来完成特定的业务功能。当我们将相关业务代码编写完成后&#xff0c;通常需要编写额外的消息生产和消费代码来模拟消息高峰时…

东北虎豹国家公园shp格式范围

东北虎豹国家公园地处中国吉林、黑龙江两省交界的老爷岭南部&#xff08;珲春—汪清—东宁—绥阳&#xff09;区域&#xff0c;东起吉林省珲春林业局青龙台林场&#xff0c;与俄罗斯滨海边疆区接壤&#xff0c;西至吉林省大兴沟林业局岭东林场&#xff0c;南自吉林省珲春林业局…

练习LabVIEW第三十七题

学习目标&#xff1a; 刚学了LabVIEW&#xff0c;在网上找了些题&#xff0c;练习一下LabVIEW&#xff0c;有不对不好不足的地方欢迎指正&#xff01; 第三十七题&#xff1a; 利用XY GRAPH 构成李萨如图形 开始编写&#xff1a; 前面板放一个XY图控件&#xff0c;程序框图…