Percona Toolkit 神器全攻略(开发类)
Percona Toolkit 神器全攻略(开发类)
Percona Toolkit 神器全攻略系列共八篇,前文回顾:
全文约定:
$
为命令提示符、greatsql>
为 GreatSQL 数据库提示符。在后续阅读中,依据此约定进行理解与操作
开发类
在 Percona Toolkit 中开发类共有以下工具
pt-duplicate-key-checker
:列出并删除重复的索引和外键pt-online-schema-change
:在线修改表结构pt-show-grants
:规范化和打印权限pt-upgrade
:在多个服务器上执行查询,并比较不同
pt-duplicate-key-checker
概要
检查 MySQL/GreatSQL 表中的重复或冗余索引和外键
用法
pt-duplicate-key-checker [OPTIONS] [DSN]
选项
该工具所有选项如下
最佳实践
创建一张表,包含两个重复索引
使用pt-duplicate-key-checker
工具
由上述输出的检查信息中,可以看到,表test_table
中存在冗余索引,并且给出对应可以删除重复索引的 SQL 命令
结尾的统计信息:
Size Duplicate Indexes,检查的索引占用空间大小
Total Duplicate Indexes,检查的冗余索引数量
Total Indexes,检查的总的索引数量
当然也可以直接看系统表schema_redundant_indexes
pt-online-schema-change
概要
在线修改表结构,特点是修改过程中不会造成读写阻塞
原理
工作原理是创建要更改的表的空副本,根据需要对其进行修改,然后将原始表中的行复制到新表中。复制完成后,它会移走原始表并用新表替换。默认情况下,它还会删除原始表
用法
pt-online-schema-change [OPTIONS] DSN
选项
互斥关系
该工具所有选项如下
最佳实践
先创建一张表,并插入 1 万条数据
添加一列
使用pt-online-schema-change
工具添加一列:a,类型为 INT
--print 是打印工具执行过程
--execute 确认开始
此时会输出工具的执行过程,来一段段解析
在执行前的一些状态检查及默认的操作设置
创建一张名为
_ptosc_new
的新表
对新表
_ptosc_new
增加一列 a
创建三个触发器 DELETE、UPDATE、INSERT
拷贝旧表数据到新表
分析新表,并交换新旧表,最后删除旧表
删除触发器,完成所有操作
修改字符集
将表 ptosc 的 c 字段的字符集修改为 utf8mb4
这里设置了一个
--alter-foreign-keys-method
用于设置外键约束的处理方法,设置为auto
就是自动选择处理方法
删除一列
删除外键
注意事项
在使用该工具时,需要注意以下几点:
工具在运行过程中,避免对原表进行更改,可能会出现数据不一致
使用该工具前要充分测试
最好在业务低峰时候操作
pt-show-grants
概要
显示当前数据库中所有用户的授权情况,并以 GRANT 语句现实,方便复制到其他数据库上执行
用法
pt-show-grants [OPTIONS] [DSN]
选项
最佳实践
只显示 GreatSQL 用户的授权信息
输出如下
该工具会展示 GreatSQL 用户的所有权限,用户可以直接复制输出的结果,方便粘贴到其他数据库上执行
pt-upgrade
概要
用于验证不同数据库上的 SQL 语句查询结果是否相同,有助于确定升级(或降级)到新版本的 MySQL/GreatSQL 是否安全。
用法
pt-upgrade [OPTIONS] LOGS|RESULTS DSN [DSN]
查询差异的判断主要来源以下几点:
Row count,返回的行数是否相同
Row data,返回的行数据是否相同
Warnings,返回的警告是否相同
Query time,查询的相差时间
Query errors,查询错误,在一个数据库出错,则会报告为“查询错误”
SQL errors,SQL 错误,在两个数据库都出错,则会报告为“SQL 错误”
选项
最佳实践
只需提供两个实例的连接信息和文件名,直接比较一个文件中的 SQL 在两个实例中的执行效果
使用--type
参数轻松指定文件类型,支持慢日志、通用日志、二进制日志(经 mysqlbinlog 解析)、原始 SQL 语句和 tcpdump。若未指定,则默认为慢日志。
接下来做个简单的示范,创建一个pt_upgrade_test.sql
包含了若干条测试语句
下面来看看这些语句的执行情况
本示例采用两个相同数据库进行演示。但请注意,在实际应用中,会对比两个不同数据库的相同 SQL 输出差异,因此,使用相同数据库进行对比并无实际意义。
failed_queries:查询因为某种原因而失败的 SQL 个数
not_select:非 SELECT 类型的查询被处理的 SQL 个数
queries_filtered:查询因为某种过滤条件而被排除的 SQL 个数
queries_no_diffs:执行计划没有差异的 SQL 个数
queries_read:总共读取了几个查询进行比较
queries_with_diffs:在两个数据库上的执行计划存在差异的 SQL 个数
queries_with_errors:在执行过程中遇到错误的 SQL 个数
如果
queries_with_diffs
的值不为 0,就要着重检查下差异了
本文完 :) 下章节将介绍 Percona Toolkit 神器全攻略(复制类)
版权声明: 本文为 InfoQ 作者【GreatSQL】的原创文章。
原文链接:【http://xie.infoq.cn/article/52e1ba66b1bc77e92622bc9af】。文章转载请联系作者。
评论