Это команда pt-findp, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
pt-find - находит таблицы MySQL и выполняет действия, такие как поиск GNU.
СИНТАКСИС
Использование: pt-find [ОПЦИИ] [БАЗЫ ДАННЫХ]
pt-find ищет таблицы MySQL и выполняет действия, подобные поиску GNU. Действие по умолчанию
- распечатать базу данных и имя таблицы.
Найдите все таблицы, созданные более дня назад и использующие механизм MyISAM, и распечатайте их
имена:
pt-find --ctime +1 --engine MyISAM
Найдите таблицы InnoDB и преобразуйте их в MyISAM:
pt-find --engine InnoDB --exec "ALTER TABLE% D.% N ENGINE = MyISAM"
Найдите таблицы, созданные процессом, который больше не существует, следуя именованию name_sid_pid
конвенции и удалите их.
pt-find --connection-id '\ D_ \ d + _ (\ d +) $' --server-id '\ D _ (\ d +) _ \ d + $' --exec-plus "УДАЛИТЬ ТАБЛИЦУ% s"
Найдите пустые таблицы в тестовой и нежелательной базах данных и удалите их:
pt-find --empty junk test --exec-plus "DROP TABLE% s"
Найдите таблицы размером более пяти гигабайт:
pt-find --tablesize + 5G
Найдите все таблицы и распечатайте их общие данные и размер индекса и сначала отсортируйте самые большие таблицы
(кстати, sort - это другая программа).
pt-find --printf "% T \ t% D.% N \ n" | sort -rn
То же, что и выше, но на этот раз вставьте данные обратно в базу данных для потомков:
pt-find --noquote --exec "ВСТАВИТЬ В sysdata.tblsize (db, tbl, size) VALUES ('% D', '% N',% T)"
РИСКИ
Percona Toolkit зрелый, проверенный в реальном мире и хорошо протестированный, но все базы данных
инструменты могут представлять опасность для системы и сервера базы данных. Перед использованием этого инструмента,
пожалуйста:
· Прочтите документацию к инструменту
· Просмотрите известные "ОШИБКИ" инструмента.
· Протестируйте инструмент на непроизводственном сервере
· Сделайте резервную копию вашего производственного сервера и проверьте резервные копии
ОПИСАНИЕ
pt-find ищет таблицы MySQL, которые проходят указанные вами тесты, и выполняет действия
вы указываете. Действие по умолчанию - распечатать базу данных и имя таблицы в STDOUT.
pt-find проще, чем GNU find. Не позволяет указывать сложные выражения
в командной строке.
pt-find использует ПОКАЗАТЬ ТАБЛИЦЫ, когда это возможно, и ПОКАЗАТЬ СОСТОЯНИЕ ТАБЛИЦ, когда это необходимо.
ВАРИАНТ ВИДЫ
Есть три типа опций: обычные опции, которые определяют какое-то поведение или
параметр; тесты, определяющие, следует ли включать таблицу в список таблиц
нашел; и действия, которые что-то делают с таблицами, находящимися в pt-find.
pt-find использует стандартный синтаксический анализ опций Getopt :: Long, поэтому вы должны использовать двойные дефисы в
перед длинными именами опций, в отличие от GNU find.
ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ
Этот инструмент принимает дополнительные аргументы командной строки. Обратитесь к «ОБЗОРУ» и использованию
информация для подробностей.
--иск-пас
Запрашивать пароль при подключении к MySQL.
--без учета регистра
Указывает, что при поиске всех регулярных выражений регистр не учитывается.
--charset
краткая форма: -A; тип: строка
Набор символов по умолчанию. Если значение - utf8, устанавливает binmode Perl на STDOUT на utf8,
передает параметр mysql_enable_utf8 в DBD :: mysql и запускает SET NAMES UTF8 после
подключение к MySQL. Любое другое значение устанавливает binmode на STDOUT без слоя utf8,
и запускает SET NAMES после подключения к MySQL.
--config
тип: Массив
Прочтите этот список файлов конфигурации, разделенных запятыми; если указано, это должно быть первым
параметр в командной строке.
--база данных
краткая форма: -D; тип: строка
Подключитесь к этой базе данных.
--день-старт
Измеряйте время (для "--mmin" и т. Д.) С начала сегодняшнего дня, а не с
Текущее время.
--defaults-файл
краткая форма: -F; тип: строка
Только читать параметры mysql из данного файла. Вы должны указать абсолютный путь.
--Помогите
Показать справку и выйти.
--хозяин
краткая форма: -h; тип: строка
Подключитесь к хосту.
--или же
Комбинируйте тесты с ИЛИ, а не И.
По умолчанию тесты оцениваются так, как если бы между ними было И. Этот вариант
переключает его на ИЛИ.
Сам pt-find не выполняет синтаксический анализ опций, поэтому вы не можете указать сложные
выражения со скобками и смесью OR и AND.
--пароль
краткая форма: -p; тип: строка
Пароль для использования при подключении. Если пароль содержит запятые, их нужно экранировать.
с обратной косой чертой: "пример \, пожалуйста"
--пид
тип: строка
Создайте данный файл PID. Инструмент не запустится, если файл PID уже существует и
PID, который он содержит, отличается от текущего PID. Однако, если файл PID
существует и содержащийся в нем PID больше не работает, инструмент перезапишет PID
файл с текущим PID. PID-файл автоматически удаляется при выходе из инструмента.
--порт
краткая форма: -P; тип: int
Номер порта для подключения.
- [нет] цитата
по умолчанию: да
Заключает в кавычки имена идентификаторов MySQL с помощью стандартного обратного апострофа MySQL.
Цитирование происходит после запуска тестов, но до выполнения действий.
--set-варс
тип: Массив
Задайте переменные MySQL в этом списке пар «переменная = значение», разделенном запятыми.
По умолчанию набор инструментов:
wait_timeout = 10000
Переменные, указанные в командной строке, отменяют эти значения по умолчанию. Например,
указание "--set-vars wait_timeout = 500" отменяет значение по умолчанию 10000.
Инструмент выводит предупреждение и продолжает, если переменная не может быть установлена.
--разъем
краткие формы; тип: строка
Файл сокета, используемый для подключения.
--Пользователь
краткая форма: -u; тип: строка
Пользователь для входа, если не текущий пользователь.
--версия
Показать версию и выйти.
- [нет] проверки версии
по умолчанию: да
Проверьте наличие последней версии Percona Toolkit, MySQL и других программ.
Это стандартная функция "автоматической проверки обновлений" с двумя дополнительными
Особенности. Сначала инструмент проверяет версию других программ в локальной системе в
дополнение к собственной версии. Например, он проверяет версию каждого сервера MySQL.
он подключается к Perl и модулю Perl DBD :: mysql. Во-вторых, он проверяет и предупреждает
о версиях с известными проблемами. Например, в MySQL 5.5.25 была критическая ошибка и
был переиздан как 5.5.25a.
Все обновления или известные проблемы распечатываются в STDOUT перед обычным выводом инструмента.
Эта функция никогда не должна мешать нормальной работе инструмента.
Для получения дополнительной информации посетите .
ИСПЫТАНИЯ
Большинство тестов проверяют какой-либо критерий по столбцу вывода SHOW TABLE STATUS. Числовой
аргументы могут быть указаны как + n для большего, чем n, -n для меньшего, чем n, и n, если точно
п. Все числовые параметры могут иметь дополнительный суффикс-множитель k, M или G (1_024,
1_048_576 и 1_073_741_824 соответственно). Все шаблоны являются регулярными выражениями Perl
(см. 'man perlre'), если не указано иное как шаблоны SQL LIKE.
Даты и время измеряются относительно одного и того же момента, когда pt-find сначала запрашивает
сервер базы данных, который час. Все манипуляции с датой и временем выполняются в SQL, поэтому, если вы
скажем, чтобы найти таблицы, измененные 5 дней назад, что переводится как SELECT
DATE_SUB (CURRENT_TIMESTAMP, ИНТЕРВАЛ 5 ДНЕЙ). Если вы укажете "--day-start", если конечно это
относительно CURRENT_DATE вместо этого.
Однако размеры таблиц и другие показатели не согласованы в данный момент времени. Оно может
требуется некоторое время, чтобы MySQL обработал все запросы SHOW, а pt-find ничего не может сделать
об этом. Эти измерения сделаны на момент их снятия.
Если вам нужен какой-то тест, которого нет в этом списке, отправьте отчет об ошибке, и я улучшу pt-find.
для тебя. Это действительно просто.
--автоинк
тип: строка; группа: Тесты
Следующий AUTO_INCREMENT таблицы равен n. Это проверяет столбец Auto_increment.
--avgrowlen
тип: размер; группа: Тесты
Средняя длина строки таблицы равна n байтам. Это проверяет столбец Avg_row_length. Указанный
size может быть "NULL", чтобы проверить, где Avg_row_length IS NULL.
- контрольная сумма
тип: строка; группа: Тесты
Контрольная сумма таблицы n. Это проверяет столбец контрольной суммы.
--cмин
тип: размер; группа: Тесты
Таблица была создана n минут назад. Это проверяет столбец Create_time.
--сборка
тип: строка; группа: Тесты
Сопоставление таблицы соответствует шаблону. Это проверяет столбец «Сопоставление».
- имя-столбца
тип: строка; группа: Тесты
Имя столбца в таблице соответствует шаблону.
- столбчатый
тип: строка; группа: Тесты
Столбец в таблице соответствует этому типу (без учета регистра).
Примеры типов: varchar, char, int, smallint, bigint, decimal, year, timestamp,
текст, перечисление.
--комментарий
тип: строка; группа: Тесты
Комментарий к таблице соответствует шаблону. Это проверяет столбец комментариев.
- идентификатор-соединения
тип: строка; группа: Тесты
Имя таблицы имеет несуществующий идентификатор подключения к MySQL. Это проверяет имя таблицы для
шаблон. Аргументом этого теста должно быть регулярное выражение Perl, которое фиксирует
такие цифры: (\ d +). Если имя таблицы совпадает с шаблоном, эти захваченные цифры
считаются идентификатором подключения MySQL некоторого процесса. Если соединение не работает
существуют согласно SHOW FULL PROCESSLIST, тест возвращает истину. Если идентификатор подключения
больше, чем собственный идентификатор соединения pt-find, в целях безопасности тест возвращает false.
Зачем тебе это нужно? Если вы используете репликацию на основе операторов MySQL, вы
вероятно, знаете, какие проблемы могут вызвать временные таблицы. Вы можете обойти
это путем создания реальных таблиц с уникальными именами вместо временных таблиц. В одну сторону
для этого нужно добавить свой идентификатор подключения в конец таблицы, таким образом:
scratch_table_12345. Это гарантирует уникальность имени таблицы и дает возможность
найти, с каким соединением он был связан. И, пожалуй, самое главное, если
соединение больше не существует, вы можете предположить, что соединение умерло без очистки
его таблицы, и эта таблица является кандидатом на удаление.
Вот как я управляю рабочими таблицами, и поэтому я включил этот тест в pt-find.
Аргумент, который я использую для «--connection-id», - «\ D _ (\ d +) $». Это находит таблицы с
серия чисел в конце, которым предшествует символ подчеркивания и некоторый нечисловой символ
(последний критерий не позволяет мне просматривать таблицы с датой в конце, что
люди, как правило, делают: baron_scratch_2007_05_07 например). Лучше оставить
скретч-таблицы, конечно, отдельные.
Если вы это сделаете, убедитесь, что пользователь pt-find запускается от имени PROCESS!
В противном случае он будет видеть соединения только одного и того же пользователя и может подумать, что некоторые таблицы
готовы к удалению, когда они еще используются. В целях безопасности pt-find проверяет это на наличие
вас.
См. Также "--server-id".
--createopts
тип: строка; группа: Тесты
Параметр создания таблицы соответствует шаблону. Это проверяет столбец Create_options.
--ctime
тип: размер; группа: Тесты
Таблица была создана n дней назад. Это проверяет столбец Create_time.
- без данных
тип: размер; группа: Тесты
В таблице n байт свободного места. Это проверяет столбец Data_free. Указанный размер
может быть "NULL", чтобы проверить, где Data_free IS NULL.
--размер данных
тип: размер; группа: Тесты
Табличные данные занимают n байтов пространства. Это проверяет столбец Data_length. Указанный
size может быть "NULL", чтобы проверить, где Data_length IS NULL.
--dblike
тип: строка; группа: Тесты
Имя базы данных соответствует шаблону SQL LIKE.
--dbregex
тип: строка; группа: Тесты
Имя базы данных соответствует этому шаблону.
--пустой
группа: Тесты
В таблице нет строк. Это проверяет столбец «Строки».
--двигатель
тип: строка; группа: Тесты
Механизм хранения таблиц соответствует этому шаблону. Это проверяет столбец Двигатель или в
в более ранних версиях MySQL столбец Тип.
--функция
тип: строка; группа: Тесты
Определение функции соответствует шаблону.
--indexsize
тип: размер; группа: Тесты
Индексы таблиц занимают n байтов пространства. Это проверяет столбец Index_length. В
указанный размер может быть "NULL", чтобы проверить, где Index_length IS NULL.
--кмин
тип: размер; группа: Тесты
Таблица была проверена n минут назад. Это проверяет столбец Check_time.
--ktime
тип: размер; группа: Тесты
Таблица была проверена n дней назад. Это проверяет столбец Check_time.
--мм
тип: размер; группа: Тесты
Последнее изменение таблицы было n минут назад. Это проверяет столбец Update_time.
- время
тип: размер; группа: Тесты
Последнее изменение таблицы было n дней назад. Это проверяет столбец Update_time.
--процедура
тип: строка; группа: Тесты
Определение процедуры соответствует шаблону.
--rowformat
тип: строка; группа: Тесты
Формат строки таблицы соответствует шаблону. Это проверяет столбец Row_format.
- строки
тип: размер; группа: Тесты
В таблице n строк. Это проверяет столбец «Строки». Указанный размер может быть от «NULL» до
test, где Rows IS NULL.
- id-сервера
тип: строка; группа: Тесты
Имя таблицы содержит идентификатор сервера. Если вы создаете временные таблицы с именованием
соглашения, объясненного в "--connection-id", но также добавьте идентификатор сервера в
которые создаются таблицы, то вы можете использовать это сопоставление с шаблоном, чтобы убедиться, что таблицы
сброшены только на сервере, на котором они созданы. Это препятствует тому, чтобы таблица была
случайно упал на подчиненное устройство во время его использования (при условии, что идентификаторы вашего сервера
все уникальные, какими они должны быть для работы репликации).
Например, на главном сервере (идентификатор сервера 22) вы создаете таблицу с именем
scratch_table_22_12345. Если вы видите эту таблицу на ведомом устройстве (идентификатор сервера 23), вы можете
думаю, что его можно безопасно сбросить, если такого соединения нет 12345. Но если вы также
заставить имя совпадать с идентификатором сервера с "--server-id '\ D _ (\ d +) _ \ d + $'", таблица
не упадет на раба.
--tablesize
тип: размер; группа: Тесты
Таблица использует n байтов пространства. Это проверяет сумму Data_length и Index_length.
колонны.
--tbllike
тип: строка; группа: Тесты
Имя таблицы соответствует шаблону SQL LIKE.
--tblregex
тип: строка; группа: Тесты
Имя таблицы соответствует этому шаблону.
--tblversion
тип: размер; группа: Тесты
Версия таблицы - n. Это проверяет столбец версии.
--курок
тип: строка; группа: Тесты
Оператор действия триггера соответствует шаблону.
- триггерный стол
тип: строка; группа: Тесты
"--trigger" определяется в шаблоне сопоставления таблицы.
--Посмотреть
тип: строка; группа: Тесты
CREATE VIEW соответствует этому шаблону.
Действия
Действие «--exec-plus» происходит после всего остального, но в остальном действия выполняются в
неопределенный порядок. Если вам нужен детерминизм, отправьте отчет об ошибке, и я добавлю это
функцию.
--exec
тип: строка; группа: Действия
Выполните этот SQL для каждого найденного элемента. SQL может содержать escape-символы и форматирование
директивы (см. "--printf").
--exec-dsn
тип: строка; группа: Действия
Укажите DSN в формате "ключ-значение" для использования при выполнении SQL с помощью "--exec" и
"--exec-plus". Любые неуказанные значения наследуются от аргументов командной строки.
--exec-плюс
тип: строка; группа: Действия
Выполните этот SQL-запрос сразу для всех элементов. Эта опция не похожа на "--exec". Есть
никаких директив экранирования или форматирования; есть только один специальный заполнитель для
список имен баз данных и таблиц,% s. Список найденных таблиц будет объединен
вместе с запятыми и заменяется везде, где вы помещаете% s.
Вы можете использовать это, например, чтобы отбросить все найденные вами таблицы:
ТАБЛИЦА ВЫПАДЕНИЯ% s
Это что-то вроде синтаксиса GNU find "-exec command {} +". Только это не совсем
загадочный. И мне не нужно писать синтаксический анализатор командной строки.
--Распечатать
группа: Действия
Выведите имя базы данных и таблицы с новой строкой. Это действие по умолчанию
если не указано иное действие.
--printf
тип: строка; группа: Действия
Формат вывода на стандартный вывод с интерпретацией escape-символов '\' и директив '%'.
Escape - это символы с обратной косой чертой, например \ n и \ t. Perl интерпретирует их, поэтому вы можете
используйте любые escape-последовательности, о которых знает Perl. Директивы заменяются% s, и с этого момента
писать, вы не можете добавлять какие-либо специальные инструкции по форматированию, например, ширину полей или
выравнивание (хотя я размышляю над тем, как это сделать).
Вот список директив. Обратите внимание, что большинство из них просто взяты из столбцов
ПОКАЗАТЬ СТАТУС ТАБЛИЦЫ. Если столбец имеет значение NULL или не существует, вы получите пустую строку в
выход. Символ%, за которым следует любой символ, не входящий в следующий список, является
отброшен (но напечатан другой символ).
ЗАМЕТКИ ИСТОЧНИКА ДАННЫХ CHAR
---- ------------------ ---------------------------- --------------
Auto_increment
Средняя_длина_строки
c Контрольная сумма
C Создание_время
D База данных Имя базы данных, в которой находится таблица.
d Длина_данных
E Engine В старых версиях MySQL это Тип
F Data_free
f Innodb_free Анализируется из поля комментария
Я Индекс_длина
K Контрольное_время
L сопоставление
M Макс.длина_данных
N Имя
O Комментарий
P Create_options
R Формат_строки
S ряды
T Длина_таблицы Длина_данных + Длина_индекса
U Обновление_время
Версия V
DSN ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ
Эти параметры DSN используются для создания DSN. Каждая опция дается как «option = value».
Параметры чувствительны к регистру, поэтому P и p - это не одно и то же. Не может быть
пробел до или после "=", и если значение содержит пробелы, его следует заключить в кавычки.
Параметры DSN разделяются запятыми. См. Полную информацию на странице руководства percona-toolkit.
· А
dsn: кодировка; копия: да
Набор символов по умолчанию.
· Д
dsn: база данных; копия: да
База данных по умолчанию.
· Ф
dsn: mysql_read_default_file; копия: да
Только читать параметры по умолчанию из данного файла
· Ч
dsn: host; копия: да
Подключитесь к хосту.
· п
dsn: пароль; копия: да
Пароль для использования при подключении. Если пароль содержит запятые, их нужно экранировать.
с обратной косой чертой: "пример \, пожалуйста"
· П
dsn: порт; копия: да
Номер порта для подключения.
· С
dsn: mysql_socket; копия: да
Файл сокета, используемый для подключения.
· U
dsn: пользователь; копия: да
Пользователь для входа, если не текущий пользователь.
ОКРУЖАЮЩАЯ СРЕДА
Переменная среды «PTDEBUG» включает вывод подробной отладки в STDERR. Включить
отладку и запись всего вывода в файл, запустите инструмент, например:
PTDEBUG = 1 pt-find ...> ФАЙЛ 2> & 1
Будьте осторожны: вывод отладки очень объемный и может генерировать несколько мегабайт вывода.
СИСТЕМА ТРЕБОВАНИЯ
Вам понадобятся Perl, DBI, DBD :: mysql и некоторые основные пакеты, которые должны быть установлены в любом
разумно новая версия Perl.
Используйте pt-findp в Интернете с помощью сервисов onworks.net
