GoGPT Best VPN GoSearch

OnWorks 网站图标

pt-findp - 云端在线

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

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

程序:

您的姓名


pt-find - 查找 MySQL 表并执行操作,如 GNU find。

概要


用法:pt-find [选项] [数据库]

pt-find 搜索 MySQL 表并执行操作,如 GNU find。 默认操作
是打印数据库和表名。

查找一天前创建的所有使用 MyISAM 引擎的表,并打印它们
绍菜、黄芽菜、结球白菜、包心白菜

pt-find --ctime +1 --engine MyISAM

查找 InnoDB 表并将它们转换为 MyISAM:

pt-find --engine InnoDB --exec "ALTER TABLE %D.%N ENGINE=MyISAM"

查找由不再存在的进程创建的表,遵循 name_sid_pid 命名
约定,并删除它们。

pt-find --connection-id '\D_\d+_(\d+)$' --server-id '\D_(\d+)_\d+$' --exec-plus "DROP TABLE %s"

在 test 和垃圾数据库中找到空表,并删除它们:

pt-find --empty 垃圾测试 --exec-plus "DROP TABLE %s"

查找总大小超过 XNUMX GB 的表:

pt-find --tablesize +5G

查找所有表并打印它们的总数据和索引大小,并首先对最大的表进行排序
(顺便说一下,sort 是一个不同的程序)。

pt-find --printf "%T\t%D.%N\n" | 排序 -rn

同上,但是这一次,将数据插入回数据库以供后代使用:

pt-find --noquote --exec "INSERT INTO sysdata.tblsize(db, tbl, size) VALUES('%D', '%N', %T)"

风险


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

· 阅读工具的文档

· 查看工具已知的“BUGS”

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

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

商品描述


pt-find 查找通过您指定的测试的 MySQL 表,并执行操作
你指定。 默认操作是将数据库和表名打印到 STDOUT。

pt-find 比 GNU find 简单。 它不允许您指定复杂的表达式
在命令行上。

pt-find 在可能的情况下使用 SHOW TABLES,并在需要时使用 SHOW TABLE STATUS。

OPTION 类型


共有三种类型的选项: 正常选项,用于确定某些行为或
环境; 测试,确定一个表是否应包含在表列表中
成立; 和操作,它们对 pt-find 找到的表做一些事情。

pt-find 使用标准的 Getopt::Long 选项解析,所以你应该使用双破折号
长选项名称的前面,与 GNU find 不同。

配置


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

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

- 不区分大小写
指定所有正则表达式搜索不区分大小写。

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

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

--配置
类型:数组

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

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

连接到这个数据库。

--一天开始
从今天开始而不是从今天开始测量时间(对于“--mmin”等)
当前时间。

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

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

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

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

连接到主机。

——或
将测试与 OR 结合,而不是 AND。

默认情况下,测试的评估就像它们之间存在 AND 一样。 这个选项
将其切换为 OR。

选项解析不是pt-find自己实现的,所以不能指定complex
带括号的表达式以及 OR 和 AND 的混合。

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

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

--pid
类型:字符串

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

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

用于连接的端口号。

--[无]引用
默认:是

用 MySQL 的标准反引号引用 MySQL 标识符名称。

引用发生在测试运行之后,动作运行之前。

--设置变量
类型:数组

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

默认情况下,工具集:

等待超时=10000

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

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

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

用于连接的套接字文件。

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

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

- 版
显示版本并退出。

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

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

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

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

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

试验
大多数测试根据 SHOW TABLE STATUS 输出列检查某些标准。 数字
参数可以指定为 +n 表示大于 n,-n 表示小于 n,n 表示正好
n. 所有数字选项都可以采用 k、M 或 G (1_024,
1_048_576 和 1_073_741_824)。 所有模式都是 Perl 正则表达式
(参见'man perlre')除非指定为 SQL LIKE 模式。

日期和时间都是相对于同一时刻测量的,当 pt-find 首先询问
数据库服务器现在几点了。 所有的日期和时间操作都是在 SQL 中完成的,所以如果你
说要查找 5 天前修改过的表,转换为 SELECT
DATE_SUB(CURRENT_TIMESTAMP,间隔 5 天)。 如果您指定“--day-start”,当然是
而是相对于 CURRENT_DATE。

但是,表大小和其他指标在瞬间并不一致。 它可以
MySQL 需要一些时间来处理所有的 SHOW 查询,而 pt-find 什么也做不了
关于那个。 这些测量是截至他们进行的时间。

如果您需要一些不在此列表中的测试,请提交错误报告,我将增强 pt-find
为你。 这真的很容易。

--autoinc
类型:字符串; 组: 测试

表的下一个 AUTO_INCREMENT 是 n。 这将测试 Auto_increment 列。

--avgrowlen
类型:尺寸; 组: 测试

表平均行长度为 n 字节。 这将测试 Avg_row_length 列。 指定的
size 可以是“NULL”以测试 Avg_row_length 为 NULL 的位置。

--校验和
类型:字符串; 组: 测试

表校验和为 n。 这将测试 Checksum 列。

--cmmin
类型:尺寸; 组: 测试

表是在 n 分钟前创建的。 这将测试 Create_time 列。

--整理
类型:字符串; 组: 测试

表排序规则匹配模式。 这将测试 Collat​​ion 列。

--列名
类型:字符串; 组: 测试

表中的列名与模式匹配。

--列类型
类型:字符串; 组: 测试

表中的列与此类型匹配(不区分大小写)。

类型示例有:varchar、char、int、smallint、bigint、decimal、year、timestamp、
文本,枚举。

- 评论
类型:字符串; 组: 测试

表注释匹配模式。 这将测试 Comment 列。

--连接ID
类型:字符串; 组: 测试

表名不存在 MySQL 连接 ID。 这将测试表名
图案。 这个测试的参数必须是一个 Perl 正则表达式,它捕获
像这样的数字:(\d+)。 如果表名与模式匹配,则这些捕获的数字
被视为某些进程的 MySQL 连接 ID。 如果连接不
根据 SHOW FULL PROCESSLIST 存在,测试返回 true。 如果连接 ID
大于 pt-find 自己的连接 ID,为了安全,测试返回 false。

你为什么想做这个? 如果使用基于 MySQL 语句的复制,则
可能知道临时表可能导致的麻烦。 你可能会选择解决
这是通过创建具有唯一名称的真实表而不是临时表来实现的。 单程
这样做是将您的连接 ID 附加到表的末尾,因此:
划痕表_12345。 这确保了表名是唯一的,并让您有办法
找到它与哪个连接相关联。 也许最重要的是,如果
连接不再存在,您可以假设连接已死亡而无需清理
它的表,而这个表是一个要删除的候选表。

这就是我管理临时表的方式,这就是我在 pt-find 中包含此测试的原因。

我用来“--connection-id”的参数是“\D_(\d+)$”。 找到带有
末尾的一系列数字,前面是下划线和一些非数字字符
(后一个标准阻止我检查最后有日期的表格,这
人们倾向于这样做:例如 baron_scratch_2007_05_07)。 最好保留
当然,临时表是分开的。

如果您这样做,请确保用户 pt-find 以具有 PROCESS 特权的身份运行!
否则它只会看到来自同一用户的连接,并且可能会认为某些表
当它们仍在使用时准备好移除。 为了安全起见,pt-find 会检查这个
你。

另请参见“--server-id”。

--创建选择
类型:字符串; 组: 测试

表创建选项匹配模式。 这将测试 Create_options 列。

--ctime
类型:尺寸; 组: 测试

表是在 n 天前创建的。 这将测试 Create_time 列。

--无数据
类型:尺寸; 组: 测试

表有 n 个字节的可用空间。 这将测试 Data_free 列。 指定尺寸
可以是“NULL”来测试哪里 Data_free 是 NULL。

--数据大小
类型:尺寸; 组: 测试

表数据使用 n 个字节的空间。 这将测试 Data_length 列。 指定的
size 可以为“NULL”以测试 Data_length 为 NULL 的位置。

--dblike
类型:字符串; 组: 测试

数据库名称匹配 SQL LIKE 模式。

--dregex
类型:字符串; 组: 测试

数据库名称与此模式匹配。

- 空的
组: 测试

表没有行。 这将测试 Rows 列。

- 引擎
类型:字符串; 组: 测试

表存储引擎匹配此模式。 这将测试 Engine 列,或在
早期版本的 MySQL,Type 列。

- 功能
类型:字符串; 组: 测试

函数定义匹配模式。

--索引大小
类型:尺寸; 组: 测试

表索引使用 n 字节的空间。 这将测试 Index_length 列。 这
指定的大小可以是“NULL”以测试 Index_length 为 NULL 的位置。

--公里
类型:尺寸; 组: 测试

n 分钟前检查过表。 这将测试 Check_time 列。

--ktime
类型:尺寸; 组: 测试

n 天前检查了表。 这将测试 Check_time 列。

--分钟
类型:尺寸; 组: 测试

表最后一次修改是在 n 分钟前。 这将测试 Update_time 列。

--时间
类型:尺寸; 组: 测试

表最后一次修改是在 n 天前。 这将测试 Update_time 列。

- 程序
类型:字符串; 组: 测试

过程定义匹配模式。

--行格式
类型:字符串; 组: 测试

表行格式匹配模式。 这将测试 Row_format 列。

--行
类型:尺寸; 组: 测试

表有 n 行。 这将测试 Rows 列。 指定的大小可以是“NULL”到
测试其中 Rows 为 NULL。

--服务器ID
类型:字符串; 组: 测试

表名包含服务器 ID。 如果您使用命名创建临时表
“--connection-id”中解释的约定,还要添加服务器的服务器ID
创建哪些表,然后您可以使用此模式匹配来确保表
仅丢弃在创建它们的服务器上。 这可以防止表被
不小心掉到正在使用的从站上(前提是您的服务器 ID 是
都是独一无二的,它们应该用于复制工作)。

例如,在主服务器(服务器 ID 22)上创建一个名为
scratch_table_22_12345。 如果您在从站(服务器 ID 23)上看到此表,您可能
认为如果没有这样的连接 12345 可以安全地丢弃它。但是如果你也
强制名称与服务器 ID 匹配“--server-id '\D_(\d+)_\d+$'”,表
不会落在奴隶身上。

--表格大小
类型:尺寸; 组: 测试

表使用 n 个字节的空间。 这将测试 Data_length 和 Index_length 的总和
列。

--tbllike
类型:字符串; 组: 测试

表名匹配 SQL LIKE 模式。

--tbl正则表达式
类型:字符串; 组: 测试

表名与此模式匹配。

--版本
类型:尺寸; 组: 测试

表版本是 n。 这将测试版本列。

- 扳机
类型:字符串; 组: 测试

触发器操作语句匹配模式。

--触发表
类型:字符串; 组: 测试

“--trigger”在表匹配模式上定义。

- 看法
类型:字符串; 组: 测试

CREATE VIEW 匹配此模式。

行动
“--exec-plus”动作发生在其他所有动作之后,否则动作发生在
不确定的顺序。 如果你需要确定性,提交一个错误报告,我会添加这个
功能。

--执行
类型:字符串; 组: 动作

对找到的每个项目执行此 SQL。 SQL 可以包含转义和格式
指令(参见“--printf”)。

--exec-dsn
类型:字符串; 组: 动作

以键值格式指定 DSN 以在使用“--exec”和
“--exec-plus”。 任何未指定的值都是从命令行参数继承的。

--exec-plus
类型:字符串; 组: 动作

一次对所有项目执行此 SQL。 此选项与“--exec”不同。 有
没有转义或格式化指令; 只有一个特殊的占位符
数据库和表名列表,%s。 找到的表列表将被加入
连同逗号并替换您放置 %s 的任何位置。

例如,您可以使用它来删除您找到的所有表:

删除表 %s

这有点像 GNU find 的“-exec command {} +”语法。 只是不完全
神秘的。 而且它不需要我编写命令行解析器。

- 打印
组: 动作

打印数据库和表名,后跟换行符。 这是默认操作
如果没有指定其他动作。

--printf
类型:字符串; 组: 动作

在标准输出上打印格式,解释 '\' 转义符和 '%' 指令。
转义符是反斜杠字符,如 \n 和 \t。 Perl 解释这些,所以你可以
使用 Perl 知道的任何转义。 指令被 %s 取代,从这里开始
书写时,您不能添加任何特殊的格式说明,例如字段宽度或
对齐(尽管我正在考虑如何做到这一点)。

这是指令列表。 请注意,它们中的大多数只是来自
显示表状态。 如果该列为 NULL 或不存在,则会在
输出。 % 字符后跟不在以下列表中的任何字符是
丢弃(但打印另一个字符)。

字符数据源注释
---- ------------------ ---------------------------- --------------
一个 Auto_increment
Avg_row_length
c 校验和
C 创建时间
D Database 表所在的数据库名称
d 数据长度
E 引擎在旧版本的 MySQL 中,这是类型
F 无数据
f Innodb_free 从 Comment 字段解析
索引长度
K 检查时间
l 整理
M 最大数据长度
姓名
O 评论
P 创建_选项
R 行格式
S行
T Table_length Data_length+Index_length
U 更新时间
V版

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:用户; 副本:是

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

环境


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

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

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

系统 参赛要件


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

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


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad




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