一、 工具简介
percona-toolkit
- 检查
master 和 slave 数据的一致性 - 有效地对记录进行归档
- 查找重复的索引
- 对服务器信息进行汇总
- 分析来自日志和
tcpdump 的查询 - 当系统出问题的时候收集重要的系统信息
二、工具安装
①、下载安装包
Percona-toolkit
最新
最新编译包:http://percona.com/get/percona-toolkit.tar.gz (本文略)
Perl-TermReadKey
访问:http://pkgs.repoforge.org/perl-TermReadKey/ 下载最新
②、安装记录
若发现缺失组件,则使用
yum install -y perl-IO-Socket-SSL
成功安装后,系统会多出如下
三、使用初探
pt
- pt-online-schema-change
①、功能介绍
如果没有这个工具,直接使用
- 按照原始表(original_table)的表结构和
DDL 语句,新建一张不可见的临时表; - 在原表上加
write lock,此时对原表的所有 U D I DDL 都是阻塞的; - 执行
insert into tmp_table select * from oldtable; - rename oldtable 和 tmp_table,再
drop oldtable; - 释放 write lock。
为了避免锁表,该换 pt-online-schema-change 出马了!
pt-online-schema-change 的 工作过程解析如下:
- 如果存在外键,根据
alter-foreign-keys-method 参数的值,检测外键相关的表,做相应设置的处理。 - 创建一个和你要执行 alter 操作的表一样的新的空表结构
(是 alter 之前的结构)。 - 在新表执行
alter table 语句,
在原表中创建触发器(3个)三个触发器分别对应 insert,update,delete 操作
从原表拷贝数据到临时表,拷贝过程中通过原表上的触发器在原表进行的写操作都会更新到新建的临时表。 - Rename 原表到
old 表中,在把临时表 Rename 为原表,默认最后将原表删除,将原表上所创建的触发器删除。
因此,这个工具有如下限制:
- 表必须是单一列的主键或者单一唯一键。
- 若表存在外键,则需要指定参数 --alter-foreign-keys-method=auto|rebuild_constraints|drop_swap|none,而且外键不能有错误
- 表上不能有触发器,否则修改失败。如果有触发器,需要先删除触发器再执行
PT,最后再增加触发器。
②、demo
③、测试记录
在测试数据库上随便导入了一份现网的数据,居然就让我碰到了触发器和外键,人品不错!
测试数据,本机无密码,所以直接执行:
结果如下报错:
对象表存在触发器!于是,将其中某个表的触发器全部删除,继续执行,又发现如下错误:
对象表存在外键!
于是加入 –alter-foreign-keys-method=drop_swap 参数成功执行:
四、教程分享
除此之外,percona-toolkit 还有很多实用功能,比如:
pt-config-diff : 比较本地与远程
pt-heartbeat : MySQL
pt-slave-find : 查找和打印所有从服务器复制层级关系
pt-table-checksum : 主从复制一致性检查
等等
转载请注明:代码学堂>数据库 > MySQL教程 > MySQL命令行工具:percona-toolkit安装使用初探