这是 pt-upgradep 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
pt-upgrade - 验证不同服务器上的查询结果是否相同。
概要
用法:pt-upgrade [OPTIONS] LOGS|RESULTS DSN [DSN]
pt-upgrade 在每个“DSN”上的给定 MySQL“LOGS”中执行查询,比较结果,
并报告任何显着差异。 该工具还可以保存结果以备后用
分析。 “LOGS”可以是慢速、一般、二进制、tcpdump 和“原始”。
使用“slow.log”中的查询将 host2 与 host1 进行比较:
pt-升级 h=host1 h=host2 slow.log
将 host2 与来自 host1 的保存结果进行比较:
pt-upgrade h=host1 --save-results host1_results/slow.log
pt-升级 host1_results1/ h=host2
风险
Percona Toolkit 是成熟的,在现实世界中得到验证,并经过良好测试,但所有数据库
工具会给系统和数据库服务器带来风险。 在使用这个工具之前,
请:
· 阅读工具的文档
· 查看工具已知的“BUGS”
· 在非生产服务器上测试该工具
· 备份您的生产服务器并验证备份
商品描述
pt-upgrade 有助于确定升级(或降级)到新版本的
MySQL。 一个安全而保守的升级计划有几个步骤,其中之一是确保
查询将在新版本的 MySQL 上产生相同的结果。
pt-upgrade 执行来自慢速、通用、二进制、tcpdump 和“原始”日志的查询。
服务器,比较每个查询的执行和结果的许多方面,并报告任何
显着差异。 两台服务器通常是开发服务器,一台运行
当前生产版本的 MySQL 和另一个运行新版本的 MySQL。
用途 機箱
pt-upgrade 有两个用例。 第一个规范案例是运行“主机到主机”。 一个日志
命令行上给出了文件和两个 DSN,每个 MySQL 服务器一个。 看第一个
“概要”中的示例。 查询作为工具在每台服务器上执行和比较
运行。 有差异的查询会在工具运行时或完成时打印(请参阅
“当报告查询时”)。 什么都没有保存到磁盘,所以这个用例需要更少
硬盘空间,但如果运行该工具,则必须在两台服务器上执行查询
再一次,即使其中一台服务器没有改变。 如果有很多查询或
执行它们需要很长时间,而且一台服务器不会改变,你可能想使用
第二个用例。
第二个用例是运行“对主机的引用结果”。 参考结果是
来自单个 MySQL 服务器的完整结果,保存到磁盘。 在这种情况下,您必须首先
使用“--save-results”生成参考结果,然后再次运行该工具以
将另一个 MySQL 服务器与结果进行比较。 请参阅“概要”中的第二个示例。
结果通常是针对不会更改的当前 MySQL 版本生成的。
此用例可能需要 a 很多 磁盘空间,因为所有的结果(即行)
必须保存查询以及有关查询的其他数据。 如果你打算做很多
与固定版本的 MySQL 相比,此用例更有效。 或者如果你
不能同时访问两台服务器,此用例允许您“执行
现在,稍后比较”。
重要 注意事项
一致性
一致的环境和一致的数据对于获得准确的报告至关重要。
pt-upgrade 永远不应该在生产服务器或任何活动服务器上运行,因为有
确保每个查询的同步读取并不容易。 如果数据在任一
服务器在 pt-upgrade 运行时,报告可能包含比
合法的差异。 pt-升级 假设 这 都 MySQL 台服务器 旨在 静态的, 不变
(除了 HPMC胶囊 任何 变化 made by 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 工具 if 跑 - “--无只读”)。 一个只读
工作负载不应该影响工具,除了查询时间,所以只读从站可能是
用过的。
相比 TO
在主机到主机的比较中,来自第一个主机的结果建立了规范,
比较来自第二个主机的结果。 在与主机比较的参考结果中,
参考结果是与主机进行比较的标准。 比较短语如
“小于”、“优于”等表示与规范相比。
例如,如果一个事件的查询时间在第一台主机上是 0.01,在第一台主机上是 0.5
第二个主机,这是一个显着的差异,因为 0.5 比 0.1 差,所以
查询将被报告。
只读
默认情况下,pt-upgrade 只执行“SELECT”和“SET”语句。 (这不
包括“SELECT...INTO”语句,它不返回行而是将输出转储到文件或
变量。)如果您使用可重新创建的测试或开发服务器并希望进行比较
也写语句(例如“插入”、“更新”、“删除”),然后指定“--no-read-only”。
如果使用二进制日志,则必须指定“--no-read-only”,因为二进制日志不包含
“选择”语句。 请参阅“--[no]只读”。
交易
该工具不会创建自己的交易,但“LOG”中的任何交易都是
按原样执行。 由于日志是串行的,事务通常不应该成为问题。 如果,
但是,您需要比较以某种方式与事务相关的查询(其中
如果您可能还需要禁用“--[no]read-only”),那么 pt-upgrade 可能不会
做你需要做的,因为它不是为此目的而设计的。
pt-upgrade 默认使用“autocommit=1”运行。
节流
pt-upgrade 没有限制选项,因为该工具只能在专用
测试或开发服务器。 Do 而不去 运行 pt-升级 on 最佳的 服务器!
因此,该工具是 CPU、内存、磁盘和网络密集型的。 它执行查询
尽可能快地。
QUERY 差异性
通过比较每个查询的这些方面来确定显着的查询差异
两位主持人:
行数
查询返回的行数应该相同。 这被报告为
“行差异”下的“缺失行”。
行数据
查询返回的行数据应该是一样的。 所有的差异都是
重要:空格、浮点精度等。
</p>
查询不应产生任何错误或警告,或产生相同的错误
或警告。
查询时间
一个查询很少以恒定时间执行,但它的执行时间应该在
相同数量级或更小。
查询错误
如果查询仅在一台主机上导致 SQL 错误,则会将其报告为“查询错误”。
由于查询在一台主机上工作,它的语法可能是有效的,并且错误是由于
到其他主机独有的某些条件。
SQL 错误
如果查询在两台主机上都导致 SQL 错误,则会将其报告为“SQL 错误”。 这
查询的 SQL 语法可能无效。
报告
当 pt-upgrade 运行时,它会尽快打印具有差异的查询(请参阅“WHEN
QUERIES ARE REPORTED”)。为了防止报告变得太长,查询不是
单独报告,但按指纹分组。 查询指纹是
查询的抽象形式,通过删除文字值、规范化空格创建,
等等 所以这些查询属于同一个类:
从 t 中选择 c 在哪里 id = 1
从 t WHERE id=5 选择 c
从 t 中选择 c,其中 id = 9
这些查询的指纹是:
从 t 中选择 c 其中 id=?
每个查询类最多可以有“--max-class-size”唯一查询(默认为 1,000)。 向上
对于每个查询类,针对每种类型的差异报告“--max-examples”。 凭借
在同一类中,一个查询差异的例子通常是有代表性的
具有相同差异的所有查询,因此没有必要报告每个示例。
具有特定差异的类中的查询总数在
报告。
例
#------------------------------------------------- ---------------
# 日志
#------------------------------------------------- ---------------
文件:/opt/mysql/slow.log
大小:59700
#------------------------------------------------- ---------------
# 主机
#------------------------------------------------- ---------------
主机 1:
DSN:h=127.1,P=12345
主机名:dev1
MySQL:MySQL 5.1.68
主机 2:
DSN:h=127.1,P=12348
主机名:dev2
MySQL:MySQL 5.5.10
############################################### ######################
# 查询类 AAD020567F8398EE
############################################### ######################
报告类,因为它有差异,但尚未报告。
查询总数 1
唯一查询 1
丢弃的查询 0
插入 t (id, username) 值(?+)
##
##警告差异:1
##
——1。
代号:1265
级别:警告
消息:第 1 行“用户名”列的数据被截断
与
没有警告 1265
INSERT INTO t (id, username) VALUES (NULL, 'long_username')
#------------------------------------------------- ---------------
# 统计
#------------------------------------------------- ---------------
失败查询 0
不_选择 0
查询过滤 0
query_no_diffs 0
查询_读取 1
query_with_diffs 1
query_with_errors 0
“查询类”部分是最重要的,因为它们列出了“QUERY
DIFFERENCES”。本节的第一部分列出了查询类被删除的原因
报告,然后是类中的查询计数,然后是指纹
定义类。
查询类部分的其余部分列出了导致类
被举报。 每种类型的差异都以双井号标头开头,其中列出了
类中查询的类型和总数有区别。 然后到
列出了“--max-examples”,编号为“-- 1.”、“--- 2.”等。每个示例都列出了
第一台主机和第二台主机的区别(对应于“主机”部分),然后是
揭示差异的第一个 SQL 语句。
WHEN 查询 保健 报道
一旦出现“QUERY DIFFERENCES”或查询错误中的任何一个,就会报告一个查询类
有“--max-examples”。 否则,当工具
饰面。
例如,如果发现一个查询类有两个查询时间差,则不上报
然而。 一旦发现第三个查询时差,则报告查询类别,包括
可能已经发现的任何其他差异。 课程查询将继续
将被执行,但不会再次报告该类。
OUTPUT
工具运行时,“REPORT”将打印到 STDOUT。 内部警告、错误和
“--progress”被打印到 STDERR。 要将两者分开,请运行该工具,如:
pt-upgrade ... 1>report 2>err &
然后在工具运行时“tail -f err”以跟踪其“--progress”。
退出 状态
一般情况下,如果工具正常完成并且没有内部
警告或错误,并且没有找到“查询差异”。 否则工具退出非零
带有以下一个或多个代码:
·1
内部错误或警告过多; 见 STDERR。 也可以看看
“--[no] 继续出错”。
·4
有“查询差异”; 见“报告”。
·8
“--run-time”已过期; 该工具未完成读取日志或参考结果。
其他退出代码表示该工具意外崩溃或死亡。 错误的是
导致这应该打印到 STDERR。
要检查特定的退出代码,请使用逻辑“AND”(“&”)将最终退出状态与
退出代码。 例如,退出状态 5 表示代码 1 和 4,因为“5 & 1”为真,并且
“5 & 4”是真的。
配置
此工具接受额外的命令行参数。 参考“概要”和用法
详细信息。
--询问通行证
连接 MySQL 时提示输入密码。
--字符集
简写:-A; 类型:字符串
默认字符集。 如果值为 utf8,则将 STDOUT 上的 Perl 的 binmode 设置为 utf8,
将 mysql_enable_utf8 选项传递给 DBD::mysql,然后运行 SET NAMES UTF8
连接到 MySQL。 任何其他值在没有 utf8 层的 STDOUT 上设置 binmode,
并在连接到 MySQL 后运行 SET NAMES。
--配置
类型:数组
阅读这个逗号分隔的配置文件列表; 如果指定,这必须是第一个
命令行选项。
--[无]继续出错
默认:是
即使有错误也继续解析。 该工具不会永远持续下去:它
在 100 个错误后停止,在这种情况下,工具或输入中可能存在错误
是无效的。
--[否]创建升级表
默认:是
创建“--upgrade-table”数据库和表。
--守护进程
叉到后台并从外壳上分离。 仅限 POSIX 操作系统。
- 数据库
简写:-D; 类型:字符串
连接到 MySQL 时的默认数据库。
--defaults-文件
简写:-F; 类型:字符串
仅从给定文件中读取 MySQL 选项。 您必须提供绝对路径名。
--[no] 禁用查询缓存
默认:是
“SET SESSION query_cache_type = OFF”禁用查询缓存。
--试运行
运行但不执行或比较查询。 这对于检查命令行很有用
选项、与 MySQL 的连接以及日志或参考结果解析。
- 筛选
类型:字符串
允许此 Perl 代码返回 true 的事件。
请参阅 pt-query-digest 文档中的相同选项。
- 帮帮我
显示帮助并退出。
- 主持人
简写:-h; 类型:字符串
MySQL 主机名或 IP。
--忽略警告
类型:哈希
比较警告时忽略这些 MySQL 警告代码。
- 日志
类型:字符串
守护进程时将 STDOUT 和 STDERR 打印到此文件。 此选项仅生效
当指定“--daemonize”时。 如果文件不存在则创建,否则输出
附加到它。
--最大班级规模
类型:int; 默认值:1000
每个查询类中唯一查询的最大数量。 见“报告”。
--max-示例
类型:int; 默认值:3
为每个“查询差异”列出的最大示例数。 查询类是
一旦发现任何类型的查询差异的这么多示例,就会立即报告。
- 密码
简写形式:-p; 类型:字符串
“--user”的MySQL密码。
--pid
类型:字符串
创建给定的 PID 文件。 如果 PID 文件已经存在并且该工具将不会启动
它包含的 PID 与当前 PID 不同。 但是,如果 PID 文件
存在并且它包含的 PID 不再运行,该工具将覆盖 PID
带有当前 PID 的文件。 工具退出时,PID 文件会自动删除。
- 港口
简写形式:-P; 类型:int
MySQL 端口号。
- 进展
类型:数组; 默认值:时间,30
向 STDERR 打印进度报告。 该工具在读取日志时打印进度报告
或参考结果,粗略估计完成前需要多长时间。
该值是一个包含两部分的逗号分隔列表。 第一部分可以是百分比,
时间,或迭代; 第二部分指定应该多久打印一次更新,
以百分比、秒或迭代次数表示。
--[无]只读
默认:是
只执行“SELECT”和“SET”语句。 如果指定了“--no-read-only”, 所有
执行查询:“DROP”、“DELETE”、“UPDATE”等。即使在默认情况下运行
只读模式,您应该使用只有“SELECT”权限的 MySQL 用户来确保
针对工具中的错误。
- 报告
类型:哈希; 默认值:主机、日志、查询、统计信息
打印“报告”的这些部分。
- 运行
类型:时间
退出前运行多长时间。 默认情况下,该工具运行直到它完成读取
日志或参考结果。
--保存结果
类型:字符串
将参考结果保存到此目录。 此选项仅在有一个 DSN 时有效
指定,生成参考结果。 将主机与参考结果进行比较时,
指定其结果目录而不是其 DSN。 见第二个例子
“概要”。
参考结果可以使用 a 很多 磁盘空间。
--设置变量
类型:数组
在这个逗号分隔的“变量=值”对列表中设置 MySQL 变量。
默认情况下,工具集:
等待超时=10000
在命令行上指定的变量会覆盖这些默认值。 例如,
指定“--set-vars wait_timeout=500”会覆盖默认值 10000。
如果无法设置变量,该工具会打印警告并继续。
- 插座
简写:-S; 类型:字符串
用于连接的套接字文件。
- 类型
类型:字符串; 默认值:慢日志
日志文件的类型。 有效类型是:
值日志类型
==================================================
慢日志 MySQL 慢日志
genlog MySQL 一般日志
binlog MySQL 二进制日志(由 mysqlbinlog 转换)
rawlog 每行一个 SQL 语句的自定义日志
--升级表
类型:字符串; 默认值:percona_schema.pt_upgrade
使用此表清除警告。 要清除以前查询的所有警告,请 pt-
upgrade 在执行之前在每个主机上执行“SELECT * FROM --upgrade-table LIMIT 1”
每个查询。
该表必须是数据库限定的。 数据库和表是自动的
除非指定了“--no-create-upgrade-table”(请参阅
“--[no]create-upgrade-table”)。 如果该表不存在,则创建它
有了这个定义:
创建表 pt_upgrade (
id INT NOT NULL 主键
)
- 用户
简写:-u; 类型:字符串
MySQL 用户,如果不是当前系统用户。
- 版
显示版本并退出。
--[无]版本检查
默认:是
检查 Percona Toolkit、MySQL 和其他程序的最新版本。
这是一个标准的“自动检查更新”功能,还有两个额外的
特征。 首先,该工具在本地系统中检查其他程序的版本
除了它自己的版本。 例如,它检查每个 MySQL 服务器的版本
它连接到 Perl 和 Perl 模块 DBD::mysql。 其次,它检查并警告
关于存在已知问题的版本。 例如,MySQL 5.5.25 有一个严重的错误并且
被重新发布为 5.5.25a。
在工具正常输出之前,任何更新或已知问题都会打印到 STDOUT。
此功能不应干扰工具的正常操作。
欲了解更多信息,请访问.
--监视服务器
类型:字符串
仅解析此 IP:port 的“--type”tcpdump 事件。 所有其他 IP 地址都是
忽略。 如果未指定,pt-upgrade 通过查找任何 IP 来监视所有服务器
地址使用端口 3306 或“mysql”。 如果您正在观看具有非标准的服务器
端口,这将不起作用,因此您必须指定要监视的 IP 地址和端口。
如果您想观看混合服务器,一些在标准端口 3306 上运行,一些在
在非标准端口上运行,您需要为
非标准端口服务器,然后为每个服务器指定此选项。 目前 pt-
升级不能自动检测端口 3306 上的服务器,也不能被告知在
非标准端口。
DSN 配置
这些 DSN 选项用于创建 DSN。 每个选项都像“option=value”一样给出。
选项区分大小写,因此 P 和 p 不是同一个选项。 不可能有
“=”之前或之后的空格,如果该值包含空格,则必须是
引。 DSN 选项以逗号分隔。 请参阅 percona-toolkit 联机帮助页以获取完整信息
细节。
· 一种
dsn:字符集; 副本:是
默认字符集。
·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:用户; 副本:是
如果不是当前用户,则用于登录的用户。
环境
环境变量“PTDEBUG”启用对 STDERR 的详细调试输出。 启用
调试并将所有输出捕获到文件中,运行该工具,如:
PTDEBUG=1 pt-upgrade ... > 文件 2>&1
请注意:调试输出量很大,可能会生成几兆字节的输出。
系统 参赛要件
你需要 Perl、DBI、DBD::mysql 和一些应该安装在任何地方的核心包。
相当新版本的 Perl。
使用 onworks.net 服务在线使用 pt-upgradep