目录
名称
概述
示例
风险
描述
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
导致插入到--dest
的INSERT
被写为REPLACE
。
--retries
类型:整数;默认值:1
每次超时或死锁的重试次数。
指定在InnoDB锁等待超时或死锁时pt-archiver
应重试的次数。重试次数用尽后,pt-archiver
将带着错误退出。
在混合使用事务存储引擎和非事务存储引擎之间进行归档时,请仔细考虑你希望发生的事情。到--dest
的INSERT
和从--source
的DELETE
是在不同的连接上进行的,因此即使它们在同一服务器上,也不会实际参与同一事务。但是,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手册页。