Установка Percona Toolkit
Debian/Ubuntu
1 |
# wget https://repo.percona.com/apt/percona-release_0.1-4.$(lsb_release -sc)_all.deb |
1 |
# dpkg -i percona-release_0.1-4.$(lsb_release -sc)_all.deb |
1 |
# apt-get update |
1 |
# apt-get install percona-toolkit |
Centos
1 |
# yum install perl-IO-Socket-SSL perl-Digest-MD5 perl-TermReadKey |
1 |
# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm |
1 |
# yum install percona-toolkit |
1 |
pt-variable-advisor |
Анализ переменных MySQL(на основе SHOW VARIABLES) и вывод рекомендаций
1 |
# pt-variable-advisor localhost |
1 |
pt-query-digest |
Анализ slow-log,списка процессов(show processlist) или tcpdump
1)Отчет самых медленных запросов из файла
1 |
# pt-query-digest /var/log/mysql/mysql-slow.log |
2)Отчет самых медленных запросов из списка процессов
1 |
# pt-query-digest --processlist h=127.0.0.1 |
Либо через анализ tcpdump
1 |
# tcpdump -s 65535 -x -nn -q -tttt -i any -c 10 port 3306 > mysql.tcp.txt |
1 |
# pt-query-digest --type tcpdump mysql.tcp.txt |
1 |
pt-ioprofile |
Просмотр файлов максимально загружающих/использующих дисковую
подсистему(операции чтения/запись)(требует установленной strace-утилиты(yum install strace))
Делает 2 вещи — lsof+strace для s-секунд и суммирует результаты.Если указать FILE, тогда шаг один не выполняется
1 |
# pt-ioprofile [OPTIONS] [FILE] |
Процесс запускается по умолчанию на 30 секунд(—run-time-параметр)
Например
1 |
# pt-ioprofile --run-time 15 |
— запуск программы на 15 секунд
1 |
pt-diskstats |
(улучшенный iostat)
1 |
# pt-diskstats [OPTIONS] [FILES] |
Просмотр статистики использования диска.
? — просмотр справки
Там можно переключиться между разными режимами
1 |
pt-summary |
Просмотр информации о сервере
1 |
# pt-summary | less |
1 |
# pt-summary [OPTIONS] |
1 |
pt-mysql-summary |
Просмотр информации о MySQL,настройках MySQL,баз данных и др.
1 |
# pt-mysql-summary | less |
1 |
# pt-mysql-summary [OPTINOS] |
Вывод подробной информации обо всех базах данных
1 |
# pt-mysql-summary --all-databases |
Вывод подробной информации о конкретных базах данных
1 |
# pt-mysql-summary --databases databasename1,databasename2 |
1 |
pt-slave-find |
Просмотр иерархии slave-серверов путем подключения к master-серверу
1 |
# pt-slave-find [OPTIONS] [DSN] |
1 |
# pt-slave-find -h master-host |
1 |
# pt-slave-find -h localhost |
1 |
pt-slave-restart |
Мониторинг и рестарт MySQL-репликации после ошибок
Следит за одной или более MySQL-репликами на slave-серверах и пытается перезапустить репликацию, если она останавливается
1 |
# pt-slave-restart [OPTIONS] [DSN] |
1 |
pt-table-checksum |
Проверка целостности/консистенции на master-slave-репликации путем вычисления контрольных сумм таблиц на мастере и сравнения их со slave-сервером
Если такая рассинхрониация обнаружена, то используем утилиту pt-table-sync для решения
Проверить slave
1 |
# pt-table-checksum |
1 |
pt-table-sync |
Синхронизация slave-сервера с master-сервером путем внесения изменений на master-сервере,которых нет на slave-сервере
Синхронизировать таблицу db.tb1 с сервера 1 на сервер 2
1 |
# pt-table-sync –execute h=host1,D=db,t=tb1 h=host2 |
Синхронизировать все таблицы на серверах 1 2 3
1 |
# pt-table-sync --execute host1 host2 host3 |
Сделать slave1-сервер имеющий такую же информацию, как и master-сервер
1 |
# pt-table-sync --execute --sync-to-master slave1 |
Устранение различий,которые обнаружил pt-table-checksum на всех slave-серверах для master1-сервера
1 |
# pt-table-sync --execute --replicate -test.checksum master1 |
Аналогично,но только устранений различий для сервера slave1
1 |
# pt-table-sync --execute --replicate -test.checksum --sync-to-master slave1 |
1 |
pt-heartbeat |
Померять отставание
pt-heartbeat
1 |
pt-duplicate-key-checker |
Просмотр лишних индексов и внешних ключей
1 |
# pt-duplicate-key-checker |
1 |
# pt-duplicate-key-checker [OPTIONS] [DSN] |
1 |
# pt-config-diff |
сравнение значений my.cnf или/и переменных сервера MySQL(show variables)
1 |
# pt-config-diff [OPTIONS] CONFIG CONFIG [CONFIG...] |
Например, сравнение переменных(show variables) на сервере 1 и 2
1 |
# pt-config-diff h=host1 h=host2 |
Сравнение конф.файлов my.cnf на сервере 1 и серверных переменных сервера 2
1 |
# pt-config-diff /etc/my.cnf h=host2 |
Сравнение двух файлов my.cnf на одном сервере
1 |
# pt-config-diff /etc/my-small.cnf /etc/my-large.cnf |
1 |
pt-deadlock-logger |
1 |
# pt-deadlock-logger [OPTIONS] DSN |
Просмотр deadlock на сервере один раз и выйти
1 |
# pt-deadlock-logger -h 127.0.0.1 --iterations 1 |
Просмотр deadlock на сервере
1 |
# pt-deadlock-logger -h 127.0.0.1 |
Параметр —interval — определяет через сколько секунд проводить проверку deadlock (по умолчанию 30 секунд)
По умолчанию время, в течение которого проверяются deadlock — т.е выполняется команда pt-deadlock-logger определено как вечно(параметр —run-time)
С помощью параметра —iteration можно определить сколько раз проверять deadlock
1 |
# pt-deadlock-logger -h 127.0.0.1 --run-time 60s --iterations 10 |
Проверять deadlock в течение 60 секунд 10 раз т.е каждые 6 секунд.
1 |
pt-fk-error-logger |
Просмотр ошибок внешних ключей(из статуса SHOW INNODB STATUS)
pt-fk-error-logger запускается вечно поэтому ограничить выполнения команды можно с помощью параметра —run-time – время выполнения команды и параметра —interval – как часто запускать проверки(по умолчанию 30 секунд)
Например,
1 |
# pt-fk-error-logger --run-time 60 --interval 10 h=127.0.0.1 |
—запускать проверку каждые 10 секунд в течение 60 секунд
1 |
# pt-fk-error-logger --iterations 1 h=127.0.0.1 |
— проверить ошибки один раз и выйти из программы
1 |
pt-find |
1 |
# pt-find [OPTIONS] [DATABASES] |
Поиск таблиц и выполнение определенных действий над ними
1 |
# pt-find --ctime +1 --engine MyISAM |
— поиск таблиц созданных более 1-го дня назад с типом таблицы MyISAM
1 |
# pt-find --engine InnoDB --exec "ALTER TABLE %D.%N ENGINE=MyISAM" |
-поиск всех InnoDB-таблиц и конвертирование их в MyISAM-тип
1 |
# pt-find --empty junk test --exec-plus "DROP TABLE %s" |
— поиск и удаление пустых таблиц в базах данных junk и test.
1 |
# pt-find --tablesize +1M |
– поиск таблиц размером больше 1MB (k – KB, M-MB, G-GB; + больше, — меньше, без символа ± точно равно)
1 |
# pt-find --printf "%T\t%D.%N\n" | sort -rn |
— просмотр размера всех таблиц(размер данных+размер индексов) в отсортированном виде
1 |
pt-kill |
1 |
# pt-kill [OPRIONS] [DSN] |
Удаляем MYSQL-запросы.Подключается к MySQL и получает запросы с SHOW PROCESSLIST, если не указан файл.Если указан файл/файлы,то читает запросы с этого/этих файла/файлов.Этот/эти файлы содержат вывод с SHOW PROCESSLIST
1 |
# pt-kill --busy-time 60 --print |
— вывести запросы,которые выполняются дольше 60 секунд
1 |
# pt-kill --busy-time 60 --kill |
– завершить запросы,которые выполняются дольше 60 секунд
1 |
# pt-kill --match-command Sleep --kill --victims all --interval 10 |
— проверять наличие процессов в состоянии Sleep и удалять их каждые 10 секунд
Анализ запросов из файла
Например,какие запросы выполняются дольше 60 секунд
1 |
# mysql -e "SHOW PROCESSLIST" > /tmp/proclist.txt |
1 |
# pt-kill --test-matching /tmp/proclist.txt --busy-time 60 --print |
1 |
pt-show-grants |
Просмотр привиллегий MySQL-пользователей
1 |
# pt-show-grants [OPTIONS] [DSN] |
1 |
pt-upgrade |
помогает определить безопасно ли обновлять MySQL-версию сервера путем выполнения запросов из различных логов(genearal, slow, binary, tcpdump) на двух серерах(на текущей и новой версии MySQL),сравнивает вывод/результаты этих запросов и выводит оповещение в случае значительных различий.