GoGPT Best VPN GoSearch

OnWorks 网站图标

pt-online-schema-changep - 云端在线

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

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

程序:

您的姓名


pt-online-schema-change - 更改表而不锁定它们。

概要


用法:pt-online-schema-change [OPTIONS] DSN

pt-online-schema-change 在不阻塞读或写的情况下改变表的结构。
在 DSN 中指定数据库和表。 在阅读它之前不要使用这个工具
文档并仔细检查您的备份。

向 sakila.actor 添加一列:

pt-online-schema-change --alter "ADD COLUMN c1 INT" D=sakila,t=actor

将 sakila.actor 改为 InnoDB,在非阻塞的情况下有效地执行 OPTIMIZE TABLE
时尚,因为它已经是一个 InnoDB 表:

pt-online-schema-change --alter "ENGINE=InnoDB" D=sakila,t=actor

风险


Percona Toolkit 是成熟的,在现实世界中得到验证,并经过良好测试,但所有数据库
工具会给系统和数据库服务器带来风险。 在使用这个工具之前,
请:

· 阅读工具的文档

· 查看工具已知的“BUGS”

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

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

商品描述


pt-online-schema-change 模拟 MySQL 在内部更改表的方式,但它有效
在您要更改的表的副本上。 这意味着原始表不是
锁定,客户端可以继续读取和更改其中的数据。

pt-online-schema-change 通过创建表的空副本来改变、修改
根据需要,然后将原始表中的行复制到新表中。 当。。。的时候
复制完成后,它移走原始表并用新表替换它。 经过
默认情况下,它也会删除原始表。

数据复制过程是在小块数据中执行的,这些数据块是为了尝试
使它们在特定的时间内执行(参见“--chunk-time”)。 这个过程很
类似于 pt-table-checksum 等其他工具的工作方式。 对数据的任何修改
复制过程中的原始表将反映在新表中,因为该工具
在原始表上创建触发器以更新新表中的相应行。
触发器的使用意味着如果已经定义了任何触发器,该工具将无法工作
在桌子上。

当工具完成将数据复制到新表中时,它使用原子“重命名表”
同时重命名原始表和新表的操作。 这一切完成后,
该工具删除原始表。

外键使工具的操作复杂化并引入额外的风险。 技术
当外键引用时,原子重命名原始表和新表不起作用
到桌子上。 该工具必须更新外键以引用架构后的新表
更改完成。 该工具支持两种方法来实现这一点。 你可以阅读
更多关于“--alter-foreign-keys-method”的文档。

外键也会引起一些副作用。 最终表将具有相同的外键
和索引作为原始表(除非您在 ALTER 中指定不同的
语句),但对象的名称可能会略有更改,以避免对象名称
MySQL 和 InnoDB 中的冲突。

为了安全起见,除非您指定“--execute”选项,否则该工具不会修改表,
默认情况下未启用。 该工具支持多种其他措施来防止
不需要的负载或其他问题,包括自动检测副本、连接到
他们,并使用以下安全检查:

· 在大多数情况下,除非 PRIMARY KEY 或 UNIQUE INDEX 是,否则该工具将拒绝操作
出现在表中。 有关详细信息,请参阅“--alter”。

· 如果检测到复制过滤器,该工具将拒绝运行。 看
“--[no]check-replication-filters”了解详情。

· 如果观察到任何延迟的副本,该工具将暂停数据复制操作
在复制中。 有关详细信息,请参阅“--max-lag”。

· 如果检测到服务器上的负载过多,该工具将暂停或中止其操作。 看
“--max-load”和“--critical-load”了解详情。

· 工具设置“innodb_lock_wait_timeout=1”和(对于MySQL 5.5及更新版本)
"lock_wait_timeout=60" 使其更有可能成为任何锁的牺牲品
争,并且不太可能中断其他交易。 这些值可以是
通过指定“--set-vars”进行更改。

· 如果外键约束引用该表,该工具拒绝更改该表,除非
您指定“--alter-foreign-keys-method”。

· 该工具无法更改“Percona XtraDB Cluster”节点上的 MyISAM 表。

佩尔科纳 数据库


pt-online-schema-change 适用于 Percona XtraDB Cluster (PXC) 5.5.28-23.7 及更新版本,但
有两个限制:只能更改 InnoDB 表,并且“wsrep_OSU_method”必须
设置为“TOI”(全序隔离)。 如果主机是
集群节点且表为 MyISAM 或正在转换为 MyISAM ("ENGINE=MyISAM"),或
如果“wsrep_OSU_method”不是“TOI”。 没有办法禁用这些检查。

OUTPUT


该工具将有关其活动的信息打印到 STDOUT,以便您可以看到它是什么
正在做。 在数据复制阶段,它会向 STDERR 打印“--progress”报告。 你可以得到
通过指定“--print”来附加信息。

如果指定了“--statistics”,则会在以下位置打印各种内部事件计数的报告
最后,如:

# 事件计数
# ====== ======
# 插入 1

配置


“--dry-run”和“--execute”是互斥的。

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

- 改变
类型:字符串

模式修改,没有 ALTER TABLE 关键字。 您可以执行多个
通过用逗号指定它们来修改表。 请参考 MySQL
ALTER TABLE 语法的手册。

以下限制适用,如果尝试,将导致工具失败
不可预测的方式:

· 在几乎所有情况下,PRIMARY KEY 或 UNIQUE INDEX 都需要出现在
桌子。 这是必要的,因为该工具会创建一个 DELETE 触发器来保持
进程运行时更新了新表。

一个值得注意的例外是当 PRIMARY KEY 或 UNIQUE INDEX 被创建时
现有 作为 ALTER 子句的一部分; 在这种情况下,它将使用这些
DELETE 触发器的列。

· “RENAME”子句不能用于重命名表。

· 不能通过删除和重新添加新名称来重命名列。 工具
不会将原始列的数据复制到新列。

· 如果您添加一个没有默认值的列并使其为 NOT NULL,该工具将
失败,因为它不会尝试为您猜测默认值; 您必须指定
默认。

· “DROP FOREIGN KEY constraint_name”需要指定“_constraint_name”而不是
比真正的“constraint_name”。 由于 MySQL 的限制,pt-online-schema-
更改在创建时向外键约束名称添加前导下划线
新表。 例如,要删除此约束:

约束`fk_foo`外键(`foo_id`)引用`bar`(`foo_id`)

您必须指定“--alter“DROP FOREIGN KEY _fk_foo””。

· 该工具在 MySQL 5.0 中不使用“LOCK IN SHARE MODE”,因为它会导致
中断复制的从属错误:

查询在 master 和 slave 上导致不同的错误。 主人的错误:
'尝试获取锁时发现死锁; 尝试重新启动事务'(1213),
从站错误:“无错误”(0)。 默认数据库:'pt_osc'。
查询:'INSERT INTO pt_osc.t (id, c) VALUES ('730', 'new row')'

将 MyISAM 表转换为 InnoDB 时会发生错误,因为 MyISAM 是非
事务性但 InnoDB 是事务性的。 MySQL 5.1 和更新版本处理这种情况
正确,但测试在 MySQL 5 中重现了 5.0% 的错误。

这是一个 MySQL 错误,类似于http://bugs.mysql.com/bug.php?id=45694>,但是
MySQL 5.0 中没有修复或解决方法。 没有“LOCK IN SHARE MODE”,测试
通过 100% 的时间,因此数据丢失或破坏复制的风险应该是
微不足道。

Be 肯定 确认 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 if 运用 MySQL 5.0 转换 我的ISAM
InnoDB!

--alter-foreign-keys-方法
类型:字符串

如何修改外键以便它们引用新表。 外键
引用要修改的表必须特别处理,以确保它们
继续参考正确的表格。 当工具将原始表重命名为
让新的代替它,外键“跟随”重命名的表,并且必须
改为引用新表。

该工具支持两种技术来实现这一点。 它会自动找到“子
表”,引用要更改的表。

汽车
自动确定哪种方法最好。 该工具使用“rebuild_constraints”
如果可能(有关详细信息,请参阅该方法的说明),如果不是,则它
使用“drop_swap”。

重建约束
此方法使用“ALTER TABLE”删除和重新添加外键约束
参考新表。 这是首选技术,除非其中一项或多项
“子”表太大以至于“ALTER”会花费太长时间。 工具
通过将子表中的行数与速率进行比较来确定
该工具能够将行从旧表复制到新表。 如果
工具估计子表可以在比
“--chunk-time”,那么它将使用这种技术。 为了估计
更改子表所需的时间,该工具乘以行复制率
通过“--chunk-size-limit”,因为 MySQL 的“ALTER TABLE”通常要快得多
比复制行的外部过程。

由于 MySQL 的限制,外键后面不能有相同的名称
改变他们在此之前所做的。 该工具必须重命名外键时
重新定义它,在名称中添加前导下划线。 在某些情况下,MySQL
还会自动重命名外键所需的索引。

删除交换
禁用外键检查(FOREIGN_KEY_CHECKS=0),然后删除原表
在将新表重命名到其位置之前。 这和正常的不一样
交换旧表和新表的方法,它使用原子“重命名”
客户端应用程序无法检测到。

这种方法速度更快并且不会阻塞,但由于两个原因而风险更大。
首先,在删除原始表和重命名表之间的短时间内
临时表,要修改的表根本不存在,查询
反对它会导致错误。 其次,如果有错误和新的
表不能重命名到旧的地方,那就来不及了
中止,因为旧表已永久消失。

此方法强制“--no-swap-tables”和“--no-drop-old-table”。

没有
这种方法就像没有“swap”的“drop_swap”。 任何外键
引用原始表现在将引用一个不存在的表。 这会
通常会导致在“SHOW ENGINE INNODB”中可见的外键违规
STATUS”,类似于以下内容:

尝试添加到索引 `idx_fk_staff_id` 元组:
数据元组:2个字段;
0: 长度 1; 十六进制 05; 升序;;
1: 长度 4; 十六进制 80000001; 升序;;
但是父表`sakila`.`staff_old`
或其 .ibd 文件当前不存在!

这是因为原始表(在本例中为 sakila.staff)已重命名为
sakila.staff_old 然后掉线了。 这种处理外键约束的方法
提供以便数据库管理员可以禁用该工具的内置
如果需要,功能。

--[no] 交换前分析
默认:是

在与旧表交换之前对新表执行 ANALYZE TABLE。 默认情况下,
这仅在运行 MySQL 5.6 及更高版本时发生,并且“innodb_stats_persistent”是
启用。 明确指定选项以启用或禁用它,而不管 MySQL
版本和“innodb_stats_persistent”。

这避免了与 InnoDB 优化器统计信息相关的潜在严重问题。
如果被提醒的表很忙并且工具很快完成,新表将
交换后没有优化器统计信息。 这可能会导致快速的索引使用
执行全表扫描的查询,直到优化器统计信息更新(通常在
10 秒)。 如果表很大并且服务器很忙,这可能会导致中断。

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

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

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

--[无]检查更改
默认:是

解析指定的“--alter”并尝试警告可能的意外行为。
目前,它检查:

列重命名
在该工具的早期版本中,使用“CHANGE COLUMN name”重命名列
new_name" 会导致该列的数据丢失。该工具现在解析
alter 语句并尝试捕获这些情况,因此重命名的列应该具有
与原始数据相同。 但是,执行此操作的代码并不是完整的
吹 SQL 解析器,因此您应该首先使用“--dry-run”和“--print”运行该工具
并验证它是否正确检测到重命名的列。

删除主键
如果“--alter”包含“DROP PRIMARY KEY”(不区分大小写和空格),则警告
除非指定了“--dry-run”,否则将打印该工具并退出。 改变
主键可能很危险,但该工具可以处理它。 该工具的触发器,
尤其是 DELETE 触发器,受更改主键的影响最大
因为该工具更喜欢使用主键作为其触发器。 你应该
首先使用“--dry-run”和“--print”运行该工具并验证触发器是
纠正。

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

检查“--max-lag”之间的睡眠时间。

--[无]检查计划
默认:是

检查查询执行计划的安全性。 默认情况下,此选项会导致工具运行
在运行旨在访问少量数据的查询之前解释,但
如果 MySQL 选择错误的执行计划,它可以访问许多行。 这些包括
查询以确定块边界和块查询本身。 如果出现
MySQL 将使用错误的查询执行计划,该工具将跳过
表。

该工具使用几种启发式方法来确定执行计划是否错误。 这
首先是EXPLAIN是否报告MySQL打算使用想要的索引来访问
行。 如果 MySQL 选择不同的索引,该工具会认为查询不安全。

该工具还会检查 MySQL 报告将使用多少索引
询问。 EXPLAIN 输出在 key_len 列中显示了这一点。 该工具会记住
看到的最大 key_len,并跳过 MySQL 报告它将使用较小的块
索引的前缀。 这种启发式可以理解为跳过具有
比其他块更糟糕的执行计划。

该工具在第一次由于执行不当而跳过块时打印警告
计划在每个表中。 尽管您可以看到
工具输出的 SKIPPED 列中跳过的块的计数。

此选项为每个表和块添加了一些设置工作。 虽然工作不是
对 MySQL 的侵入性,它会导致更多的服务器往返,这会消耗
时间。 使块太小会导致开销变得相对较大。 它
因此建议您不要将块设置得太小,因为该工具可能需要
如果你这样做,需要很长时间才能完成。

--[no]检查复制过滤器
默认:是

如果在任何服务器上设置了任何复制过滤器,则中止。 该工具寻找服务器
过滤复制的选项,例如 binlog_ignore_db 和replicate_do_db。 如果它
找到任何这样的过滤器,它会因错误而中止。

如果副本配置了任何过滤选项,你应该小心不要
修改存在于 master 而不是副本上的任何数据库或表,
因为它可能会导致复制失败。 有关复制的更多信息
规则,见http://dev.mysql.com/doc/en/replication-rules.html>.

--check-slave-滞后
类型:字符串

暂停数据复制,直到此副本的滞后小于“--max-lag”。 该值是一个
从连接选项继承属性的 DSN(“--port”、“--user”、
等等。)。 此选项会覆盖查找的正常行为并不断
监控所有连接副本上的复制延迟。 如果你不想监控
所有副本,但您希望监控的副本不止一个,然后使用
DSN 选项改为“--recursion-method”选项而不是这个选项。

--块索引
类型:字符串

最好将此索引用于分块表。 默认情况下,该工具选择最多的
适当的分块索引。 此选项可让您指定要使用的索引
更喜欢。 如果索引不存在,则该工具将回退到其默认值
选择索引的行为。 该工具将索引添加到 SQL 语句中
“FORCE INDEX”子句。 使用此选项时要小心; 一个糟糕的索引选择可能
导致性能不佳。

--块索引列
类型:int

仅使用“--chunk-index”的这么多最左边的列。 这仅适用于
复合索引,在 MySQL 查询优化器存在错误的情况下很有用
(planner) 使其扫描大范围的行而不是使用索引来定位
准确的起点和终点。 这个问题有时发生在索引上
许多列,例如 4 个或更多。 如果发生这种情况,该工具可能会打印警告
与“--[no]check-plan”选项相关。 指示工具仅使用第一个
在某些情况下,索引的 N 列是该错误的解决方法。

--块大小
类型:尺寸; 默认值:1000

为每个复制的块选择的行数。 允许的后缀为 k、M、G。

此选项可以覆盖默认行为,即调整块大小
动态地尝试使块在精确的“--chunk-time”秒内运行。 当这
选项未明确设置,其默认值用作起点,但之后
也就是说,该工具会忽略此选项的值。 如果您明确设置此选项,
但是,它会禁用动态调整行为并尝试使所有块
正好是指定的行数。

有一个微妙之处:如果块索引不是唯一的,那么块可能
会比预期的大。 例如,如果一个表被一个索引分块,
包含 10,000 个给定值,无法编写匹配的 WHERE 子句
只有 1,000 个值,并且该块将至少有 10,000 行大。 这样一个
由于“--chunk-size-limit”,块可能会被跳过。

--块大小限制
类型:浮动; 默认值:4.0

不要复制比所需块大小大得多的块。

当表没有唯一索引时,块大小可能不准确。 这个选项
指定不准确度的最大容许限度。 该工具使用到
估计块中有多少行。 如果该估计超过所需的块
大小乘以限制,然后工具跳过块。

此选项的最小值为 1,这意味着没有块可以大于
“--块大小”。 您可能不想指定 1,因为由
EXPLAIN 是估计值,可能与实际的行数不同
块。 您可以通过指定值 0 来禁用超大块检查。

该工具还使用此选项来确定如何处理引用的外键
要更改的表。 有关详细信息,请参阅“--alter-foreign-keys-method”。

--块时间
类型:浮动; 默认值:0.5

动态调整块大小,以便每个数据复制查询都需要这么长时间来执行。
该工具跟踪复制速率(每秒行数)并在每次复制后调整块大小
数据复制查询,以便下一个查询花费此时间(以秒为单位)
执行。 它保持每秒查询的指数衰减移动平均值,因此
如果服务器的性能由于服务器负载的变化而发生变化,该工具
适应很快。

如果此选项设置为零,则块大小不会自动调整,因此查询时间将
变化,但查询块大小不会。 另一种做同样事情的方法是指定一个
“--chunk-size”的值显式,而不是保留默认值。

--配置
类型:数组

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

--临界负载
类型:数组; 默认值:Threads_running=50

在每个块之后检查 SHOW GLOBAL STATUS,如果负载过高则中止。 这
选项接受以逗号分隔的 MySQL 状态变量和阈值列表。 一个
可选的“=MAX_VALUE”(或“:MAX_VALUE”)可以跟在每个变量之后。 如果没有给出,则
工具通过检查启动时的当前值并将其加倍来确定阈值。

有关更多详细信息,请参阅“--max-load”。 这些选项的工作方式类似,不同之处在于
选项将中止工具的操作而不是暂停它,默认值为
如果未指定阈值,则计算方式不同。 这个选项的原因是作为
安全检查以防原始表上的触发器为服务器增加如此多的负载
它会导致停机。 可能没有 Threads_running 的单一值是
每个服务器都是错误的,但默认值 50 似乎高得令人无法接受
大多数服务器,表示应立即取消操作。

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

连接到这个数据库。

--默认引擎
从新表中删除“ENGINE”。

默认情况下,新表使用与原始表相同的表选项创建,
所以如果原始表使用 InnoDB,那么新表将使用 InnoDB。 在某些
涉及复制的情况下,这可能会导致使用副本的意外更改
同一张桌子的不同引擎。 指定此选项会导致新表
使用系统的默认引擎创建。

--defaults-文件
简写:-F; 类型:字符串

仅从给定文件中读取 mysql 选项。 您必须提供绝对路径名。

--[no]删除新表
默认:是

如果复制原始表失败,则删除新表。

指定“--no-drop-new-table”和“--no-swap-tables”会留下新的、修改过的副本
不修改原表。 请参阅“--new-table-name”。

--no-drop-new-table 不适用于“alter-foreign-keys-method drop_swap”。

--[no]删除旧表
默认:是

重命名后删除原始表。 原始表被创建后
成功重命名让新表取代它,如果没有错误,
该工具默认删除原始表。 如果有任何错误,工具会离开
原表就位。

如果指定了“--no-swap-tables”,则没有要删除的旧表。

--[无] 掉落触发器
默认:是

删除旧表上的触发器。 “--no-drop-triggers”强制“--no-drop-old-table”。

--试运行
创建和更改新表,但不要创建触发器、复制数据或替换
原表。

- 执行
表明您已阅读文档并想要更改表格。 你必须
指定此选项以更改表。 如果不这样做,则该工具将仅执行
一些安全检查并退出。 这有助于确保您已阅读文档
并了解如何使用此工具。 如果您还没有阅读文档,那么请执行
不指定此选项。

- 力量
在使用 alter-foreign-keys-method = none 的情况下,此选项会绕过确认,
这可能会破坏外键约束。

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

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

连接到主机。

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

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

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

暂停数据复制,直到所有副本的滞后小于此值。 在每个数据之后——
复制查询(每个块),该工具查看所有副本的复制滞后到
它使用 Seconds_Behind_Master 连接。 如果任何副本滞后超过
此选项的值,然后工具将休眠“--check-interval”秒,
然后再次检查所有副本。 如果您指定“--check-slave-lag”,则该工具仅
检查该服务器的延迟,而不是所有服务器。 如果你想精确控制哪个
服务器工具监控,使用 DSN 值“--recursion-method”。

该工具永远等待副本停止滞后。 如果任何副本停止,则
工具将永远等待,直到副本启动。 数据拷贝继续,当所有
副本正在运行并且不会滞后太多。

该工具在等待时打印进度报告。 如果副本停止,它会打印一个
立即报告进度,然后在每个进度报告间隔再次报告。

- 最大负荷
类型:数组; 默认值:Threads_running=25

在每个块之后检查 SHOW GLOBAL STATUS,如果有任何状态变量,则暂停
高于他们的门槛。 该选项接受以逗号分隔的 MySQL 列表
状态变量。 一个可选的“=MAX_VALUE”(或“:MAX_VALUE”)可以跟在每个
多变的。 如果没有给出,该工具通过检查当前的
值并将其增加 20%。

例如,如果您希望工具在 Threads_connected 过高时暂停,您可以
可以指定“Threads_connected”,工具会检查当前值
开始工作并将 20% 添加到该值。 如果当前值为 100,则工具
Threads_connected 超过 120 时暂停,低于 120 时恢复工作
再次。 如果你想指定一个明确的阈值,比如 110,你可以使用
“Threads_connected:110”或“Threads_connected=110”。

这个选项的目的是为了防止工具给工具增加太多的负载
服务器。 如果数据复制查询是侵入性的,或者如果它们导致锁等待,那么
服务器上的其他查询往往会阻塞和排队。 这通常会导致
Threads_running 增加,该工具可以通过运行 SHOW GLOBAL 检测到
每次查询完成后立即显示 STATUS。 如果您为此指定一个阈值
变量,然后您可以指示工具等待,直到查询正常运行
再次。 但是,这不会阻止排队; 它只会给服务器一个机会
从排队中恢复。 如果您注意到排队,最好减少
块时间。

--新表名
类型:字符串; 默认值:%T_new

交换前的新表名。 %T 替换为原始表名。
使用默认值时,该工具在名称前添加最多 10 个“_”(下划线)以
找到一个唯一的表名。 如果指定了表名,则该工具不会为其添加前缀
带有“_”,因此该表必须不存在。

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

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

--pid
类型:字符串

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

- 插入
类型:字符串

定义“pt_online_schema_change_plugin”类的 Perl 模块文件。 一个插件
允许您编写一个 Perl 模块,该模块可以连接到 pt-online-schema- 的许多部分
改变。 这需要对 Perl 和 Percona Toolkit 约定有很好的了解,这
超出了本文档的范围。 如果您有,请联系 Percona
问题或需要帮助。

有关更多信息,请参阅“插件”。

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

用于连接的端口号。

- 打印
将 SQL 语句打印到 STDOUT。 指定此选项可以让您看到大部分
工具执行的语句。 您可以将此选项与“--dry-run”一起使用,例如
例。

- 进展
类型:数组; 默认值:时间,30

复制行时将进度报告打印到 STDERR。 该值是逗号分隔的
列表分为两部分。 第一部分可以是百分比、时间或迭代; 这
第二部分指定应该多久打印一次更新,以百分比、秒为单位,
或迭代次数。

- 安静的
简写:-q

不要将消息打印到 STDOUT(禁用“--progress”)。 错误和警告是
仍然打印到 STDERR。

--递归
类型:int

发现副本时要在层次结构中递归的级别数。 默认是
无限的。 另见“--recursion-method”。

--递归方法
类型:数组; 默认值:进程列表,主机

发现副本的首选递归方法。 可能的方法有:

方法用途
==============================
进程列表显示进程列表
主机显示奴隶主机
dsn=DSN 来自表的 DSN
none 不找奴隶

processlist 方法是默认的,因为 SHOW SLAVE HOSTS 是不可靠的。
但是,如果服务器使用非标准端口(不是
3306)。 该工具通常会做正确的事情并找到所有副本,但您可能会给出
首选方法,将首先使用它。

hosts 方法需要使用 report_host、report_port、
等等

dsn 方法很特殊:它指定一个表,从中读取其他 DSN 字符串。
指定的 DSN 必须指定 D 和 t,或数据库限定的 t。 DSN 表
应该具有以下结构:

创建表`dsns`(
`id` INT(11) 非空 AUTO_INCREMENT,
`parent_id` INT(11) 默认空值,
`dsn` VARCHAR(255) 非空,
主键(`id`)
);

要使该工具仅监控主机 10.10.1.16 和 10.10.1.17 的复制延迟,
将值“h=10.10.1.16”和“h=10.10.1.17”插入表中。 目前,该
DSN 按 id 排序,但 id 和 parent_id 否则将被忽略。

--设置变量
类型:数组

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

默认情况下,工具集:

等待超时=10000
innodb_lock_wait_timeout=1
锁等待超时=60

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

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

- 睡觉
类型:浮动; 默认值:0

复制每个块后休眠多长时间(以秒为单位)。 此选项在以下情况下很有用
不可能通过“--max-lag”和“--max-load”进行节流。 一个小的亚秒
应该使用值,例如 0.1,否则该工具可能需要很长时间来复制
大桌子。

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

用于连接的套接字文件。

- 统计数据
打印有关内部计数器的统计信息。 这有助于查看有多少警告
与 INSERT 的数量相比被抑制了。

--[无]交换表
默认:是

交换原始表和新的、修改过的表。 这一步完成在线
通过使具有新架构的表代替
原表。 原表变成了“旧表”,工具将其丢弃
除非您禁用“--[no]drop-old-table”。

--尝试
类型:数组

尝试关键操作的次数。 如果某些操作由于非
致命的、可恢复的错误,工具等待并再次尝试操作。 这些是
重试的操作,以及默认的尝试次数和等待时间
尝试之间(以秒为单位):

操作尝试等待
==============================
创建触发器 10 1
drop_triggers 10 1
复制行 10 0.25
交换表 10 1
update_foreign_keys 10 1
分析表 10 1

要更改默认值,请指定新值,例如:

--尝试 create_triggers:5:0.5,drop_triggers:5:0.5

这使得该工具尝试“create_triggers”和“drop_triggers”5 次,值为 0.5
尝试之间的第二次等待。 所以格式是:

操作:尝试:等待[,操作:尝试:等待]

必须指定所有三个值。

请注意,大多数操作仅在 MySQL 5.5 及更高版本中受到影响
由于元数据锁定,“lock_wait_timeout”(请参阅​​“--set-vars”)。 “复制行”
在任何版本的 MySQL 中,“innodb_lock_wait_timeout”都会影响操作。

对于创建和删除触发器,尝试次数适用于每个“CREATE
每个触发器的 TRIGGER" 和 "DROP TRIGGER" 语句。对于复制行,数量
尝试次数适用于每个块,而不是整个表。 对于交换表,数量
尝试次数通常适用一次,因为通常只有一个“重命名表”
陈述。 对于重建外键约束,尝试次数适用于
每个语句(“rebuild_constraints”的“ALTER”语句
"--alter-foreign-keys-method"; “drop_swap”方法的其他语句)。

如果发生以下错误,该工具将重试每个操作:

锁等待超时(innodb_lock_wait_timeout 和 lock_wait_timeout)
发现死锁
查询被杀死(KILL QUERY )
连接被终止(KILL CONNECTION )
与 MySQL 的连接丢失

在连接丢失和终止的情况下,该工具将自动重新连接。

失败和重试记录在“--statistics”中。

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

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

- 版
显示版本并退出。

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

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

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

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

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

PLUGIN


“--plugin”指定的文件必须定义一个名为的类(即包)
“pt_online_schema_change_plugin”带有“new()”子程序。 该工具将创建一个
此类的实例并调用它定义的任何钩子。 不需要钩子,但是一个
没有它们,插件不是很有用。

如果定义了这些钩子,则按此顺序调用:

初始化
创建新表之前
创建新表后
before_alter_new_table
after_alter_new_table
创建之前触发
创建后触发
之前_复制_行
复制行后
之前的交换表
交换表后
before_update_foreign_keys
after_update_foreign_keys
before_drop_old_table
after_drop_old_table
before_drop_triggers
退出前
获取从机滞后

每个钩子都传递了不同的参数。 要查看传递给钩子的参数,
在工具的源代码中搜索钩子的名称,例如:

# --plugin 钩子
if ( $plugin && $plugin->can('init') ) {
$plugin->init(
orig_tbl => $orig_tbl,
child_tables => $child_tables,
重命名的_cols => $renamed_cols,
奴隶 => $奴隶,
slave_lag_cxns => $slave_lag_cxns,
);
}

注释“# --plugin hook”在每个 hook 调用之前。

如果您有问题或需要帮助,请联系 Percona。

DSN 配置


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

· 一种

dsn:字符集; 副本:是

默认字符集。

·D

dsn:数据库; 副本:是

旧表和新表的数据库。

F

dsn: mysql_read_default_file; 副本:是

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

· H

dsn:主机; 副本:是

连接到主机。

·p

dsn:密码; 副本:是

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

·P

dsn:端口; 副本:是

用于连接的端口号。

·S

dsn: mysql_socket; 副本:是

用于连接的套接字文件。

·吨

dsn:表; 副本:没有

要更改的表。

·你

dsn:用户; 副本:是

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

环境


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

PTDEBUG=1 pt-online-schema-change ... > 文件 2>&1

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

系统 参赛要件


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

此工具仅适用于 MySQL 5.0.2 和更新版本,因为早期版本不
支持触发器。

使用 onworks.net 服务在线使用 pt-online-schema-changep


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad




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