Percona Toolkit 学习(三)(pt-duplicate-key-checker,)

pt-duplicate-key-checker

功能为从mysql表中找出重复的索引和外键,这个工具会将重复的索引和外键都列出来,并生成了删除重复索引的语句,非常方便
 找出多余的索引:
pt-duplicate-key-checker --user=root --password=db123 --socket=/var/tmp/mysql.sock --database=game
结果:
# ########################################################################
# game.tb_xxx                                             
# ########################################################################
# IDX_TB_CORE_URL_REWRITE_ID_PATH is a left-prefix of UNQ_TB_CORE_URL_REWRITE_ID_PATH_IS_SYSTEM_STORE_ID
# Key definitions:
#   KEY `IDX_TB_CORE_URL_REWRITE_ID_PATH` (`id_path`),
#   UNIQUE KEY `UNQ_TB_CORE_URL_REWRITE_ID_PATH_IS_SYSTEM_STORE_ID` (`id_path`,`is_system`,`store_id`),
# Column types:
#         `id_path` varchar(255) default null comment ‘id path‘
#         `is_system` smallint(5) unsigned default ‘1‘ comment ‘defines is rewrite system‘
#         `store_id` smallint(5) unsigned not null default ‘0‘ comment ‘store id‘
# To remove this duplicate index, execute:
ALTER TABLE `game`.`tb_xxx` DROP INDEX `IDX_TB_CORE_URL_REWRITE_ID_PATH`;
# ########################################################################
# Summary of indexes                                                      
# ########################################################################
# Size Duplicate Indexes   768
# Total Duplicate Indexes  1
# Total Indexes            157

pt-fingerprint

功能 额,不知道有什么用。

例子:pt-fingerprint --query "select a, b, c from users where id = 500 and create_time between ‘2015-01-01‘ and 2015-02-02‘“
结果:select a, b, c from users where id = ? and create_time between ? and ?‘

pt-fk-error-logger

Usage
pt-fk-error-logger [OPTION...] SOURCE_DSN
pt-fk-error-logger extracts and saves information about the most recent foreign key errors in a MySQL server.
打印外键错误
pt-fk-error-logger -uroot -p123456 h=127.0.0.1
把外键错误保存到表里,需要先创建表,建议表的结构如下:
pt-fk-error-logger -uroot -p123456 h=127.0.0.1 --dest h=127.0.0.1,D=db,t=foreign_key_errors
CREATE TABLE foreign_key_errors ( ts datetime NOT NULL, error text NOT NULL, PRIMARY KEY (ts) )

pt-fifo-split 

功能分割文件,将大文件按条件分割成小文件

例子:

pt-fifo-split --lines 1000000 hugefile.txt 
while [ -e /tmp/pt-fifo-split ]; do cat /tmp/pt-fifo-split; done
按一下例子能会比较快速的导入数据。
pt-fifo-split infile.txt --fifo /tmp/my-fifo --lines 1000000
while [ -e /tmp/my-fifo ]; do
   mysql -e "set foreign_key_checks=0; set sql_log_bin=0; set unique_checks=0; load data local infile ‘/tmp/my-fifo‘ into table load_test fields terminated by ‘\t‘ lines terminated by ‘\n‘ (col1, col2);"
   sleep 1;
done

Pt-find

pt-find [OPTION...] [DATABASE...]
pt-find 查找mysql表并执行指定的命令,和gnu的find命令类似
查找本机中一天以前创建的Innodb表
pt-find --user=root --password=123456 -h127.0.0.1 --ctime +1 --engine Innodb 
查找 Myisam 表 并 转成 innnodb:
pt-find --user=root --password=123456 -h127.0.0.1 --engine MyISAM --exec "ALTER TABLE %D.%N ENGINE=Innodb" 
Find tables created by a process that no longer exists, following the name_sid_pid naming convention, and remove them.
pt-find -uroot -p123456 -h127.0.0.1 --connection-id ‘\D_\d+_(\d+)$‘ --server-id ‘\D_(\d+)_\d+$‘ --exec-plus "DROP TABLE %s"
查找junk和test中的空表,并删除
pt-find -uroot -p123456 -h127.0.0.1 --empty junk test --exec-plus "DROP TABLE %s"
查找库中大小超过5G的表
pt-find --tablesize +5G
找出所有的表和索引大小并打印排序
pt-find --user=root --password=123456 -h127.0.0.1 --printf "%T\t%D.%N\n" | sort -rn
如上所述,但是这一次,其后插入数据到数据库中
pt-find --noquote --exec "INSERT INTO sysdata.tblsize(db, tbl, size) VALUES(‘%D‘, ‘%N‘, %T)"
时间: 2024-10-26 10:50:45

Percona Toolkit 学习(三)(pt-duplicate-key-checker,)的相关文章

Percona Toolkit 学习(四)(heartbeat, index-usage,ioprofile,killmextmysql-summary)

seconds_behind_master含义及不足 seconds_behind_master的值是通过将salve服务器当前的时间戳与二进制日志中的事件的时间戳相比得到的,所以只有执行事件时才会报告延迟. 1.1 如果备库复制线程没有运行,就会报延迟为null.1.2 一些错误比如网络不稳定可能导致复制中断或停止复制线程,但是seconds_behind_master将显示为0,而不是显示错误1.3 即使备库线程正在运行,备库有时候可能无法计算延时,如果发生这种情况,备库会报0或者null.

Percona Toolkit 学习(二)(pt-config-diff,pt-deadlock-logger,pt-diskstats)

pt-config-diff 比较mysql配置文件和服务器参数 示例: pt-config-diff /etc/my.cnf h=192.168.53.11 --user=root --password=123456 --socket=/tmp/mysql.sock pt-config-dirr /etc/my.cnf /etc/my_slave.cnf 内容如下: 21 config differences Variable                  /etc/my.cnf     

pt(Percona Toolkit)工具详解:(一)安装

pt(Percona Toolkit)工具是由Percona公司开发的一个用perl语言编写的工具集,包含很多功能,例如在线更改数据表结构,校验主从数据,检查数据库状态,分析慢查询等这些靠人手做起来比较麻烦的事情,功能强大,操作简单. 安装 既然是perl语言开发的工具集,那当然是先安装perl相关依赖包了 yum install -y perl perl-IO-Socket-SSL perl-DBD-MySQL perl-Time-HiRes perl-Digest-MD5 然后,就到下面这个

Percona Toolkit mysql辅助利器

1 PT介绍 Percona Toolkit简称pt工具—PT-Tools,是Percona公司开发用于管理MySQL的工具,功能包括检查主从复制的数据一致性.检查重复索引.定位IO占用高的表文件.在线DDL等,DBA熟悉掌握后将极大提高工作效率. 2 PT 安装 下载地址 :https://www.percona.com/downloads/percona-toolkit/ 下载完上传到linux 服务器 安装PT [[email protected] ~]# yum -y install p

Percona Toolkit 安装

Percona Toolkit(pt工具)是一组用于维护数据库的命令行工具, 大部分是Perl脚本, 其连接数据库, 需要DBI和DBD::mysql的支持. 直接使用yum安装这两个软件包就行. # yum install perl-DBI perl-DBD-MySQL 安装pt工具的依赖后, 就是安装pt本身了(percona-toolkit-3.0.3_x86_64.tar.gz), 这里指定其安装的目录. # perl Makefile.PLPREFIX=/usr/local/perco

MongoDB入门学习(三):MongoDB的增删查改

对于我们这种菜鸟来说,最重要的不是数据库的管理,也不是数据库的性能,更不是数据库的扩展,而是怎么用好这款数据库,也就是一个数据库提供的最核心的功能,增删查改. 因为MongoDB存储数据都是以文档的模式,所以在操作它的数据时,也是以文档为单位的.那么我们实现增删查改也是以文档为基础,不知道文档是什么的同学可以看看上篇介绍的基本概念. 1.插入文档 向MongoDB集合中插入文档的基本方法是insert: 单个插入 > document = {key : value} > db.collecti

Centos 安装Percona Toolkit工具集

1.下载 下载地址:   https://www.percona.com/downloads/percona-toolkit/LATEST/ [[email protected] ~]# wget https://www.percona.com/downloads/percona-toolkit/3.0.13/binary/redhat/7/x86_64/percona-toolkit-3.0.13-re85ce15-el7-x86_64-bundle.tar 2.安装 [[email prot

on duplicate key update简单使用

1.最近在做项目的时候,遇到这样的一个问题,就是我每做完一件事情,都要更新一下统计表,然而要更新统计表,就要根据主键去统计表里面去查询是否已经有这样的一条记录,如果有那么就更新,如果没有那么就插入一条记录,开始我就是这么干的,结果被老大给否决了,他说可以用on duplicate key update去做.下面就实际操作一下吧: 表结构: +-----------+---------+------+-----+---------+-------+| Field     | Type    | N

mysql:on duplicate key update与replace into

在往表里面插入数据的时候,经常需要:a.先判断数据是否存在于库里面:b.不存在则插入:c.存在则更新 一.replace into 前提:数据库里面必须有主键或唯一索引,不然replace into 会直接插入新数据,导致数据表里面有重复数据 执行时先尝试插入数据: a.当数据表里面存在(通过主键或唯一索引来判断)该数据,则先将表里的数据删除,再插入新的数据 b.如果数据表里面不存在该数据,则直接插入数据 replace into是insert into的增强版,语法跟insert iton差不