【MySQL工具】pt-archiver

news2024/11/5 0:45:51

目录

名称

概述

示例

风险

描述

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.coloradmin.cn/o/2232197.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GitHub上传自己的项目

目录 一、安装Git插件 1&#xff09;下载 2&#xff09;安装 二、创建Gothub的创库 三、通过Git上传本地文件到Github 四、其他 1、部分指令 2、如果已经运行过git init并设置了[user]&#xff0c;下次可以直接用 一、安装Git插件 1&#xff09;下载 下载地址&#x…

Spring Boot框架

一.SpringBoot简介 1.1 设计初衷 目前我们开发的过程当中&#xff0c;一般采用一个单体应用的开发采用 SSM等框架进行开发&#xff0c;并在 开发的过程当中使用了大量的xml 等配置文件&#xff0c;以及在开发过程中使用MAVEN的构建工具来进 行构建项目&#xff0c;但是往往有…

【C++】vector 类深度解析:探索动态数组的奥秘

&#x1f31f;快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 &#x1f31f; 如果你对string类还存在疑惑&#xff0c;欢迎阅读我之前的作品 &#xff1a; &#x1f449;【C】string 类深度解析&#xff1a;…

windows——病毒的编写

声明 学习视频来自B 站up主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 windows基础 我们学习了前面的window…

STM32 + CubeMX + 硬件SPI + W5500 +UDP

这篇文章记录一下STM32W5500UDP的调试过程&#xff0c;实现UDP数据的接收与发送。 目录 一、W5500模块介绍二、Stm32CubeMx配置三、Keil代码编写1、添加W5500驱动代码到工程&#xff08;添加方法不赘述&#xff0c;驱动代码可以在官网找&#xff09;2、在工程中增加代码&#…

原来大佬的测试用例都是这样写的...

1、测试点与测试用例 测试点不等于测试用例&#xff0c;这是我们首先需要认识到的。 问题1&#xff1a;这些测试点在内容上有重复&#xff0c;存在冗余。 问题2&#xff1a;一些测试点的测试输入不明确&#xff0c;不知道测试时要测试哪些。 问题3&#xff1a;总是在搭相似…

【论文解读】Med-BERT: 用于疾病预测的大规模结构化电子健康记录的预训练情境化嵌入

【论文解读】Med-BERT: 用于疾病预测的大规模结构化电子健康记录的预训练情境化嵌入 Med-BERT:pretrained contextualized embeddings on large-scale structured electronic health records for disease prediction ​ ​ 摘要:基于电子健康记录(EHR)的深度学习(DL)预…

天锐绿盾加密软件与Ping32 — 数据安全与性能优化的完美结合

在数字化时代&#xff0c;企业对数据安全的重视程度日益增加。随着网络攻击和数据泄漏事件频发&#xff0c;选择合适的安全解决方案显得尤为重要。天锐绿盾与Ping32作为两款备受推崇的安全软件&#xff0c;各自为企业提供了独特的功能和优势&#xff0c;共同为企业的数据安全和…

随身WiFi三网切换靠谱吗?格行随身WiFi网速怎么样?

出门在外手机流量不够用&#xff0c;连接公共WIFI网速不稳定还存在安全隐患。小巧便携的随身WIFI成了外出用网的首选。面对市面上不同品牌&#xff0c;不同类型的随身WIFI不少朋友不免心生疑问&#xff1a;随身WIFI到底值不值得买&#xff1f;究竟是不是“智商税”&#xff1f;…

服务器数据恢复—SAN环境中LUN映射错误导致文件系统一致性出错的数据恢复案例

服务器数据恢复环境&#xff1a; SAN光纤网络环境&#xff0c;存储由一组6块硬盘组建的RAID6阵列构成&#xff0c;划分为若干LUN&#xff0c;MAP到跑不同业务的SUN SOLARIS操作系统服务器上。 服务器故障&分析&#xff1a; 因为业务需要&#xff0c;用户在该光纤存储环境中…

【skywalking 】More than 15,000 ‘grammar‘ tokens have been presented. 【未解决请求答案】

问题 skywalking相关版本信息 jdk&#xff1a;17skywalking&#xff1a;10.1.0apache-skywalking-java-agent&#xff1a;9.3.0ElasticSearch : 8.8.2 问题描述 More than 15,000 grammar tokens have been presented. To prevent Denial Of Service attacks, parsing has b…

004-Kotlin界面开发快速入水之TicTacToe

程序界面和效果 快速入水 要学习一样跟程序设计有关的东西&#xff0c;最好的办法始终是把手打湿&#xff0c;整一个能够运行&#xff0c;可以实验的东西出来。 也只有在程序开发中&#xff0c;我们才能想一个魔法师而不是魔术师&#xff0c;我们真的能够创造一个东西。而且编…

Node.js:Express 服务 路由

Node.js&#xff1a;Express 服务 & 路由 创建服务处理请求req对象 静态资源托管托管多个资源挂载路径前缀 路由模块化 Express是Node.js上的一个第三方框架&#xff0c;可以快速开发一个web框架。本质是一个包&#xff0c;可以通过npm直接下载。 创建服务 Express创建一…

C语言 | Leetcode C语言题解之第530题二叉搜索树的最小绝对差

题目&#xff1a; 题解&#xff1a; void dfs(struct TreeNode* root, int* pre, int* ans) {if (root NULL) {return;}dfs(root->left, pre, ans);if (*pre -1) {*pre root->val;} else {*ans fmin(*ans, root->val - (*pre));*pre root->val;}dfs(root->…

重学SpringBoot3-整合 Elasticsearch 8.x (二)使用Repository

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 整合 Elasticsearch 8.x &#xff08;二&#xff09;使用Repository 1. 环境准备1.1 项目依赖1.2 Elasticsearch 配置 2. 使用Repository的基本步骤2.1 创建实体类2.2 创…

SpringBoot源码(四):run() 方法解析(一)

run()方法&#xff1a; public ConfigurableApplicationContext run(String... args) {// 记录应用启动时间long startTime System.nanoTime();DefaultBootstrapContext bootstrapContext createBootstrapContext();// 创建 ConfigurableApplicationContext 对象Configurabl…

ASP .NET CORE 6 在项目中集成WatchDog开源项目

概念 WatchDog是一个开源的项目&#xff0c;可以实现对.Net 应用程序和API实现实时应用日志和性能监控平台。可以实现实时记录和查看应用程序中的消息、事件、HTTP请求和响应&#xff0c;以及运行时捕获的异常&#xff0c;有效帮助开发人员去排查应用异常&#xff0c;提升开发效…

分类算法——决策树 详解

决策树的底层原理 决策树是一种常用的分类和回归算法&#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.…

[ 问题解决篇 ] win11中本地组策略编辑器gpedit.msc打不开(gpedit.msc缺失)

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…