GoGPT Best VPN GoSearch

OnWorks 网站图标

pt-archiverp - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 pt-archiverp

这是 pt-archiverp 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


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

概要


用法:pt-archiver [OPTIONS] --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 是成熟的,在现实世界中得到验证,并经过良好测试,但所有数据库
工具会给系统和数据库服务器带来风险。 在使用这个工具之前,
请:

· 阅读工具的文档

· 查看工具已知的“BUGS”

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

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

商品描述


pt-archiver 是我用来归档表的工具,如
<http://tinyurl.com/mysql-archiving>. 目标是一份低影响、只向前发展的工作
从表中蚕食旧数据,而不会对 OLTP 查询产生太大影响。 您可以插入
数据到另一个表中,不需要在同一台服务器上。 你也可以把它写成
文件格式适合 LOAD DATA INFILE。 或者你不能做,在这种情况下
只是一个增量删除。

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

对于某些选项,您需要仔细选择值。 最重要的是“--limit”,
“--重试”和“--txn-size”。

策略是找到第一行,然后只向前扫描一些索引以找到更多
行有效。 每个后续查询不应扫描整个表; 它应该寻求
进入索引,然后扫描直到找到更多可归档的行。 指定索引
“--source”参数的“i”部分对此至关重要; 使用“--dry-run”
检查生成的查询并确保解释它们以查看它们是否有效
(大多数时候您可能想要扫描 PRIMARY 键,这是默认值)。 甚至
更好的是,检查运行之前和之后处理程序状态计数器的差异
查询,并确保它不会在每次查询时扫描整个表。

您可以使用“--no-ascend”部分或全部禁用搜索然后扫描优化
和“--ascend-first”。 有时这对于多列键可能更有效。 是
意识到 pt-archiver 被构建为从它选择和扫描的索引的开头开始
它只向前。 如果您试图从
表末尾的索引不是它喜欢的索引。 请参阅“--source”并阅读
“i”部分的文档(如果这适用于您)。

佩尔科纳 数据库


pt-archiver 适用于 Percona XtraDB Cluster (PXC) 5.5.28-23.7 及更新版本,但有
在集群上归档之前您应该考虑的三个限制:

提交时出错
pt-archiver 在提交事务时不检查错误。 对 PXC 的承诺可以
失败,但发生这种情况时,该工具尚未检查或重试事务。
如果发生这种情况,该工具将死亡。

MyISAM 表
归档 MyISAM 表可以工作,但 PXC 中的 MyISAM 支持仍处于试验阶段
本次发布的时间。 PXC、MyISAM 表和
“AUTO_INCREMENT”列。 因此,您必须确保归档不会直接
或间接导致对 MyISAM 表使用默认的“AUTO_INCREMENT”值。
例如,如果使用“--columns”并且使用“--dest”,则会发生这种情况
不包括“AUTO_INCREMENT”列。 该工具不会对此进行检查!

非集群选项
某些选项可能有效,也可能无效。 例如,如果一个集群节点不是一个
奴隶,那么“--check-slave-lag”不起作用。 而且由于 PXC 表通常是
InnoDB,但InnoDB不支持“INSERT DELAYED”,那么“--delayed-insert”不支持
工作。 其他选项也可能不起作用,但该工具不会检查它们,因此
您应该先在测试集群上测试归档,然后再在真实集群上进行归档。

OUTPUT


如果指定“--progress”,则输出是标题行,加上每隔一段时间的状态输出。
状态输出中的每一行都列出当前日期和时间,pt-多少秒
存档器一直在运行,以及它存档了多少行。

如果指定“--statistics”,“pt-archiver”会输出计时等信息来帮助
您可以确定存档过程的哪个部分花费的时间最多。

错误处理


pt-archiver 尝试捕捉信号并优雅地退出; 例如,如果你发送它
SIGTERM(UNIX-ish 系统上的 Ctrl-C),它将捕获信号,打印有关
信号,并相当正常地退出。 它不会执行“--analyze”或“--optimize”,
因为这些可能需要很长时间才能完成。 它将正常运行所有其他代码,
包括打电话 完成后() 在任何插件上(请参阅“扩展”)。

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

配置


至少指定“--dest”、“--file”或“--purge”之一。

“--ignore”和“--replace”是互斥的。

“--txn-size”和“--commit-each”是互斥的。

“--low-priority-insert”和“--delayed-insert”是相互排斥的。

“--share-lock”和“--for-update”是互斥的。

“--analyze”和“--optimize”是相互排斥的。

“--no-ascend”和“--no-delete”是互斥的。

如果 COPY 为 yes,“--dest”中的 DSN 值默认为“--source”中的值。

- 分析
类型:字符串

之后在“--source”和/或“--dest”上运行ANALYZE TABLE。

完成后运行 ANALYZE TABLE。 参数是任意字符串。 如果它
包含字母“s”,将分析来源。 如果它包含“d”,则
目的地将被分析。 您可以指定一个或两个。 例如,
下面将分析两者:

--分析=ds

看到http://dev.mysql.com/doc/en/analyze-table.html> 有关分析表的详细信息。

--上升优先
仅上升索引的第一列。

如果您确实想使用升序索引优化(请参阅“--no-ascend”),但不要
想要承担提升大型多列索引的开销,你可以使用这个
告诉 pt-archiver 仅提升索引最左侧列的选项。 这个可以
与根本不提升指数相比,提供显着的性能提升,同时
避免提升整个指数的成本。

有关如何与插件交互的讨论,请参阅“扩展”。

--询问通行证
连接 MySQL 时提示输入密码。

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

禁用自动刷新到“--file”并仅在事务处理时将“--file”刷新到磁盘
提交。 这通常意味着文件被操作系统块刷新,所以
在提交之间也可能有一些隐式刷新到磁盘。 默认为
在每一行之后将“--file”刷新到磁盘。

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

我看到使用“--buffer”的性能提升大约是 5% 到 15%。
你的旅费可能会改变。

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

使用单个“DELETE”语句批量删除每个行块。 该声明
删除块的第一行和最后一行之间的每一行,包括。 这意味着
“--commit-each”,因为一次“插入”一行是个坏主意,然后
在批量“删除”之前提交它们。

正常的方法是按主键删除每一行。 批量删除可能是一个
快很多。 他们 可能 而不去 be 如果您有一个复杂的“WHERE”子句。

此选项完全推迟所有“删除”处理,直到行块被
完成的。 如果你在源上有一个插件,它的“before_delete”方法将不会被
叫。 相反,它的“before_bulk_delete”方法稍后调用。

警告:如果您在源上有一个有时不返回 true 的插件
“is_archivable()”,只有在您了解它的作用时才应该使用此选项。 如果
插件指示“pt-archiver”不要归档一行,它仍然会被删除
批量删除!

--[no] 批量删除限制
默认:是

将“--limit”添加到“--bulk-delete”语句。

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

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

用“LOAD DATA LOCAL INFILE”插入每一块行。 这可能比
使用“INSERT”语句一次插入一行。 它是通过创建一个
每个行块的临时文件,并将行写入此文件而不是
插入它们。 当块完成时,它上传行。

为保护您的数据安全,此选项会强制使用批量删除。 它
在将行插入到
目的地第一。 强制批量删除可确保删除等待直到
插入成功。

“--low-priority-insert”、“--replace”和“--ignore”选项适用于此
选项,但“--delayed-insert”没有。

如果“LOAD DATA LOCAL INFILE”在“The used command is not
此 MySQL 版本允许”,请参阅“L”DSN 选项的文档。

--字符集
简写:-A; 类型:字符串

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

请注意,仅识别 MySQL 已知的字符集; 例如,“UTF8”将
工作,但“UTF-8”不会。

另见“--[no]check-charset”。

--[无]检查字符集
默认:是

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

--[无]检查列
默认:是

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

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

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

--检查间隔
类型:时间; 默认值:1s

如果给出了“--check-slave-lag”,这定义了工具每次暂停的时间
它发现奴隶落后的时间。
此检查每 100 行执行一次。

--check-slave-滞后
类型:字符串; 可重复:是

暂停归档,直到指定 DSN 的从延迟小于“--max-lag”。 这个
可以多次指定选项以检查多个从站。

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

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

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

另请参见“--primary-key-only”。

--commit-每个
提交每组提取和存档的行(禁用“--txn-size”)。

在归档每组行后提交事务并刷新“--file”,
在获取下一组行之前,如果指定了“--sleep”,则在睡眠之前。
禁用“--txn-size”; 使用“--limit”来控制交易大小
“--commit-each”。

此选项可用作使“--limit”和“--txn-size”具有相同值的快捷方式,
但更重要的是它避免了在搜索更多时保持开放的交易
行。 例如,假设您要从一个非常
大表,“--limit”1000 和“--txn-size”1000。经过一段时间的发现
并且一次归档 1000 行,pt-archiver 会找到最后 999 行并归档
它们,然后执行下一个 SELECT 以查找更多行。 这将扫描其余的
表,但再也找不到任何行。 它已经保持了很长时间的未结交易
时间,只能确定它无论如何都完成了。 您可以使用“--commit-each”来避免
本。

--配置
类型:数组

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

- 数据库
简写:-D; 类型:字符串

连接到这个数据库。

--延迟插入
将 DELAYED 修饰符添加到 INSERT 语句。

将 DELAYED 修饰符添加到 INSERT 或 REPLACE 语句。 看
<http://dev.mysql.com/doc/en/insert.html> 了解详情。

--目标
类型:DSN

DSN 指定要归档到的表。

此项指定一个表,pt-archiver 将在其中插入归档的行
“ - 来源”。 它使用与“--source”相同的 key=val 参数格式。 最失踪
值默认为与“--source”相同的值,因此您不必重复选项
在“--source”和“--dest”中是相同的。 使用“--help”选项查看哪个
值是从“--source”复制的。

警告: 使用默认选项文件 (F) DSN 选项,该选项为
“--source”导致 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中定义的socket。

--试运行
打印查询并退出而不做任何事情。

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

- 文件
类型:字符串

要存档到的文件,使用 日期格式()- 类似的格式。

将归档行写入的文件名。 MySQL 的一个子集 日期格式() 格式
文件名中允许使用代码,如下所示:

%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'

该文件的内容与 SELECT INTO OUTFILE 使用的格式相同,如文档所述
在 MySQL 手册中:行以换行符终止,列以制表符终止,NULL
字符用\N表示,特殊字符用\转义。 这让
您使用 LOAD DATA INFILE 的默认设置重新加载文件。

如果您想要文件顶部的列标题,请参阅“--header”。 该文件是自动
默认刷新; 参见“--buffer”。

--for-更新
将 FOR UPDATE 修饰符添加到 SELECT 语句。

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

--标题
在“--file”顶部打印列标题。

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

- 帮帮我
显示帮助并退出。

--高优先级选择
将 HIGH_PRIORITY 修饰符添加到 SELECT 语句。

看到http://dev.mysql.com/doc/en/select.html> 了解详情。

- 主持人
简写:-h; 类型:字符串

连接到主机。

- 忽略
将 IGNORE 用于 INSERT 语句。

使 INSERT 进入“--dest”成为 INSERT IGNORE。

- 限制
类型:int; 默认值:1

每个语句要获取和存档的行数。

将检索行的 SELECT 语句返回的行数限制为
档案。 默认为一行。 增加限制可能更有效,但
如果您归档稀疏,跳过多行,请小心; 这可能
引起更多与其他查询的争用,取决于存储引擎、事务
隔离级别,以及诸如“--for-update”之类的选项。

- 当地的
不要将 OPTIMIZE 或 ANALYZE 查询写入 binlog。

将 NO_WRITE_TO_BINLOG 修饰符添加到 ANALYZE 和 OPTIMIZE 查询。 见“--分析”
了解详情。

--低优先级删除
将 LOW_PRIORITY 修饰符添加到 DELETE 语句。

看到http://dev.mysql.com/doc/en/delete.html> 了解详情。

--低优先级插入
将 LOW_PRIORITY 修饰符添加到 INSERT 或 REPLACE 语句。

看到http://dev.mysql.com/doc/en/insert.html> 了解详情。

--最大流量控制
类型:浮点数

有点类似于 --max-lag 但适用于 PXC 集群。 检查平均集群花费的时间
暂停流量控制并在超过指示的百分比时暂停工具
在选项中。 默认为无流量控制检查。 此选项可用于 PXC
5.6 或更高版本。

--最大滞后
类型:时间; 默认值:1s

如果“--check-slave-lag”给出的从站滞后,则暂停归档。

此选项会导致 pt-archiver 在每次要获取时查看从站
另一排。 如果从站的滞后大于选项的值,或者如果从站
未运行(因此其滞后为 NULL),pt-table-checksum 休眠“--check-interval”
秒,然后再次查看滞后。 它重复直到奴隶被追上,
然后继续获取和归档该行。

此选项可以消除对“--sleep”或“--sleep-coef”的需要。

--不上升
不要使用升序索引优化。

默认的升序索引优化导致“pt-archiver”重复优化
“SELECT”查询,因此它们会查找上一个查询结束的索引,然后进行扫描
沿着它,而不是每次都从表的开头扫描。 这是
默认情况下启用,因为它通常是重复访问的好策略。

大的多列索引可能会导致 WHERE 子句足够复杂,以至于
这实际上可能效率较低。 例如,考虑一个四列 PRIMARY KEY
在 (a, b, c, d) 上。 从最后一个查询结束的位置开始的 WHERE 子句如下:

哪里 (a > ?)
或 (a = ? AND b > ?)
OR (a = ? AND b = ? AND c > ?)
OR (a = ? AND b = ? AND c = ? AND d >= ?)

用值填充占位符会使用内存和 CPU,增加网络流量和
解析开销,并可能使 MySQL 更难优化查询。 四列
键不是什么大问题,但是一个十列键,其中每一列都允许“NULL”可能
是。

如果您知道只是删除行,则可能不需要升序索引
从表的开头分块开始,但不留下任何孔,因此从
表的开头实际上是最有效率的事情。

另请参见“--ascend-first”。 有关如何交互的讨论,请参阅“扩展”
与插件。

--不删除
不要删除归档的行。

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

如果源 DSN 上有插件,则无论如何都会调用其“before_delete”方法,
即使“pt-archiver”不会执行删除。 有关更多信息,请参阅“扩展”
插件。

--优化
类型:字符串

之后在“--source”和/或“--dest”上运行优化表。

完成后运行优化表。 有关选项语法,请参阅“--analyze”
<http://dev.mysql.com/doc/en/optimize-table.html> 有关优化表的详细信息。

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

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

--pid
类型:字符串

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

- 插入
类型:字符串

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

指定通用插件的 Perl 模块名称。 目前仅使用
用于统计(参见“--statistics”)并且必须有“new()”和“statistics()”方法。

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

“statistics(\%stats, $time)”方法获取由
归档作业,以及整个作业开始的时间。

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

用于连接的端口号。

-- 仅主键
仅主键列。

使用主键列指定“--columns”的快捷方式。 这是一
如果您只想清除行,效率; 它避免获取整行,当
“DELETE”语句只需要主键列。 另见“--purge”。

- 进展
类型:int

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

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

- 清除
清除而不是归档; 允许省略“--file”和“--dest”。

允许在没有“--file”或“--dest”参数的情况下存档,这实际上是清除
因为这些行刚刚被删除。

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

--快速删除
将 QUICK 修饰符添加到 DELETE 语句。

看到http://dev.mysql.com/doc/en/delete.html> 了解详情。 正如在
文档,在某些情况下,使用 DELETE QUICK 和 OPTIMIZE 可能会更快
桌子。 您可以为此使用“--optimize”。

- 安静的
简写:-q

不要打印任何输出,例如“--statistics”。

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

- 代替
导致 INSERT 到“--dest”被写为 REPLACE。

--重试
类型:int; 默认值:1

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

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

仔细考虑在混合存档时要发生的情况
事务和非事务存储引擎。 插入到“--dest”和
从“--source”删除是在单独的连接上,所以它们实际上并不
即使它们在同一台服务器上,也参与相同的事务。 然而,pt-
归档器在代码中实现简单的分布式事务,因此提交和回滚
应该在两个连接中按需要发生。

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

- 运行
类型:时间

退出前运行的时间。

可选的后缀 s=seconds, m=minutes, h=hours, d=days; 如果没有后缀,则使用 s。

--[no] 安全自动增量
默认:是

不要归档最大 AUTO_INCREMENT 的行。

添加额外的 WHERE 子句以防止 pt-archiver 删除最新行
递增单列 AUTO_INCREMENT 键。 这可以防止重复使用
AUTO_INCREMENT 值,如果服务器重新启动,默认情况下启用。

额外的 WHERE 子句包含自增列的最大值
存档或清除作业的开始。 如果在 pt-archiver 时插入新行
正在运行,它不会看到它们。

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

如果此文件存在,则退出。

“--sentinel”指定的文件的存在将导致pt-archiver停止
存档和退出。 默认为 /tmp/pt-archiver-sentinel。 你可能会发现这个
如有必要,可以方便地优雅地停止 cron 作业。 另见“--停止”。

--设置变量
类型:数组

在这个逗号分隔的“变量=值”对列表中设置 MySQL 变量。

默认情况下,工具集:

等待超时=10000

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

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

--共享锁
将 LOCK IN SHARE MODE 修饰符添加到 SELECT 语句。

看到http://dev.mysql.com/doc/en/innodb-locking-reads.html>.

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

- 睡觉
类型:int

两次获取之间的睡眠时间。

指定在 SELECT 语句之间休眠的时间。 默认是不睡觉
全部。 事务未提交,并且“--file”文件未刷新,之前
睡眠。 请参阅“--txn-size”来控制它。

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

--睡眠系数
类型:浮点数

将“--sleep”计算为上次 SELECT 时间的倍数。

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

这是一种稍微复杂的节流 SELECT 的方法:睡眠一个变化的
每个 SELECT 之间的时间量,取决于 SELECT 花费的时间。

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

用于连接的套接字文件。

- 来源
类型:DSN

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

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

a 选项指定要使用 USE 设置为连接默认值的数据库。 如果
b 选项为真,它使用 SQL_LOG_BIN 禁用二进制日志记录。 m 选项
指定外部 Perl 模块可以提供的可插入操作。 唯一的
必填部分是表格; 其他部分可以从不同的地方读取
环境(例如选项文件)。

'i' 部分值得特别提及。 这告诉 pt-archiver 它应该使用哪个索引
扫描存档。 这出现在 SELECT 的 FORCE INDEX 或 USE INDEX 提示中
用于获取可归档行的语句。 如果你不指定任何东西,pt-archiver
将自动发现一个好的索引,如果存在,则更喜欢“PRIMARY KEY”。 在我的
体验这通常效果很好,所以大多数时候你可以省略
“我”部分。

索引用于优化对表的重复访问; pt-archiver 记得
它从每个 SELECT 语句中检索的最后一行,并使用它来构造一个 WHERE
子句,使用指定索引中的列,应该允许 MySQL 启动
next SELECT 最后一个结束的地方,而不是潜在地从
每个连续的 SELECT 表的开头。 如果您使用外部
插件,请参阅“扩展”以讨论它们如何与升序交互
索引。

'a' 和 'b' 选项允许您控制语句在二进制文件中的流动方式
日志。 如果你指定了 'b' 选项,二进制日志将在指定的
联系。 如果指定 'a' 选项,连接将“使用”指定的
数据库,您可以使用它来防止从站执行二进制日志事件
使用“--replicate-ignore-db”选项。 这两个选项可以用作不同的
实现相同目标的方法:将数据从 master 上存档,但将其保留在 master 上
奴隶。 例如,您可以在主服务器上运行清除作业并阻止它
使用您选择的方法在奴隶上发生。

警告: 使用默认选项文件 (F) DSN 选项,该选项为
“--source”导致 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中定义的socket。

- 统计数据
收集和打印计时统计信息。

使 pt-archiver 收集有关其功能的计时统计信息。 这些统计
可用于“--plugin”指定的插件

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

Started at 2008-07-18T07:18:53, ended at 2008-07-18T07:18:53
资料来源:D=db,t=table
选择4
插入 4
删除 4
动作计数时间 Pct
提交 10 0.1079 88.27
选择 5 0.0047 3.87
删除 4 0.0028 2.29
插入 4 0.0028 2.28
其他 0 0.0040 3.29

前两行(或三行)显示时间以及源表和目标表。 这
接下来的三行显示提取、插入和删除了多少行。

其余行显示计数和计时。 列是动作,总数
该动作被计时的次数、花费的总时间以及
程序的总运行时间。 行按总时间降序排列。 这
最后一行是没有明确归因于任何事情的其余时间。 行动将
因命令行选项而异。

如果给出“--why-quit”,它的行为会略有改变。 此选项导致它
即使只是因为没有更多行,也要打印退出的原因。

这个选项需要标准的 Time::HiRes 模块,它是核心 Perl 的一部分
相当新的 Perl 版本。

- 停止
通过创建哨兵文件停止运行实例。

使 pt-archiver 创建由“--sentinel”指定的哨兵文件并退出。
这应该具有停止所有正在监视的正在运行的实例的效果
相同的哨兵文件。

--txn-大小
类型:int; 默认值:1

每个事务的行数。

指定每个事务的大小(以行数计)。 零禁用事务
共。 在 pt-archiver 处理这么多行之后,它提交了
“--source”和“--dest”(如果给出),并刷新“--file”给出的文件。

此参数对性能至关重要。 如果您从实时服务器存档,
例如,正在执行繁重的 OLTP 工作,您需要在两者之间选择一个良好的平衡
事务大小和提交开销。 更大的交易创造了可能性
更多的锁争用和死锁,但较小的事务导致更频繁
提交开销,这可能很重要。 给出一个想法,在一个小的测试集上,我
在编写 pt-archiver 时使用,值 500 导致归档需要大约 2
在我的台式机上一个安静的 MySQL 实例上每 1000 行的秒数,
归档到磁盘和另一个表。 禁用值为零的事务,
打开自动提交,将性能降低到每千行 38 秒。

如果您不从事务存储引擎归档或向事务存储引擎归档,则可能需要
禁用事务,因此 pt-archiver 不会尝试提交。

- 用户
简写:-u; 类型:字符串

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

- 版
显示版本并退出。

--[无]版本检查
默认:是

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

这是一个标准的“自动检查更新”功能,还有两个额外的
特征。 首先,该工具在本地系统中检查其他程序的版本
除了它自己的版本。 例如,它检查每个 MySQL 服务器的版本
它连接到 Perl 和 Perl 模块 DBD::mysql。 其次,它检查并警告
关于存在已知问题的版本。 例如,MySQL 5.5.25 有一个严重的错误并且
被重新发布为 5.5.25a。

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

欲了解更多信息,请访问.

- 在哪里
类型:字符串

WHERE 子句来限制要存档的行(必需)。

指定 WHERE 子句来限制归档哪些行。 不要包括这个词
在哪里。 您可能需要引用该参数以防止您的 shell 解释它。
例如:

--where 'ts < current_date - 间隔 90 天'

为了安全起见,需要“--where”。 如果不需要 WHERE 子句,请使用
“--where” 1=1。

--为什么-退出
除非行用尽,否则打印退出原因。

如果 pt-archiver 由于运行以外的任何原因退出,则导致 pt-archiver 打印一条消息
要存档的行数不足。 如果您有一个带有“--run-time”的 cron 作业,这会很有用
例如,您希望确保 pt-archiver 在完成之前完成
时间不多了。

如果给出“--statistics”,则行为略有改变。 它将打印
退出的原因,即使只是因为没有更多行。

即使给出了“--quiet”,此输出也会打印。 这样你就可以把“pt-archiver”放进去
“cron”作业并在出现异常退出时收到电子邮件。

DSN 配置


这些 DSN 选项用于创建 DSN。 每个选项都像“option=value”一样给出。
选项区分大小写,因此 P 和 p 不是同一个选项。 不可能有
“=”之前或之后的空格,如果该值包含空格,则必须用引号引起来。
DSN 选项以逗号分隔。 有关完整详细信息,请参阅 percona-toolkit 联机帮助页。

· 一种

副本:没有

执行查询时要使用的数据库。

· 一种

dsn:字符集; 副本:是

默认字符集。

·乙

副本:没有

如果为 true,则使用 SQL_LOG_BIN 禁用 binlog。

·D

dsn:数据库; 副本:是

包含表的数据库。

F

dsn: mysql_read_default_file; 副本:是

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

· H

dsn:主机; 副本:是

连接到主机。

· 一世

副本:是

要使用的索引。

·L

副本:是

显式启用 LOAD DATA LOCAL INFILE。

出于某种原因,一些供应商在没有 --enable-local-infile 的情况下编译 libmysql
选项,禁用该语句。 这可能会导致奇怪的情况,例如
服务器允许 LOCAL INFILE,但如果使用它,客户端会抛出异常。

但是,只要服务器允许 LOAD DATA,客户端就可以轻松地重新启用它; 看

<http://search.cpan.org/~capttofu/DBD-mysql/lib/DBD/mysql.pm>. 这个选项做
正是这样。

虽然我们还没有发现打开这个选项会导致错误或不同的情况
行为,为了安全起见,默认情况下不启用此选项。

·米

副本:没有

插件模块名称。

·p

dsn:密码; 副本:是

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

·P

dsn:端口; 副本:是

用于连接的端口号。

·S

dsn: mysql_socket; 副本:是

用于连接的套接字文件。

·吨

副本:是

归档自/至的表。

·你

dsn:用户; 副本:是

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

扩展


pt-archiver 可以通过插入外部 Perl 模块来处理一些逻辑和/或
行动。 您可以为“--source”和“--dest”指定一个模块,使用'm'
规范的一部分。 例如:

--source D=test,t=test1,m=My::Module1 --dest m=My::Module2,t=test2

这将导致 pt-archiver 加载 My::Module1 和 My::Module2 包,创建
它们的实例,然后在归档过程中调用它们。

您还可以使用“--plugin”指定插件。

模块必须提供这个接口:

新(dbh => $dbh,db => $db_name,tbl => $tbl_name)
插件的构造函数传递了一个对数据库句柄的引用,数据库
名称和表名。 该插件是在 pt-archiver 打开之后创建的
连接,并在它检查参数中给出的表之前。 这给
插件有机会创建和填充临时表,或进行其他设置工作。

before_begin(cols => \@cols, allcols => \@allcols)
这个方法在 pt-archiver 开始遍历行和
归档它们,但在完成所有其他设置工作(检查表结构,
设计 SQL 查询等)。 这是 pt-archiver 告诉插件的唯一一次
归档时将通过插件的行的列名。

“cols”参数是用户请求归档的列名,可以通过
默认或通过“--columns”选项。 “allcols”参数是列的列表
pt-archiver 将从源表中获取每一行的名称。 它可能会获取更多
列比用户请求的要多,因为它需要一些列供自己使用。 什么时候
后续插件函数接收一行,它是包含所有额外内容的完整行
列(如果有)添加到末尾。

is_archivable(row => \@row)
为每一行调用此方法以确定它是否可归档。 这个
仅适用于“--source”。 参数是行本身,作为数组引用。 如果
方法返回true,该行将被归档; 否则将被跳过。

跳过一行会增加非唯一索引的复杂性。 通常 pt-archiver 使用
WHERE 子句旨在将最后处理的行作为开始扫描的位置
对于下一个 SELECT 语句。 如果您通过从
is_archive(), pt-archiver 可能会进入无限循环,因为该行仍然
存在。 因此,当您为“--source”参数指定插件时,pt-archiver
将稍微更改其 WHERE 子句。 而不是从“大于或等于”开始
到”最后处理的行,它将开始“严格大于”。这将起作用
在诸如主键之类的唯一索引上很好,但它可能会跳过行(留下空洞)
非唯一索引或仅升序索引的第一列时。

如果您指定“--no-delete”,“pt-archiver”将以相同的方式更改子句,
因为再次无限循环是可能的。

如果您指定“--bulk-delete”选项并从此方法返回false,
“pt-archiver”可能无法满足您的需求。 该行不会被归档,但会被归档
删除,因为批量删除对行范围进行操作并且不知道哪些行
选择保留的插件。

如果你指定了“--bulk-insert”选项,这个方法的返回值会影响
该行是否写入临时文件以进行批量插入,因此批量插入
将按预期工作。 但是,批量插入需要批量删除。

before_delete(row => \@row)
在每行被删除之前调用此方法。 这仅适用于
“ - 来源”。 这是你处理依赖的好地方,比如删除
与您将要删除的行相关的外键内容。 你也可以使用
这将递归归档所有相关表。

即使给出了“--no-delete”,这个插件方法也会被调用,但如果不是
给出了“--bulk-delete”。

before_bulk_delete(first_row => \@row, last_row => \@row)
在执行批量删除之前调用此方法。 它类似于
“before_delete”方法,除了它的参数是范围的第一行和最后一行
被删除。 即使给出了“--no-delete”,它也会被调用。

before_insert(行 => \@row)
在每行插入之前调用此方法。 这仅适用于
“--dest”。 您可以使用它来将行插入到多个表中,也许使用
ON DUPLICATE KEY UPDATE 子句在数据仓库中构建汇总表。

如果给出“--bulk-insert”,则不会调用此方法。

before_bulk_insert(first_row => \@row, last_row => \@row, 文件名 =>
批量插入文件名)
在执行批量插入之前调用此方法。 它类似于
“before_insert”方法,除了它的参数是范围的第一行和最后一行
被删除。

custom_sth(row => \@row, sql => $sql)
此方法在插入行之前调用,但在“插入前()“。 它
如果需要,允许插件指定不同的“插入”语句。 回报
值(如果有)应该是一个 DBI 语句句柄。 “sql”参数是SQL文本
用于准备默认的“INSERT”语句。 如果你不调用这个方法
指定“--bulk-insert”。

如果没有返回值,则使用默认的“INSERT”语句句柄。

此方法仅适用于为“--dest”指定的插件,因此如果您的插件不是
做你所期望的,检查你是否为目的地指定了它,而不是
资源。

custom_sth_bulk(first_row => \@row, last_row => \@row, sql => $sql, 文件名 =>
$bulk_insert_文件名)
如果您已指定“--bulk-insert”,则此方法将在批量之前调用
插入,但在“before_bulk_insert()”,论据不同。

此方法的返回值等类似于“自定义_sth()“ 方法。

完成后()
此方法在 pt-archiver 退出归档循环后调用,提交所有数据库
处理、关闭“--file”并打印最终统计信息,但在 pt-archiver 运行之前
ANALYZE 或 OPTIMIZE(参见“--analyze”和“--optimize”)。

如果您为“--source”和“--dest”指定了一个插件,pt-archiver 构造,调用
before_begin(),并调用 完成后() 在顺序“--source”的两个插件上,
“--dest”。

pt-archiver 假设它控制事务,并且插件不会提交或滚动
返回数据库句柄。 传递给插件构造函数的数据库句柄是
相同的句柄 pt-archiver 使用它自己。 请记住,“--source”和“--dest”是分开的
处理。

示例模块可能如下所示:

包我的::模块;

子新{
我的 ( $class, %args ) = @_;
返回祝福(\%args, $class);
}

子before_begin {
我的 ( $self, %args ) = @_;
# 保存列名以备后用
$self->{cols} = $args{cols};
}

子 is_archivable {
我的 ( $self, %args ) = @_;
# 用 $args{row} 做一些高级逻辑
1返回;
}

sub before_delete {} # 不采取任何行动
sub before_insert {} # 不采取任何行动
sub custom_sth {} # 不采取任何行动
sub after_finish {} # 不采取任何行动

1;

环境


环境变量“PTDEBUG”启用对 STDERR 的详细调试输出。 启用
调试并将所有输出捕获到文件中,运行该工具,如:

PTDEBUG=1 pt-archiver ... > 文件 2>&1

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

系统 参赛要件


你需要 Perl、DBI、DBD::mysql 和一些应该安装在任何地方的核心包。
相当新版本的 Perl。

使用 onworks.net 服务在线使用 pt-archiverp


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad




×
广告
❤️在这里购物、预订或购买——免费,有助于保持服务免费。