Percona Toolkit 安装与介绍

Percona Toolkit的安装

# yum -y install perl-IO-Socket-SSL perl-DBI perl-DBD-MySQL perl-Time-HiRes

# yum -y install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-Digest-MD5

# cd /usr/local/src/

# wget -chttps://www.percona.com/downloads/percona-toolkit/2.2.16/tarball/percona-toolkit-2.2.16.tar.gz

# tar -zxvf percona-toolkit-2.2.16.tar.gz

# cd percona-toolkit-2.2.16

# perl Makefile.PL

# make

# make install

默认是安装在 /usr/local/bin 目录下

# cd /usr/local/bin/

# ls

pt-align pt-index-usage pt-slave-find

pt-archiver pt-ioprofile pt-slave-restart

pt-config-diff pt-kill pt-stalk

pt-deadlock-logger pt-mext pt-summary

pt-diskstats pt-mysql-summary pt-table-checksum

pt-duplicate-key-checker pt-online-schema-change pt-table-sync

pt-fifo-split pt-pmp pt-table-usage

pt-find pt-query-digest pt-upgrade

pt-fingerprint pt-show-grants pt-variable-advisor

pt-fk-error-logger pt-sift pt-visual-explain

pt-heartbeat pt-slave-delay

# pt-online-schema-change

# 在线变更数据表结构,且不锁定原表,不阻塞原表的 DML 操作。

# pt-archiver

# 将 MySQL 数据库中表的记录归档到另外一个表或者文件,该工具只是归档旧的数据,对线上数据的 OLTP 查询几乎没有影响。可以将数据插入另外一台服务器的其他表中。

# pt-query-digest

# 用于分析 MySQL 服务器的慢查询日志,并格式化输出以便于查看和分析。

工具的具体使用可以参照下面的地址:

# https://www.percona.com/doc/percona-toolkit/2.1/index.html

# https://www.percona.com/doc/percona-toolkit/2.1/pt-online-schema-change.html

Percona Toolkitpt-archiver

官网地址:

# https://www.percona.com/doc/percona-toolkit/LATEST/pt-archiver.html

# 删除tsys_log表operate_time

案例数据表:

CREATE TABLE tsys_log (

nbr varchar(32) NOT NULL,

link_url varchar(128) DEFAULT NULL,

ip_address varchar(32) DEFAULT NULL,

operator varchar(32) DEFAULT NULL,

operator_name varchar(64) DEFAULT NULL,

operate_time datetime DEFAULT NULL,

operate_platform varchar(32) DEFAULT NULL,

description varchar(512) DEFAULT NULL,

PRIMARY KEY (nbr),

KEY idx_optime (operate_time)

) ENGINE=InnoDB

统计数据表占用的存储空间:

# SELECT LOWER(TABLE_SCHEMA) AS TABLE_SCHEMA,

LOWER(TABLE_NAME) AS TABLE_NAME,

ROUND(SUM(data_length+index_length)/1024/1024) AS TOTAL_MB,

ROUND(SUM(data_length)/1024/1024) as DATA_MB

FROM information_schema.`TABLES`

WHERE TABLE_SCHEMA='pt_test' AND TABLE_NAME='tsys_log'

GROUP BY TABLE_SCHEMA,TABLE_NAME;

查看物理空间的使用量:

# ls -lh| grep tsys_log.ibd

查看数据表的总记录数:

# select count(*) from tsys_log;

要删除的数据的总行数:

# select count(*) from tsys_log where operate_time

测试执行的SQL语句:

# pt-archiver --source h=localhost,u=root,p=root,P=3306,S=/usr/local/mysql/data/mysql.sock,D=pt_test,t=tsys_log --no-check-charset --where 'operate_time

解释说明:

--purge 清理数据 直接删除源表里的数据 谨慎使用

--where 指定删除条件必须的条件有字符串的要用引号括起来

--limit 表示一次要删除多少行数据这里设置为1000表示一次只删除一千行

--progress 每处理progress指定的行数后就打印一次信息

--statistics 结束的时候给出统计信息:开始的时间点,结束的时间点,查询的行数,归档的行数,删除的行数,以及各个阶段消耗的总的时间和比例,便于以此进行优化。

--no-delete 表示不删除原来的数据,注意:如果不指定此参数,所有处理完成后,都会清理原表中的数据。

--sleep 120 每次归档了limit个行记录后的休眠120秒(单位为秒)

--no-check-charset 不指定字符集

--local 不把optimize或analyze操作写入到binlog里面(防止造成主从延迟巨大)

--analyze=ds 操作结束后,优化表空间(d表示dest s表示source)

再次查看数据表所占用的存储空间:

# SELECT LOWER(TABLE_SCHEMA) AS TABLE_SCHEMA,

LOWER(TABLE_NAME) AS TABLE_NAME,

ROUND(SUM(data_length+index_length)/1024/1024) AS TOTAL_MB,

ROUND(SUM(data_length)/1024/1024) as DATA_MB

FROM information_schema.`TABLES`

WHERE TABLE_SCHEMA='pt_test' AND TABLE_NAME='tsys_log'

GROUP BY TABLE_SCHEMA,TABLE_NAME;

观察物理文件的使用空间:

# 结果发现没变化

# alter table tsys_log engine=innodb

# 再次查看该表所占用的物理存储空间

# ls -lh| grep tsys_log.ibd

# 将tsys_log表中operate_time

# pt-archiver --source h=localhost,u=root,p=root,P=3306,S=/usr/local/mysql/data/mysql.sock,D=pt_test,t=tsys_log --dest h=localhost,u=root,p=root,P=3306,S=/usr/local/mysql/data/mysql.sock,D=pt_test,t=tsys_logold --no-check-charset --where 'operate_time

查看数据表所占用的存储空间:

# ALTER TABLE tsys_log engine=innodb;

# SELECT LOWER(TABLE_SCHEMA) AS TABLE_SCHEMA,

LOWER(TABLE_NAME) AS TABLE_NAME,

ROUND(SUM(data_length+index_length)/1024/1024) AS TOTAL_MB,

ROUND(SUM(data_length)/1024/1024) as DATA_MB

FROM information_schema.`TABLES`

WHERE TABLE_SCHEMA='pt_test' AND TABLE_NAME='tsys_log'

GROUP BY TABLE_SCHEMA,TABLE_NAME;

# SELECT LOWER(TABLE_SCHEMA) AS TABLE_SCHEMA,

LOWER(TABLE_NAME) AS TABLE_NAME,

ROUND(SUM(data_length+index_length)/1024/1024) AS TOTAL_MB,

ROUND(SUM(data_length)/1024/1024) as DATA_MB

FROM information_schema.`TABLES`

WHERE TABLE_SCHEMA='pt_test' AND TABLE_NAME='tsys_logold'

GROUP BY TABLE_SCHEMA,TABLE_NAME;

# 查看物理空间的使用:

# ls -lh| grep tsys_log.ibd

# ls -lh| grep tsys_logold.ibd

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181009G0RRD700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券