自学内容网 自学内容网

09、PT工具用法

目录

1、PT工具原理

2、在线修改表结构

3、使用pt-query-diges分析慢查询

4、使用pt-kill来kill掉一些垃圾SQL

5、pt-table-checksum进行主从一致性排查和修复

6、pt-archiver进行数据归档

7、其他一些pt工具


1、PT工具原理

创建一张与原始表结构相同的临时表 然后对临时表进行表结构变更 通过触发器实现增量数据处理 将原始表中的数据复制到新表中 把原始表重命名为 _x_old,将临时表重命名为x 删除 _xxx_old表,删除3个触发器 表结构变更完成。

使用注意事项:表必须有主键或唯一索引、保证足够空间、原表上不能有触发器。

2、在线修改表结构

示例:

pt工具安装
wget https://downloads.percona.com/downloads/percona-toolkit/3.5.4/binary/redhat/7/x86_64/percona-toolkit-3.5.4-2.el7.x86_64.rpm
yum install percona-toolkit-3.5.4-2.el7.x86_64.rpm
​
创建测试用户测试表
CREATE USER 'pt_osc'@'localhost' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'iUdy87G_caq';
GRANT create,drop,alter,insert,delete,select,update,process,replication slave,trigger ON *.* TO 'pt_osc'@'localhost';
​
use martin
CREATE TABLE users_info (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(50)
);
INSERT INTO users_info (id, name, email) VALUES (1, 'John', 'john@example.com');
INSERT INTO users_info (id, name, email) VALUES (2, 'Jane', 'jane@example.com');
​
可以打开generallog方便观察分析
set global general_log=on
tail -f /data/mysql/log/mysql-general.log

用pt-osc增加字段

增加字段
pt-online-schema-change -u pt_osc -p 'iUdy87G_caq' -S /tmp/mysql.sock  --alter "ADD COLUMN age INT" -- D=martin,t=users_info
​
删除列
pt-online-schema-change -u pt_osc -p 'iUdy87G_caq' -S /tmp/mysql.sock  --alter "DROP COLUMN age" --execute D=martin,t=users_info
​
修改列类型
pt-online-schema-change -u pt_osc -p 'iUdy87G_caq' -S /tmp/mysql.sock  --alter "MODIFY COLUMN email varchar(100)" --execute D=martin,t=users_info
​
修改列名
pt-online-schema-change -u pt_osc -p 'iUdy87G_caq' -S /tmp/mysql.sock  --alter "CHANGE COLUMN name user_name varchar(50)" --execute --no-check-alter D=martin,t=users_info
​
添加索引
pt-online-schema-change -u pt_osc -p 'iUdy87G_caq' -S /tmp/mysql.sock  --alter "ADD INDEX index_user_name (user_name)" --execute D=martin,t=users_info
​
删除索引
pt-online-schema-change -u pt_osc -p 'iUdy87G_caq' -S /tmp/mysql.sock  --alter "DROP INDEX index_user_name" --execute D=martin,t=users_info
​
构造重复数据
INSERT INTO users_info (id, user_name, email) VALUES (3, 'John', 'john1@example.com');
​
使用pt-osc添加唯一索引
pt-online-schema-change -u pt_osc -p 'iUdy87G_caq' -S /tmp/mysql.sock  --alter "ADD unique key uniq_user_name (user_name)" --execute D=martin,t=users_info
    可以通过这个语句查看添加唯一索引的字段是否有重复值
    SELECT IF(COUNT(DISTINCT user_name) = COUNT(*),
       'Yes, the desired unique index currently contains only unique

原文地址:https://blog.csdn.net/Timebro/article/details/145210909

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!