mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-01 18:25:59 +00:00
613 lines
16 KiB
Plaintext
613 lines
16 KiB
Plaintext
=pod
|
|
|
|
=head1 NAME
|
|
|
|
percona-toolkit - Advanced command-line tools for MySQL
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
Percona Toolkit is a collection of advanced command-line tools used by
|
|
Percona (L<http://www.percona.com/>) support staff to perform a variety of
|
|
MySQL and system tasks that are too difficult or complex to perform manually.
|
|
|
|
These tools are ideal alternatives to private or "one-off" scripts because
|
|
they are professionally developed, formally tested, and fully documented.
|
|
They are also fully self-contained, so installation is quick and easy and
|
|
no libraries are installed.
|
|
|
|
Percona Toolkit is derived from Maatkit and Aspersa, two of the best-known
|
|
toolkits for MySQL server administration. It is developed and supported by
|
|
Percona. For more information and other free, open-source software
|
|
developed by Percona, visit L<http://www.percona.com/software/>.
|
|
|
|
=head1 TOOLS
|
|
|
|
This release of Percona Toolkit includes the following tools:
|
|
|
|
=over
|
|
|
|
=item pt-align
|
|
|
|
Align output from other tools to columns.
|
|
|
|
=item pt-archiver
|
|
|
|
Archive rows from a MySQL table into another table or a file.
|
|
|
|
=item pt-config-diff
|
|
|
|
Diff MySQL configuration files and server variables.
|
|
|
|
=item pt-deadlock-logger
|
|
|
|
Log MySQL deadlocks.
|
|
|
|
=item pt-diskstats
|
|
|
|
An interactive I/O monitoring tool for GNU/Linux.
|
|
|
|
=item pt-duplicate-key-checker
|
|
|
|
Find duplicate indexes and foreign keys on MySQL tables.
|
|
|
|
=item pt-eustack-resolver
|
|
|
|
Get stack traces for a selected program with eu-stack and resolve symbols.
|
|
|
|
=item pt-fifo-split
|
|
|
|
Split files and pipe lines to a fifo without really splitting.
|
|
|
|
=item pt-find
|
|
|
|
Find MySQL tables and execute actions, like GNU find.
|
|
|
|
=item pt-fingerprint
|
|
|
|
Convert queries into fingerprints.
|
|
|
|
=item pt-fk-error-logger
|
|
|
|
Log MySQL foreign key errors.
|
|
|
|
=item pt-galera-log-explainer
|
|
|
|
Filter, aggregate and summarize multiple galera logs together.
|
|
|
|
=item pt-heartbeat
|
|
|
|
Monitor MySQL replication delay.
|
|
|
|
=item pt-index-usage
|
|
|
|
Read queries from a log and analyze how they use indexes.
|
|
|
|
=item pt-ioprofile
|
|
|
|
Watch process IO and print a table of file and I/O activity.
|
|
|
|
=item pt-k8s-debug-collector
|
|
|
|
Collect debug data from a k8s/OpenShift cluster.
|
|
|
|
=item pt-kill
|
|
|
|
Kill MySQL queries that match certain criteria.
|
|
|
|
=item pt-mext
|
|
|
|
Look at many samples of MySQL C<SHOW GLOBAL STATUS> side-by-side.
|
|
|
|
=item pt-mongodb-index-check
|
|
|
|
Performs checks on MongoDB indexes
|
|
|
|
=item pt-mongodb-query-digest
|
|
|
|
Reports query usage statistics by aggregating queries from MongoDB query profiler
|
|
|
|
=item pt-mongodb-summary
|
|
|
|
Collect information about a MongoDB cluster.
|
|
|
|
=item pt-mysql-summary
|
|
|
|
Summarize MySQL information nicely.
|
|
|
|
=item pt-online-schema-change
|
|
|
|
ALTER tables without locking them.
|
|
|
|
=item pt-pg-summary
|
|
|
|
Collect information about a PostgreSQL cluster.
|
|
|
|
=item pt-pmp
|
|
|
|
Aggregate GDB stack traces for a selected program.
|
|
|
|
=item pt-query-digest
|
|
|
|
Analyze MySQL queries from logs, processlist, and tcpdump.
|
|
|
|
=item pt-secure-collect
|
|
|
|
Collect, sanitize, pack and encrypt data.
|
|
|
|
=item pt-show-grants
|
|
|
|
Canonicalize and print MySQL grants so you can effectively replicate, compare and version-control them.
|
|
|
|
=item pt-sift
|
|
|
|
Browses files created by pt-stalk.
|
|
|
|
=item pt-slave-delay
|
|
|
|
Make a MySQL slave server lag behind its master.
|
|
|
|
=item pt-slave-find
|
|
|
|
Find and print replication hierarchy tree of MySQL slaves.
|
|
|
|
=item pt-slave-restart
|
|
|
|
Watch and restart MySQL replication after errors.
|
|
|
|
=item pt-stalk
|
|
|
|
Collect forensic data about MySQL when problems occur.
|
|
|
|
=item pt-summary
|
|
|
|
Summarize system information nicely.
|
|
|
|
=item pt-table-checksum
|
|
|
|
Verify MySQL replication integrity.
|
|
|
|
=item pt-table-sync
|
|
|
|
Synchronize MySQL table data efficiently.
|
|
|
|
=item pt-table-usage
|
|
|
|
Analyze how queries use tables.
|
|
|
|
=item pt-upgrade
|
|
|
|
Verify that query results are identical on different servers.
|
|
|
|
=item pt-variable-advisor
|
|
|
|
Analyze MySQL variables and advise on possible problems.
|
|
|
|
=item pt-visual-explain
|
|
|
|
Format EXPLAIN output as a tree.
|
|
|
|
=back
|
|
|
|
For more free, open-source software developed Percona, visit
|
|
L<http://www.percona.com/software/>.
|
|
|
|
=head1 SPECIAL OPTION TYPES
|
|
|
|
Tool options use standard types (C<int>, C<string>, etc.) as well as
|
|
these special types:
|
|
|
|
=over
|
|
|
|
=item time
|
|
|
|
Time values are seconds by default. For example, C<--run-time 60> means
|
|
60 seconds. Time values support an optional suffix: s (seconds),
|
|
m (minutes), h (hours), d (days). C<--run-time 1m> means 1 minute
|
|
(the same as 60 seconds).
|
|
|
|
=item size
|
|
|
|
Size values are bytes by default. For example, C<--disk-space-free 1024>
|
|
means 1 Kibibyte. Size values support an optional suffix: k (Kibibyte),
|
|
M (Mebibyte), G (Gibibyte).
|
|
|
|
=item DSN
|
|
|
|
See L<"DSN (DATA SOURCE NAME) SPECIFICATIONS">.
|
|
|
|
=item Hash, hash, Array, array
|
|
|
|
Hash, hash, Array, and array values are comma-separated lists of values.
|
|
For example, C<--ignore-tables foo,bar> ignores tables C<foo> and C<bar>.
|
|
|
|
=back
|
|
|
|
=head1 CONFIGURATION FILES
|
|
|
|
Percona Toolkit tools can read options from configuration files. The
|
|
configuration file syntax is simple and direct, and bears some resemblances
|
|
to the MySQL command-line client tools. The configuration files all follow
|
|
the same conventions.
|
|
|
|
Internally, what actually happens is that the lines are read from the file and
|
|
then added as command-line options and arguments to the tool, so just
|
|
think of the configuration files as a way to write your command lines.
|
|
|
|
=head2 SYNTAX
|
|
|
|
The syntax of the configuration files is as follows:
|
|
|
|
=over
|
|
|
|
=item *
|
|
|
|
Whitespace followed by a hash sign (#) signifies that the rest of the line is a
|
|
comment. This is deleted. For example:
|
|
|
|
=item *
|
|
|
|
Whitespace is stripped from the beginning and end of all lines.
|
|
|
|
=item *
|
|
|
|
Empty lines are ignored.
|
|
|
|
=item *
|
|
|
|
Each line is permitted to be in either of the following formats:
|
|
|
|
option
|
|
option=value
|
|
|
|
Do not prefix the option with C<-->. Do not quote the values, even if
|
|
it has spaces; value are literal. Whitespace around the equals sign is
|
|
deleted during processing.
|
|
|
|
=item *
|
|
|
|
Only long options are recognized.
|
|
|
|
=item *
|
|
|
|
A line containing only two hyphens signals the end of option parsing. Any
|
|
further lines are interpreted as additional arguments (not options) to the
|
|
program.
|
|
|
|
=back
|
|
|
|
=head2 EXAMPLE
|
|
|
|
This config file for pt-stalk,
|
|
|
|
# Config for pt-stalk
|
|
variable=Threads_connected
|
|
cycles=2 # trigger if problem seen twice in a row
|
|
--
|
|
--user daniel
|
|
|
|
is equivalent to this command line:
|
|
|
|
pt-stalk --variable Threads_connected --cycles 2 -- --user daniel
|
|
|
|
Options after C<--> are passed literally to mysql and mysqladmin.
|
|
|
|
=head2 READ ORDER
|
|
|
|
The tools read several configuration files in order:
|
|
|
|
=over
|
|
|
|
=item 1.
|
|
|
|
The global Percona Toolkit configuration file,
|
|
F</etc/percona-toolkit/percona-toolkit.conf>. All tools read this file,
|
|
so you should only add options to it that you want to apply to all tools.
|
|
|
|
=item 2.
|
|
|
|
The global tool-specific configuration file, F</etc/percona-toolkit/TOOL.conf>,
|
|
where C<TOOL> is a tool name like C<pt-query-digest>. This file is named
|
|
after the specific tool you're using, so you can add options that apply
|
|
only to that tool.
|
|
|
|
=item 3.
|
|
|
|
The user's own Percona Toolkit configuration file,
|
|
F<$HOME/.percona-toolkit.conf>. All tools read this file, so you should only
|
|
add options to it that you want to apply to all tools.
|
|
|
|
=item 4.
|
|
|
|
The user's tool-specific configuration file, F<$HOME/.TOOL.conf>,
|
|
where C<TOOL> is a tool name like C<pt-query-digest>. This file is named
|
|
after the specific tool you're using, so you can add options that apply
|
|
only to that tool.
|
|
|
|
=back
|
|
|
|
=head2 SPECIFYING
|
|
|
|
There is a special C<--config> option, which lets you specify which
|
|
configuration files Percona Toolkit should read. You specify a
|
|
comma-separated list of files. However, its behavior is not like other
|
|
command-line options. It must be given B<first> on the command line,
|
|
before any other options. If you try to specify it anywhere else, it will
|
|
cause an error. Also, you cannot specify C<--config=/path/to/file>;
|
|
you must specify the option and the path to the file separated by whitespace
|
|
I<without an equal sign> between them, like:
|
|
|
|
--config /path/to/file
|
|
|
|
If you don't want any configuration files at all, specify C<--config ''> to
|
|
provide an empty list of files.
|
|
|
|
=head1 DSN (DATA SOURCE NAME) SPECIFICATIONS
|
|
|
|
Percona Toolkit tools use DSNs to specify how to create a DBD connection to
|
|
a MySQL server. A DSN is a comma-separated string of C<key=value> parts, like:
|
|
|
|
h=host1,P=3306,u=bob
|
|
|
|
The standard key parts are shown below, but some tools add additional key
|
|
parts. See each tool's documentation for details.
|
|
|
|
Some tools do not use DSNs but still connect to MySQL using options like
|
|
C<--host>, C<--user>, and C<--password>. Such tools uses these options to
|
|
create a DSN automatically, behind the scenes.
|
|
|
|
Other tools uses both DSNs and options like the ones above. The options
|
|
provide defaults for all DSNs that do not specify the option's corresponding
|
|
key part. For example, if DSN C<h=host1> and option C<--port=12345> are
|
|
specified, then the tool automatically adds C<P=12345> to DSN.
|
|
|
|
=head2 ESCAPING VALUES
|
|
|
|
DSNs are usually specified on the command line, so shell quoting and escaping
|
|
must be taken into account. Special characters, like asterisk (C<*>), need
|
|
to be quoted and/or escaped properly to be passed as literal characters in
|
|
DSN values.
|
|
|
|
Since DSN parts are separated by commas, literal commas in DSN values must
|
|
be escaped with a single backslash (C<\>). And since a backslash is
|
|
the escape character for most shells, two backslashes are required to pass
|
|
a literal backslash. For example, if the username is literally C<my,name>,
|
|
it must be specified as C<my\\,name> on most shells. This applies to DSNs
|
|
and DSN-related options like C<--user>.
|
|
|
|
=head2 KEY PARTS
|
|
|
|
Many of the tools add more parts to DSNs for special purposes, and sometimes
|
|
override parts to make them do something slightly different. However, all the
|
|
tools support at least the following:
|
|
|
|
=over
|
|
|
|
=item A
|
|
|
|
Default character set for the connection (C<SET NAMES>).
|
|
|
|
Enables character set settings in Perl and MySQL. If the value is C<utf8>,
|
|
sets Perl's binmode on STDOUT to utf8, passes the C<mysql_enable_utf8> option
|
|
to DBD::mysql, and runs C<SET NAMES 'utf8'> after connecting to MySQL. Other
|
|
values set binmode on STDOUT without the utf8 layer and run C<SET NAMES> after
|
|
connecting to MySQL.
|
|
|
|
Unfortunately, there is no way from within Perl itself to specify the client
|
|
library's character set. C<SET NAMES> only affects the server; if the client
|
|
library's settings don't match, there could be problems. You can use the
|
|
defaults file to specify the client library's character set, however. See the
|
|
description of the F part below.
|
|
|
|
=item D
|
|
|
|
Default database to use when connecting. Tools may C<USE> a different
|
|
databases while running.
|
|
|
|
=item F
|
|
|
|
Defaults file for the MySQL client library (the C client library used by
|
|
DBD::mysql, I<not Percona Toolkit itself>). All tools read the
|
|
C<[client]> section within the defaults file. If you omit this, the standard
|
|
defaults files will be read in the usual order. "Standard" varies from system
|
|
to system, because the filenames to read are compiled into the client library.
|
|
On Debian systems, for example, it's usually C</etc/mysql/my.cnf> then
|
|
C<~/.my.cnf>. If you place the following in C<~/.my.cnf>, you won't have
|
|
to specify your MySQL username and password on the command line:
|
|
|
|
[client]
|
|
user=your_user_name
|
|
pass=secret
|
|
|
|
Omitting the F part is usually the right thing to do. As long as you have
|
|
configured your C<~/.my.cnf> correctly, that will result in tools connecting
|
|
automatically without needing a username or password.
|
|
|
|
You can also specify a default character set in the defaults file. Unlike the
|
|
L<"A"> part described above, this will actually instruct the client library
|
|
(DBD::mysql) to change the character set it uses internally, which cannot be
|
|
accomplished any other way.
|
|
|
|
=item h
|
|
|
|
MySQL hostname or IP address to connect to.
|
|
|
|
=item L
|
|
|
|
Explicitly enable LOAD DATA LOCAL INFILE.
|
|
|
|
For some reason, some vendors compile libmysql without the
|
|
--enable-local-infile option, which disables the statement. This can
|
|
lead to weird situations, like the server allowing LOCAL INFILE, but
|
|
the client throwing exceptions if it's used.
|
|
|
|
However, as long as the server allows LOAD DATA, clients can easily
|
|
re-enable it; see L<https://dev.mysql.com/doc/refman/en/load-data-local-security.html>
|
|
and L<http://search.cpan.org/~capttofu/DBD-mysql/lib/DBD/mysql.pm>.
|
|
This option does exactly that.
|
|
|
|
=item p
|
|
|
|
MySQL password to use when connecting.
|
|
|
|
=item P
|
|
|
|
Port number to use for the connection. Note that the usual special-case
|
|
behaviors apply: if you specify C<localhost> as your hostname on Unix systems,
|
|
the connection actually uses a socket file, not a TCP/IP connection, and thus
|
|
ignores the port.
|
|
|
|
=item S
|
|
|
|
MySQL socket file to use for the connection (on Unix systems).
|
|
|
|
=item u
|
|
|
|
MySQL username to use when connecting, if not current system user.
|
|
|
|
=item s
|
|
|
|
Create SSL connection
|
|
|
|
=back
|
|
|
|
=head2 BAREWORD
|
|
|
|
Many of the tools will let you specify a DSN as a single word, without any
|
|
C<key=value> syntax. This is called a 'bareword'. How this is handled is
|
|
tool-specific, but it is usually interpreted as the L<"h"> part. The tool's
|
|
C<--help> output will tell you the behavior for that tool.
|
|
|
|
=head2 PROPAGATION
|
|
|
|
Many tools will let you propagate values from one DSN to the next, so you don't
|
|
have to specify all the parts for each DSN. For example, if you want to specify
|
|
a username and password for each DSN, you can connect to three hosts as follows:
|
|
|
|
h=host1,u=fred,p=wilma host2 host3
|
|
|
|
This is tool-specific.
|
|
|
|
=head1 ENVIRONMENT
|
|
|
|
The environment variable C<PTDEBUG> enables verbose debugging output to STDERR.
|
|
To enable debugging and capture all output to a file, run the tool like:
|
|
|
|
PTDEBUG=1 pt-table-checksum ... > FILE 2>&1
|
|
|
|
Be careful: debugging output is voluminous and can generate several megabytes
|
|
of output.
|
|
|
|
=head1 SYSTEM REQUIREMENTS
|
|
|
|
Most tools require:
|
|
|
|
=over
|
|
|
|
=item * Perl v5.8 or newer
|
|
|
|
=item * Bash v3 or newer
|
|
|
|
=item * Core Perl modules like Time::HiRes
|
|
|
|
=back
|
|
|
|
Tools that connect to MySQL require:
|
|
|
|
=over
|
|
|
|
=item * Perl modules DBI and DBD::mysql
|
|
|
|
=item * MySQL 5.0 or newer
|
|
|
|
=back
|
|
|
|
Percona Toolkit officially supports and is tested on many popular Linux
|
|
distributions and MySQL 5.0 through 5.6; see http://goo.gl/srHm7 for the
|
|
list of supported platforms and versions.
|
|
|
|
=head1 IPv6 support
|
|
|
|
In order to support IPv6 addresses to connect to MySQL, Perl DBD::MySQL driver v4.033_01 is
|
|
required. Also, as stated in RFC 3986 L<https://www.ietf.org/rfc/rfc3986.txt> section 3.2.2
|
|
brackets must be used to distinguish host and port.
|
|
Examples: L<https://metacpan.org/pod/DBD::mysql#port>
|
|
|
|
=head1 BUGS
|
|
|
|
Please report bugs at L<https://jira.percona.com>.
|
|
Include the following information in your bug report:
|
|
|
|
=over
|
|
|
|
=item * Complete command-line used to run the tool
|
|
|
|
=item * Tool C<--version>
|
|
|
|
=item * MySQL, MongoDB, or PostgreSQL version of all servers involved
|
|
|
|
=item * Output from the tool including STDERR
|
|
|
|
=item * Input files (log/dump/config files, etc.)
|
|
|
|
=back
|
|
|
|
If possible, include debugging output by running the tool with C<PTDEBUG>;
|
|
see L<"ENVIRONMENT">.
|
|
|
|
=head1 AUTHORS
|
|
|
|
=over
|
|
|
|
=item Baron Schwartz
|
|
|
|
Baron created Maatkit, from which Percona Toolkit was forked. Many of
|
|
the tools and modules were originally written by Baron.
|
|
|
|
=item Daniel Nichter
|
|
|
|
Daniel has been the project's lead developer since 2008 until 2016.
|
|
|
|
=item Frank Cizmich
|
|
|
|
Frank was a full-time Percona Toolkit developer employed by Percona until 2016.
|
|
|
|
=item Carlos Salguero
|
|
|
|
Carlos has been the project's lead developer since 2016 until 2022.
|
|
|
|
=item Sveta Smirnova
|
|
|
|
Sveta has been the project's lead developer since 2022.
|
|
|
|
=item Others
|
|
|
|
Many people have contributed code over the years. See each tool's
|
|
"AUTHORS" section for details.
|
|
|
|
=back
|
|
|
|
=head1 COPYRIGHT, LICENSE, AND WARRANTY
|
|
|
|
Percona Toolkit is copyright 2011-2024 Percona LLC and/or its affiliates, et al.
|
|
See each program's documentation for complete copyright notices.
|
|
|
|
THIS PROGRAM IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
|
|
WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
This program is free software; you can redistribute it and/or modify it under
|
|
the terms of the GNU General Public License as published by the Free Software
|
|
Foundation, version 2; OR the Perl Artistic License. On UNIX and similar
|
|
systems, you can issue `man perlgpl' or `man perlartistic' to read these
|
|
licenses.
|
|
|
|
You should have received a copy of the GNU General Public License along with
|
|
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
|
Place, Suite 330, Boston, MA 02111-1307 USA.
|
|
|
|
=head1 VERSION
|
|
|
|
Percona Toolkit v3.7.0 released 2024-12-19
|
|
|
|
=cut
|