Это команда pt-archiverp, которую можно запустить в провайдере бесплатного хостинга OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
pt-archiver - архивирует строки из таблицы MySQL в другую таблицу или файл.
СИНТАКСИС
Использование: pt-archiver [ОПЦИИ] --source DSN --where WHERE
pt-archiver грызет записи из таблицы MySQL. Аргументы --source и --dest используют DSN
синтаксис; если COPY - да, --dest по умолчанию используется значение ключа из --source.
Примеры:
Заархивируйте все строки с oltp_server на olap_server и в файл:
pt-archiver --source h = oltp_server, D = test, t = tbl --dest h = olap_server \
--file '/var/log/archive/%Y-%m-%d-%D.%t' \
- где "1 = 1" --limit 1000 --commit-each
Очистить (удалить) лишние строки из дочерней таблицы:
pt-archiver --source h = host, D = db, t = child --purge \
--where 'НЕ СУЩЕСТВУЕТ (ВЫБРАТЬ * ОТ родителя WHERE col = child.col)'
РИСКИ
Percona Toolkit зрелый, проверенный в реальном мире и хорошо протестированный, но все базы данных
инструменты могут представлять опасность для системы и сервера базы данных. Перед использованием этого инструмента,
пожалуйста:
· Прочтите документацию к инструменту
· Просмотрите известные "ОШИБКИ" инструмента.
· Протестируйте инструмент на непроизводственном сервере
· Сделайте резервную копию вашего производственного сервера и проверьте резервные копии
ОПИСАНИЕ
pt-archiver - это инструмент, который я использую для архивирования таблиц, как описано в
<http://tinyurl.com/mysql-archiving>. Наша цель - не требовать особой отдачи и ориентироваться только на
извлекать старые данные из таблицы, не сильно влияя на запросы OLTP. Вы можете вставить
данные в другую таблицу, которая не обязательно должна находиться на том же сервере. Вы также можете написать это в
файл в формате, подходящем для ЗАГРУЗКИ ДАННЫХ INFILE. Или вы не можете сделать ни то, ни другое, в этом случае
просто инкрементное УДАЛЕНИЕ.
pt-archiver расширяется с помощью механизма плагинов. Вы можете ввести свой собственный код, чтобы добавить
расширенная логика архивирования, которая может быть полезна для архивирования зависимых данных, применяя
сложные бизнес-правила или создание хранилища данных в процессе архивирования.
Для некоторых параметров необходимо тщательно выбирать значения. Наиболее важные из них: "--limit",
«--retries» и «--txn-size».
Стратегия состоит в том, чтобы найти первую строку (строки), а затем просканировать некоторый индекс только вперед, чтобы найти больше
ряды эффективно. Каждый последующий запрос не должен сканировать всю таблицу; он должен искать
в индекс, затем просканируйте, пока не найдете больше архивируемых строк. Указание индекса с помощью
часть "i" аргумента "--source" может иметь решающее значение для этого; используйте "--dry-run", чтобы
изучите сгенерированные запросы и обязательно ОБЪЯСНИТЕ их, чтобы убедиться, что они эффективны
(в большинстве случаев вы, вероятно, захотите просканировать ПЕРВИЧНЫЙ ключ, который используется по умолчанию). Четное
лучше, изучите разницу в счетчиках состояния обработчика до и после запуска
запрос и убедитесь, что он не сканирует всю таблицу при каждом запросе.
Вы можете частично или полностью отключить оптимизацию поиска и сканирования с помощью "--no-ascend"
и "- сначала восходящий". Иногда это может быть более эффективным для ключей с несколькими столбцами. Быть
известно, что pt-archiver запускается с начала индекса, который он выбирает, и сканирует
это только вперед. Это может привести к долгому сканированию таблицы, если вы пытаетесь откусить от
конец таблицы по индексу, отличному от того, который он предпочитает. См. "--Source" и прочтите
документацию по части «i», если это относится к вам.
Percona ЭкстраБД Кластер
pt-archiver работает с Percona XtraDB Cluster (PXC) 5.5.28-23.7 и новее, но есть
три ограничения, которые следует учитывать перед архивированием в кластере:
Ошибка при фиксации
pt-archiver не проверяет ошибки при совершении транзакций. Коммиты на PXC могут
сбой, но инструмент еще не проверяет и не повторяет транзакцию, когда это происходит.
Если это произойдет, инструмент умрет.
Таблицы MyISAM
Архивирование таблиц MyISAM работает, но поддержка MyISAM в PXC все еще является экспериментальной.
время этого выпуска. Есть несколько известных ошибок с таблицами PXC, MyISAM и
Столбцы "AUTO_INCREMENT". Следовательно, вы должны убедиться, что архивирование не будет напрямую
или косвенно привести к использованию значений "AUTO_INCREMENT" по умолчанию для таблицы MyISAM.
Например, это происходит с «--dest», если используется «--columns» и
Столбец «AUTO_INCREMENT» не включен. Инструмент на это не проверяет!
Некластерные варианты
Некоторые параметры могут работать, а могут и не работать. Например, если узел кластера не является
slave, то "--check-slave-lag" не работает. А поскольку таблицы PXC обычно
InnoDB, но InnoDB не поддерживает "INSERT DELAYED", тогда "--delayed-insert" не поддерживает
Работа. Другие варианты также могут не работать, но инструмент их не проверяет, поэтому
вы должны протестировать архивирование на тестовом кластере перед архивированием на вашем реальном кластере.
ВЫВОД
Если вы укажете «--progress», выводом будет строка заголовка плюс вывод состояния через определенные промежутки времени.
В каждой строке вывода состояния указывается текущая дата и время, сколько секунд pt-
архиватор запущен и сколько строк заархивировано.
Если вы укажете "--statistics", "pt-archiver" выведет время и другую информацию, чтобы помочь
вы определяете, какая часть вашего процесса архивирования занимает больше всего времени.
ОБРАБОТКА ОШИБОК
pt-archiver пытается поймать сигналы и корректно завершить работу; например, если вы отправите это
SIGTERM (Ctrl-C в UNIX-подобных системах), он поймает сигнал, напечатает сообщение о
сигнал и нормально выйти. Он не будет выполнять «--analyze» или «--optimize»,
потому что это может занять много времени. Весь остальной код будет выполняться нормально,
включая вызов after_finish () на любых плагинах (см. «РАСШИРЕНИЕ»).
Другими словами, сигнал, если его поймают, выйдет из основного цикла архивирования и пропустит
оптимизировать / анализировать.
ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ
Укажите хотя бы одно из «--dest», «--file» или «--purge».
«--ignore» и «--replace» исключают друг друга.
«--txn-size» и «--commit-each» исключают друг друга.
«--low-priority-insert» и «--delayed-insert» являются взаимоисключающими.
«--share-lock» и «--for-update» являются взаимоисключающими.
«--analyze» и «--optimize» исключают друг друга.
«--no-ascend» и «--no-delete» являются взаимоисключающими.
Значения DSN в «--dest» по умолчанию равны значениям из «--source», если COPY - да.
- анализировать
тип: строка
После этого запустите ANALYZE TABLE для «--source» и / или «--dest».
После завершения запускает ANALYZE TABLE. Аргумент - произвольная строка. Если это
содержит букву 's', источник будет проанализирован. Если он содержит 'd',
пункт назначения будет проанализирован. Вы можете указать одно или оба. Например,
следующее проанализирует оба:
--analyze = ds
Видетьhttp://dev.mysql.com/doc/en/analyze-table.html> подробности см. в ТАБЛИЦЕ АНАЛИЗА.
- первый восходящий
Поднимите только первый столбец индекса.
Если вы действительно хотите использовать оптимизацию индекса по возрастанию (см. «--No-ascend»), но не
хотите нести накладные расходы на возрастание большого многостолбцового индекса, вы можете использовать это
возможность указать pt-archiver поднимать только крайний левый столбец индекса. Это может
обеспечивают значительный прирост производительности по сравнению с отсутствием подъема по индексу, в то время как
избегая затрат на подъем по всему индексу.
См. «РАСШИРЕНИЕ» для обсуждения того, как это взаимодействует с надстройками.
--иск-пас
Запрашивать пароль при подключении к MySQL.
--буфер
Буферизировать вывод в "--file" и сбрасывать при фиксации.
Отключает автозаполнение в «--file» и сбрасывает «--file» на диск только при транзакции
совершает. Обычно это означает, что операционная система сбрасывает блокировку файла, поэтому
между коммитами также могут быть некоторые неявные сбросы на диск. По умолчанию
сбрасывать "--file" на диск после каждой строки.
Опасность заключается в том, что сбой может привести к потере данных.
Прирост производительности, который я наблюдал при использовании «--buffer», составляет от 5 до 15 процентов.
Ваша оценка может измениться.
--массовое удаление
Удалите каждый фрагмент с помощью одного оператора (подразумевается «--commit-each»).
Удалите каждый фрагмент строк сразу с помощью одного оператора «DELETE». Заявление
удаляет каждую строку между первой и последней строками фрагмента включительно. Это подразумевает
"--commit-each", так как было бы плохой идеей "ВСТАВЛЯТЬ" строки по одной и
зафиксируйте их перед массовым "УДАЛЕНИЕМ".
Обычный метод - удалить каждую строку по ее первичному ключу. Массовое удаление может быть
намного быстрее. Oни причислены может быть be быстрее если у вас есть сложное предложение WHERE.
Эта опция полностью откладывает всю обработку «УДАЛИТЬ» до тех пор, пока кусок строк не будет
законченный. Если у вас есть плагин в источнике, его метод before_delete не будет
называется. Вместо этого его метод before_bulk_delete вызывается позже.
ПРЕДУПРЕЖДЕНИЕ: если у вас есть плагин в источнике, который иногда не возвращает true из
«is_archivable ()», вам следует использовать эту опцию, только если вы понимаете, что она делает. Если
плагин дает указание "pt-archiver" не архивировать строку, она все равно будет удалена
массовое удаление!
- [no] ограничение на массовое удаление
по умолчанию: да
Добавьте «--limit» в оператор «--bulk-delete».
Это расширенный вариант, и вам не следует отключать его, если вы не знаете, что вы
делаешь и почему! По умолчанию "--bulk-delete" добавляет предложение "--limit" к массиву
удалить оператор SQL. В некоторых случаях это предложение можно опустить, указав
"--no-bulk-delete-limit". "--limit" по-прежнему необходимо указать.
- объемная вставка
Вставьте каждый фрагмент с помощью LOAD DATA INFILE (подразумевает "--bulk-delete" "--commit-each").
Вставьте каждый кусок строк с «ЗАГРУЗИТЬ ЛОКАЛЬНЫЙ ИНФАЙЛ ДАННЫХ». Это может быть намного быстрее, чем
вставка строки с помощью операторов INSERT. Реализуется путем создания
временный файл для каждого фрагмента строк и запись строк в этот файл вместо
вставляя их. Когда чанк закончен, он загружает строки.
Чтобы защитить ваши данные, этот параметр заставляет использовать массовое удаление. Это
было бы небезопасно удалять каждую строку в том виде, в котором она была найдена, перед вставкой строк в
пункт назначения в первую очередь. Принудительное массовое удаление гарантирует, что удаление будет отложено до
вставка прошла успешно.
Параметры "--low-priority-insert", "--replace" и "--ignore" работают с этим
вариант, но "--delayed-insert" нет.
Если "ЗАГРУЗИТЬ ДАННЫЕ ЛОКАЛЬНЫЙ ИНФАЙЛ" выдает ошибку в строках "Используемая команда не
разрешено с этой версией MySQL », обратитесь к документации по опции« L »DSN.
--charset
краткая форма: -A; тип: строка
Набор символов по умолчанию. Если значение - utf8, устанавливает binmode Perl на STDOUT на utf8,
передает параметр mysql_enable_utf8 в DBD :: mysql и запускает SET NAMES UTF8 после
подключение к MySQL. Любое другое значение устанавливает binmode на STDOUT без слоя utf8,
и запускает SET NAMES после подключения к MySQL.
Обратите внимание, что распознаются только наборы символов, известные MySQL; Так, например, "UTF8" будет
работать, а вот "UTF-8" - нет.
См. Также «- [no] check-charset».
- [нет] проверочная кодировка
по умолчанию: да
Убедитесь, что наборы символов соединения и таблицы совпадают. Отключение этой проверки может
вызвать ошибочное преобразование текста из одного набора символов в другой (обычно из
utf8 на latin1), что может вызвать потерю данных или моджибаке. Отключение этой проверки может быть
полезно или необходимо, когда предполагается преобразование набора символов.
- [нет] контрольных столбцов
по умолчанию: да
Убедитесь, что "--source" и "--dest" имеют одинаковые столбцы.
Включено по умолчанию; заставляет pt-archiver проверять, что исходная и конечная таблицы
имеют одинаковые столбцы. Он не проверяет порядок столбцов, тип данных и т. Д. Он просто
проверяет, все ли столбцы в источнике существуют в месте назначения, и наоборот. Если
есть отличия, pt-archiver выйдет с ошибкой.
Чтобы отключить эту проверку, укажите --no-check-columns.
--check-интервал
тип: время; по умолчанию: 1 с
Если задано "--check-slave-lag", это определяет, как долго инструмент приостанавливает каждый
раз он обнаруживает, что раб отстает.
Эта проверка выполняется каждые 100 строк.
--check-slave-лаг
тип: строка; повторяемый: да
Приостановить архивирование до тех пор, пока задержка ведомого DSN не станет меньше, чем "--max-lag". Этот
опция может быть указана несколько раз для проверки более чем одного ведомого устройства.
--колонны
краткая форма: -c; тип: массив
Разделенный запятыми список столбцов для архивации.
Укажите разделенный запятыми список столбцов для выборки, записи в файл и вставки в
таблица назначения. Если указано, pt-archiver игнорирует другие столбцы, если он
необходимо добавить их в оператор «SELECT» для увеличения индекса или удаления строк.
Он извлекает и использует эти дополнительные столбцы внутри себя, но не записывает их в
файл или в целевую таблицу. Это приносит передать их плагинам.
См. Также «--primary-key-only».
--commit-каждый
Зафиксировать каждый набор извлеченных и заархивированных строк (отключает "--txn-size").
Фиксирует транзакции и сбрасывает "--file" после того, как каждый набор строк был заархивирован,
перед выборкой следующего набора строк и перед сном, если указан "--sleep".
Отключает "--txn-size"; используйте "--limit" для управления размером транзакции с помощью
"--коммит-каждый".
Эта опция полезна как ярлык, чтобы сделать "--limit" и "--txn-size" одинаковыми значениями,
но, что более важно, он позволяет избежать открытых транзакций при поиске дополнительных
ряды. Например, представьте, что вы архивируете старые строки с самого начала
большая таблица с "--limit" 1000 и "--txn-size" 1000. После некоторого периода поиска
и архивируя 1000 строк за раз, pt-archiver находит последние 999 строк и архивы
их, затем выполняет следующий SELECT, чтобы найти больше строк. Это сканирует остальную часть
table, но больше не находит строк. Он очень долго держал открытую сделку.
время, только чтобы определить, что все равно закончилось. Вы можете использовать "--commit-each", чтобы избежать
.
--config
тип: Массив
Прочтите этот список файлов конфигурации, разделенных запятыми; если указано, это должно быть первым
параметр в командной строке.
--база данных
краткая форма: -D; тип: строка
Подключитесь к этой базе данных.
--delayed-insert
Добавьте модификатор DELAYED в операторы INSERT.
Добавляет модификатор DELAYED к операторам INSERT или REPLACE. Видеть
<http://dev.mysql.com/doc/en/insert.html> подробности.
- самый
тип: DSN
DSN, указывающий таблицу для архивации.
В этом пункте указывается таблица, в которую pt-archiver будет вставлять строки, заархивированные из
"--источник". Он использует тот же формат аргумента key = val, что и "--source". Большинство пропавших без вести
значения по умолчанию равны тем же значениям, что и "--source", поэтому вам не нужно повторять параметры
то же самое в "--source" и "--dest". Используйте параметр "--help", чтобы узнать, какие
значения копируются из "--source".
ПРЕДУПРЕЖДЕНИЕ: Использование файла опций по умолчанию (F) Опция DSN, которая определяет сокет для
"--source" заставляет pt-archiver подключаться к "--dest", используя этот сокет, если другой
указан сокет для "--dest". Это значит, что pt-archiver может некорректно подключиться
в "--source" при подключении к "--dest". Например:
--source F = host1.cnf, D = db, t = tbl --dest h = host2
Когда pt-archiver подключается к "--dest", host2, он будет подключаться через "--source",
host1, сокет, определенный в host1.cnf.
--прогон, репетиция
Распечатать запросы и выйти, ничего не делая.
Вызывает завершение работы pt-archiver после печати имени файла и операторов SQL, которые он будет использовать.
--файл
тип: строка
Файл для архивации, с ФОРМАТ ДАТЫ()-подобное форматирование.
Имя файла для записи заархивированных строк. Подмножество MySQL ФОРМАТ ДАТЫ() форматирование
в имени файла разрешены следующие коды:
% d День месяца, числовой (01..31)
% Час (00..23)
% i Минуты, числовые (00..59)
% m Месяц, числовой (01..12)
% s секунд (00..59)
% Y Год, числовое, четыре цифры
Вы также можете использовать следующие дополнительные коды формата:
% D Имя базы данных
% t Имя таблицы
Пример:
--file '/var/log/archive/%Y-%m-%d-%D.%t'
Содержимое файла находится в том же формате, что и SELECT INTO OUTFILE, как описано в документации.
в руководстве по MySQL: строки, заканчивающиеся символами новой строки, столбцы, заканчивающиеся табуляцией, NULL
символы представлены \ N, а специальные символы экранируются \. Это позволяет
вы перезагружаете файл с настройками по умолчанию для LOAD DATA INFILE.
Если вы хотите, чтобы заголовок столбца находился в верхней части файла, см. «--Header». Файл авто-
по умолчанию сбрасывается; см. "--buffer".
--for-обновление
Добавляет модификатор FOR UPDATE в операторы SELECT.
Подробнее см.http://dev.mysql.com/doc/en/innodb-locking-reads.html>.
- заголовок
Печатать заголовок столбца вверху «--file».
Записывает имена столбцов как первую строку в файле, заданном параметром «--file». Если файл
существует, не пишет заголовки; это позволяет загружать файл с помощью LOAD DATA INFILE в
если вы добавляете в него больше выходных данных.
--Помогите
Показать справку и выйти.
- высокий приоритет-выбор
Добавляет модификатор HIGH_PRIORITY в операторы SELECT.
Видетьhttp://dev.mysql.com/doc/en/select.html> подробности.
--хозяин
краткая форма: -h; тип: строка
Подключитесь к хосту.
- игнорировать
Используйте IGNORE для операторов INSERT.
Заставляет INSERT в "--dest" быть INSERT IGNORE.
- предел
тип: int; по умолчанию: 1
Количество строк для выборки и архивации на оператор.
Ограничивает количество строк, возвращаемых операторами SELECT, которые извлекают строки, до
архив. По умолчанию - одна строка. Может быть более эффективно увеличить лимит, но
будьте осторожны, если архивируете редко, пропускаете много строк; это потенциально может
вызвать больше конфликтов с другими запросами, в зависимости от механизма хранения, транзакции
уровень изоляции и такие параметры, как «--for-update».
--местный
Не записывайте запросы OPTIMIZE или ANALYZE в binlog.
Добавляет модификатор NO_WRITE_TO_BINLOG в запросы ANALYZE и OPTIMIZE. См. "--Analyze"
для получения информации.
- низкий приоритет-удаление
Добавляет модификатор LOW_PRIORITY в операторы DELETE.
Видетьhttp://dev.mysql.com/doc/en/delete.html> подробности.
- низкий приоритет-вставка
Добавляет модификатор LOW_PRIORITY к операторам INSERT или REPLACE.
Видетьhttp://dev.mysql.com/doc/en/insert.html> подробности.
--max-поток-ctl
тип: поплавок
Немного похоже на --max-lag, но для кластеров PXC. Проверить среднее время, потраченное кластером
приостановить управление потоком и приостановить инструмент, если он превышает указанный процент
в опции. По умолчанию проверка управления потоком не выполняется. Эта опция доступна для PXC.
версии 5.6 и выше.
--max-лаг
тип: время; по умолчанию: 1 с
Приостановите архивирование, если подчиненное устройство, указанное параметром "--check-slave-lag", отстает.
Эта опция заставляет pt-archiver смотреть на ведомое устройство каждый раз, когда он собирается получить
другой ряд. Если задержка ведомого устройства больше, чем значение параметра, или если ведомое устройство
не работает (поэтому его задержка равна NULL), контрольная сумма pt-table-control засыпает "--check-interval"
секунд, а затем снова смотрит на отставание. Это повторяется до тех пор, пока раба не поймают,
затем переходит к извлечению и архивированию строки.
Эта опция может устранить необходимость в "--sleep" или "--sleep-coef".
- не подниматься
Не используйте оптимизацию индекса по возрастанию.
Оптимизация по возрастанию индекса по умолчанию заставляет "pt-archiver" оптимизировать повторяющиеся
Запросы "SELECT", чтобы они выполняли поиск в индексе, где закончился предыдущий запрос, а затем просматривают
вдоль нее, а не сканировать каждый раз с начала таблицы. Это
включен по умолчанию, потому что обычно это хорошая стратегия для повторных обращений.
Большие индексы с несколькими столбцами могут привести к тому, что предложение WHERE будет достаточно сложным, чтобы
это могло быть на самом деле менее эффективным. Рассмотрим, например, ПЕРВИЧНЫЙ КЛЮЧ с четырьмя столбцами
на (а, б, в, г). Предложение WHERE, которое начинается там, где закончился последний запрос, выглядит следующим образом:
ГДЕ (a>?)
ИЛИ (a =? И b>?)
ИЛИ (a =? AND b =? AND c>?)
ИЛИ (a =? AND b =? AND c =? AND d> =?)
Заполнение заполнителей значениями использует память и ЦП, добавляет сетевой трафик и
накладные расходы на синтаксический анализ и могут затруднить оптимизацию запроса MySQL. Четырехколонный
ключ не имеет большого значения, но ключ с десятью столбцами, в котором каждый столбец допускает "NULL", может
быть.
Увеличение индекса может не потребоваться, если вы знаете, что просто удаляете строки.
от начала таблицы кусками, но не оставляя отверстий, поэтому начиная с
начало таблицы - это на самом деле наиболее эффективная вещь.
См. Также «--ascend-first». См. «РАСШИРЕНИЕ» для обсуждения того, как это взаимодействует.
с плагинами.
--no-delete
Не удаляйте заархивированные строки.
Заставляет pt-archiver не удалять строки после их обработки. Это запрещает
"--no-ascend", потому что включение их обоих вызовет бесконечный цикл.
Если в исходном DSN есть плагин, его метод "before_delete" все равно вызывается,
даже если "pt-archiver" не выполнит удаление. См. «РАСШИРЕНИЕ» для получения дополнительной информации
плагины.
- оптимизировать
тип: строка
После этого запустите OPTIMIZE TABLE для «--source» и / или «--dest».
После завершения запускает OPTIMIZE TABLE. См. "--Analyze" для получения информации о синтаксисе параметра и
<http://dev.mysql.com/doc/en/optimize-table.html> подробнее о ТАБЛИЦЕ ОПТИМИЗАЦИИ.
--пароль
краткая форма: -p; тип: строка
Пароль для использования при подключении. Если пароль содержит запятые, их нужно экранировать.
с обратной косой чертой: "пример \, пожалуйста"
--пид
тип: строка
Создайте данный файл PID. Инструмент не запустится, если файл PID уже существует и
PID, который он содержит, отличается от текущего PID. Однако, если файл PID
существует и содержащийся в нем PID больше не работает, инструмент перезапишет PID
файл с текущим PID. PID-файл автоматически удаляется при выходе из инструмента.
--плагин
тип: строка
Имя модуля Perl для использования в качестве универсального плагина.
Укажите имя модуля Perl универсального плагина. В настоящее время используется только
для статистики (см. «--statistics») и должен иметь методы «new ()» и «statistics ()».
Метод "new (src =" $ src, dst => $ dst, opts => $ o)> получает источник и
целевые DSN и их подключения к базе данных, точно так же, как и связанные с подключением
плагины делают. Он также получает объект OptionParser ($ o) для доступа к командной строке.
параметры (пример: "$ o-" get ('purge');>).
Метод "statistics (\% stats, $ time)" получает хэш-ссылку статистики, собранной
задание по архивированию и время начала всей работы.
--порт
краткая форма: -P; тип: int
Номер порта для подключения.
- только первичный ключ
Только столбцы первичного ключа.
Ярлык для указания «--columns» со столбцами первичного ключа. Это
эффективность, если вы просто хотите очистить строки; он избегает выборки всей строки, когда
только столбцы первичного ключа необходимы для операторов «DELETE». См. Также «--purge».
--прогресс
тип: int
Печатать информацию о ходе выполнения каждые X строк.
Печатает текущее время, прошедшее время и строки, заархивированные каждые X строк.
--purge
Очистить вместо архивирования; позволяет опускать "--file" и "--dest".
Позволяет архивировать без аргумента «--file» или «--dest», что фактически является очисткой.
так как строки просто удаляются.
Если вы просто хотите очистить строки, подумайте об указании столбцов первичного ключа таблицы.
с "--primary-key-only". Это предотвратит выборку всех столбцов с сервера для
нет причин.
--быстро-удалить
Добавляет модификатор QUICK к операторам DELETE.
Видетьhttp://dev.mysql.com/doc/en/delete.html> подробности. Как указано в
документации, в некоторых случаях может быть быстрее использовать DELETE QUICK, а затем OPTIMIZE
ТАБЛИЦА. Вы можете использовать для этого "--optimize".
--тихий
краткая форма: -q
Не печатайте никаких выводов, например, для «--statistics».
Подавляет нормальный вывод, включая вывод «--statistics», но не подавляет
вывод "--why-quit".
--заменять
Заставляет INSERT в "--dest" записываться как REPLACE.
- повторные попытки
тип: int; по умолчанию: 1
Количество повторных попыток за тайм-аут или взаимоблокировку.
Определяет, сколько раз pt-archiver должен повторить попытку при блокировке InnoDB
тайм-аут ожидания или тупик. Когда количество попыток исчерпано, pt-archiver завершит работу с
ошибка.
Тщательно обдумайте, что вы хотите, когда архивируете между несколькими
транзакционные и нетранзакционные механизмы хранения. INSERT в "--dest" и
DELETE from "--source" находятся в разных соединениях, поэтому на самом деле они не
участвовать в одной транзакции, даже если они находятся на одном сервере. Однако pt-
архиватор реализует простые распределенные транзакции в коде, поэтому совершает и откатывает
должно произойти по желанию через два соединения.
На данный момент я не написал никакого кода для обработки ошибок с транзакционным хранилищем.
другие двигатели, кроме InnoDB. Запросите эту функцию, если она вам нужна.
- время выполнения
тип: время
Пора бежать перед выходом.
Необязательный суффикс s = секунды, m = минуты, h = часы, d = дни; если суффикса нет, используется s.
- [нет] безопасное автоматическое приращение
по умолчанию: да
Не архивируйте строку с максимальным значением AUTO_INCREMENT.
Добавляет дополнительное предложение WHERE, чтобы pt-archiver не удалял самую новую строку, когда
по возрастанию ключа AUTO_INCREMENT с одним столбцом. Это предохраняет от повторного использования
AUTO_INCREMENT значения, если сервер перезагружается, и включен по умолчанию.
Дополнительное предложение WHERE содержит максимальное значение столбца автоинкремента по состоянию на
начало архивирования или очистки. Если при pt-архиваторе вставляются новые строки
работает, он их не увидит.
- часовой
тип: строка; по умолчанию: / tmp / pt-archiver-sentinel
Выйти, если этот файл существует.
Наличие файла, указанного параметром "--sentinel", приведет к остановке pt-archiver.
архивирование и выход. По умолчанию это / tmp / pt-archiver-sentinel. Вы можете найти это
удобно, чтобы изящно останавливать работу cron, если это необходимо. См. Также «--stop».
--set-варс
тип: Массив
Задайте переменные MySQL в этом списке пар «переменная = значение», разделенном запятыми.
По умолчанию набор инструментов:
wait_timeout = 10000
Переменные, указанные в командной строке, отменяют эти значения по умолчанию. Например,
указание "--set-vars wait_timeout = 500" отменяет значение по умолчанию 10000.
Инструмент выводит предупреждение и продолжает, если переменная не может быть установлена.
--share-блокировка
Добавляет модификатор LOCK IN SHARE MODE в операторы SELECT.
Видетьhttp://dev.mysql.com/doc/en/innodb-locking-reads.html>.
- пропустить-проверки-внешнего-ключа
Отключает проверку внешнего ключа с помощью SET FOREIGN_KEY_CHECKS = 0.
--спать
тип: int
Время сна между загрузками.
Указывает, как долго спать между операторами SELECT. По умолчанию не спать в
все. Транзакции НЕ фиксируются, и файл "--file" НЕ сбрасывается до
спать. См. "--Txn-size", чтобы контролировать это.
Если указан "--commit-each", перед сном происходит фиксация и сброс.
- сон-коэф
тип: поплавок
Вычислите "--sleep" как кратное времени последнего SELECT.
Если эта опция указана, pt-archiver будет спать на время запроса последнего
SELECT, умноженный на указанный коэффициент.
Это немного более изощренный способ ограничить SELECT:
количество времени между каждым SELECT, в зависимости от того, сколько времени занимают SELECT.
--разъем
краткие формы; тип: строка
Файл сокета, используемый для подключения.
--источник
тип: DSN
DSN с указанием таблицы для архивации (обязательно). Этот аргумент является DSN. Видеть
«ОПЦИИ DSN» для синтаксиса. Большинство опций управляют тем, как pt-archiver подключается к MySQL,
но в синтаксисе этого инструмента есть несколько расширенных опций DSN. D, t и i
опции выберите таблицу для архивации:
--source h = my_server, D = my_database, t = my_tbl
Параметр a указывает базу данных, которая будет использоваться по умолчанию для соединения с USE. Если
параметр b истинен, он отключает двоичное ведение журнала с SQL_LOG_BIN. Вариант м
определяет подключаемые действия, которые может предоставить внешний модуль Perl. Единственный
обязательная часть - таблица; другие части можно прочитать из разных мест в
окружение (например, файлы параметров).
Часть «i» заслуживает особого упоминания. Это сообщает pt-archiver, какой индекс он должен
сканировать в архив. Это появляется в подсказке FORCE INDEX или USE INDEX в SELECT
операторы, используемые для выборки архивируемых строк. Если ничего не указывать, pt-archiver
автоматически обнаружит хороший индекс, предпочитая «ПЕРВИЧНЫЙ КЛЮЧ», если он существует. В моем
это обычно работает хорошо, поэтому в большинстве случаев вы, вероятно, можете просто опустить
часть "я".
Индекс используется для оптимизации повторных обращений к таблице; pt-архиватор помнит
последнюю строку, которую он извлекает из каждого оператора SELECT, и использует ее для создания WHERE
предложение, используя столбцы в указанном индексе, что должно позволить MySQL запустить
следующий SELECT там, где закончился последний, а не сканирование из
начало таблицы с каждым последующим SELECT. Если вы используете внешний
плагины, см. «РАСШИРЕНИЕ» для обсуждения того, как они взаимодействуют с восходящими
индексов.
Параметры 'a' и 'b' позволяют контролировать поток операторов через двоичный файл.
бревно. Если вы укажете опцию 'b', двоичное ведение журнала будет отключено на указанном
связь. Если вы укажете опцию 'a', соединение будет "ИСПОЛЬЗОВАТЬ" указанный
база данных, которую вы можете использовать для предотвращения запуска ведомыми устройствами событий двоичного журнала
с параметрами "--replicate-ignore-db". Эти два варианта можно использовать как разные
методы для достижения той же цели: архивировать данные с мастера, но оставить его на
раб. Например, вы можете запустить задание очистки на главном сервере и предотвратить его выполнение.
происходит на ведомом устройстве по вашему выбору.
ПРЕДУПРЕЖДЕНИЕ: Использование файла опций по умолчанию (F) Опция DSN, которая определяет сокет для
"--source" заставляет pt-archiver подключаться к "--dest", используя этот сокет, если другой
указан сокет для "--dest". Это значит, что pt-archiver может некорректно подключиться
в "--source", когда он предназначен для подключения к "--dest". Например:
--source F = host1.cnf, D = db, t = tbl --dest h = host2
Когда pt-archiver подключается к "--dest", host2, он будет подключаться через "--source",
host1, сокет, определенный в host1.cnf.
--статистика
Соберите и распечатайте статистику времени.
Заставляет pt-archiver собирать статистику времени о том, что он делает. Эта статистика
доступны для плагина, указанного параметром "--plugin"
Если вы не укажете «--quiet», «pt-archiver» распечатает статистику при выходе. В
статистика выглядит так:
Started at 2008-07-18T07:18:53, ended at 2008-07-18T07:18:53
Источник: D = db, t = table
ВЫБРАТЬ 4
ВСТАВИТЬ 4
УДАЛИТЬ 4
Время отсчета действий,%
совершить 10 0.1079 88.27
выбрать 5 0.0047 3.87
удаление 4 0.0028 2.29
вставка 4 0.0028 2.28
прочие 0 0.0040 3.29
Первые две (или три) строки показывают время, а также исходную и целевую таблицы. В
следующие три строки показывают, сколько строк было извлечено, вставлено и удалено.
Остальные строки показывают количество и время. Столбцы - это действие, итого
количество раз, когда это действие было рассчитано, общее время, которое оно потребовало, и процент
общее время выполнения программы. Строки отсортированы по убыванию общего времени. В
последняя строка - это остальное время, которое явно ни к чему не приписывается. Действия будут
различаются в зависимости от параметров командной строки.
Если указано "--why-quit", его поведение немного изменится. Эта опция заставляет его
выведите причину выхода, даже если это просто потому, что больше нет строк.
Эта опция требует стандартного модуля Time :: HiRes, который является частью ядра Perl на
разумно новые выпуски Perl.
--останавливаться
Остановите запуск экземпляров, создав файл дозорного.
Заставляет pt-archiver создать контрольный файл, указанный параметром "--sentinel", и завершить работу.
Это должно привести к остановке всех запущенных экземпляров, которые следят за
тот же дозорный файл.
--txn-размер
тип: int; по умолчанию: 1
Количество строк на транзакцию.
Задает размер каждой транзакции в количестве строк. Zero отключает транзакции
все вместе. После того, как pt-archiver обработает это количество строк, он фиксирует как
"--source" и "--dest", если задано, и очищает файл, заданный параметром "--file".
Этот параметр имеет решающее значение для производительности. Если вы архивируете с живого сервера,
который, например, выполняет тяжелую работу OLTP, вам нужно выбрать хороший баланс между
размер транзакции и накладные расходы на фиксацию. Более крупные транзакции создают возможность
больше конфликтов блокировок и взаимоблокировок, но меньшие транзакции вызывают более частые
совершить накладные расходы, которые могут быть значительными. Чтобы дать представление, на небольшом тестовом наборе я
работал при написании pt-archiver, значение 500 привело к тому, что архивирование заняло около 2
секунд на 1000 строк на тихом экземпляре MySQL на моем настольном компьютере,
архивирование на диск и в другую таблицу. Отключение транзакций с нулевым значением,
который включает автокоммит, производительность упала до 38 секунд на тысячу строк.
Если вы не выполняете архивирование из или в механизм хранения транзакций, вы можете захотеть
отключите транзакции, чтобы pt-archiver не пытался зафиксировать.
--Пользователь
краткая форма: -u; тип: строка
Пользователь для входа, если не текущий пользователь.
--версия
Показать версию и выйти.
- [нет] проверки версии
по умолчанию: да
Проверьте наличие последней версии Percona Toolkit, MySQL и других программ.
Это стандартная функция "автоматической проверки обновлений" с двумя дополнительными
Особенности. Сначала инструмент проверяет версию других программ в локальной системе в
дополнение к собственной версии. Например, он проверяет версию каждого сервера MySQL.
он подключается к Perl и модулю Perl DBD :: mysql. Во-вторых, он проверяет и предупреждает
о версиях с известными проблемами. Например, в MySQL 5.5.25 была критическая ошибка и
был переиздан как 5.5.25a.
Все обновления или известные проблемы распечатываются в STDOUT перед обычным выводом инструмента.
Эта функция никогда не должна мешать нормальной работе инструмента.
Для получения дополнительной информации посетите .
--куда
тип: строка
Предложение WHERE для ограничения строк для архивации (обязательно).
Задает предложение WHERE, ограничивающее архивируемые строки. Не включайте слово
ГДЕ. Возможно, вам придется процитировать аргумент, чтобы ваша оболочка не интерпретировала его.
Например:
- где 'ts <current_date - interval 90 дней'
Для безопасности требуется "--where". Если вам не требуется предложение WHERE, используйте
«- где» 1 = 1.
- почему-бросить
Выведите причину выхода, если строки не исчерпаны.
Заставляет pt-archiver печатать сообщение, если оно завершается по любой причине, кроме запуска
из строк для архивации. Это может быть полезно, если у вас есть задание cron с "--run-time"
указан, например, и вы хотите быть уверены, что pt-archiver завершает работу до того, как
не хватает времени.
Если задано «--statistics», поведение немного изменится. Он напечатает
причина для выхода, даже если это просто потому, что больше нет строк.
Этот вывод выводится, даже если задано «--quiet». Вот так можно поставить "pt-archiver" в
задание "cron" и получите электронное письмо, если произойдет аварийный выход.
DSN ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ
Эти параметры DSN используются для создания DSN. Каждая опция дается как «option = value».
Параметры чувствительны к регистру, поэтому P и p - это не одно и то же. Не может быть
пробел до или после "=", и если значение содержит пробелы, его следует заключить в кавычки.
Параметры DSN разделяются запятыми. См. Полную информацию на странице руководства percona-toolkit.
· А
копия: нет
База данных для использования при выполнении запросов.
· А
dsn: кодировка; копия: да
Набор символов по умолчанию.
· Б
копия: нет
Если это правда, отключите binlog с помощью SQL_LOG_BIN.
· Д
dsn: база данных; копия: да
База данных, содержащая таблицу.
· Ф
dsn: mysql_read_default_file; копия: да
Только читать параметры по умолчанию из данного файла
· Ч
dsn: host; копия: да
Подключитесь к хосту.
· Я
копия: да
Индекс для использования.
· л
копия: да
Явно включите LOAD DATA LOCAL INFILE.
По какой-то причине некоторые поставщики компилируют libmysql без --enable-local-infile
опция, которая отключает инструкцию. Это может привести к странным ситуациям, например,
сервер разрешает LOCAL INFILE, но клиент выбрасывает исключения, если он используется.
Однако, пока сервер позволяет ЗАГРУЗИТЬ ДАННЫЕ, клиенты могут легко повторно включить ее; Видеть
а также
<http://search.cpan.org/~capttofu/DBD-mysql/lib/DBD/mysql.pm>. Этот вариант делает
именно это.
Хотя мы не обнаружили случая, когда включение этой опции приводит к ошибкам или разным
поведение, на всякий случай этот параметр не включен по умолчанию.
· М
копия: нет
Название модуля плагина.
· п
dsn: пароль; копия: да
Пароль для использования при подключении. Если пароль содержит запятые, их нужно экранировать.
с обратной косой чертой: "пример \, пожалуйста"
· П
dsn: порт; копия: да
Номер порта для подключения.
· С
dsn: mysql_socket; копия: да
Файл сокета, используемый для подключения.
· Т
копия: да
Таблица для архивации из / в.
· U
dsn: пользователь; копия: да
Пользователь для входа, если не текущий пользователь.
РАСШИРЕНИЕ
pt-archiver расширяем за счет подключения внешних модулей Perl для обработки некоторой логики и / или
действия. Вы можете указать модуль как для «--source», так и для «--dest» с помощью 'm'
часть спецификации. Например:
--source D = test, t = test1, m = My :: Module1 --dest m = My :: Module2, t = test2
Это заставит pt-archiver загрузить пакеты My :: Module1 и My :: Module2, создать
экземпляры их, а затем звонить им во время процесса архивирования.
Вы также можете указать плагин с помощью «--plugin».
Модуль должен предоставлять этот интерфейс:
новый (dbh => $ dbh, db => $ db_name, tbl => $ tbl_name)
Конструктору плагина передается ссылка на дескриптор базы данных, базу данных
имя и имя таблицы. Плагин создается сразу после того, как pt-archiver открывает папку
соединение, и перед тем, как он проверит таблицу, указанную в аргументах. Это дает
плагин дает возможность создавать и заполнять временные таблицы или выполнять другую настройку.
before_begin (cols => \ @cols, allcols => \ @allcols)
Этот метод вызывается непосредственно перед тем, как pt-archiver начинает перебирать строки и
архивируя их, но после того, как он выполнит всю остальную работу по настройке (изучение структур таблиц,
разработка SQL-запросов и т. д.). Это единственный раз, когда pt-archiver сообщает плагину
имена столбцов для строк, которые передаются плагину при архивировании.
Аргумент "cols" - это имена столбцов, которые пользователь запросил для архивации, либо
по умолчанию или с помощью параметра "--columns". Аргумент allcols - это список столбцов.
имена для каждой строки, которую pt-archiver будет извлекать из исходной таблицы. Это может принести больше
столбцов, чем запросил пользователь, потому что некоторые столбцы нужны для собственного использования. Когда
последующие функции плагина получают строку, это полная строка, содержащая все лишние
столбцы, если есть, добавлены в конец.
is_archivable (строка => \ @row)
Этот метод вызывается для каждой строки, чтобы определить, подлежит ли она архивированию. Этот
применяется только к "--source". Аргументом является сама строка в виде ссылки на массив. Если
метод возвращает true, строка будет заархивирована; в противном случае он будет пропущен.
Пропуск строки добавляет сложности для неуникальных индексов. Обычно pt-архиватор использует
Предложение WHERE предназначено для нацеливания на последнюю обработанную строку как место для начала сканирования
для следующего оператора SELECT. Если вы пропустили строку, вернув false из
is_archivable (), pt-archiver мог попасть в бесконечный цикл, потому что строка все еще
существуют. Следовательно, когда вы указываете плагин для аргумента "--source", pt-archiver
немного изменит свое предложение WHERE. Вместо того, чтобы начинать с "больше или равно
до "последней обработанной строки, она начнется" строго больше чем. "Это будет работать
отлично подходит для уникальных индексов, таких как первичные ключи, но может пропускать строки (оставлять дыры) на
неуникальные индексы или при возрастании только первого столбца индекса.
"pt-archiver" изменит предложение таким же образом, если вы укажете "--no-delete",
потому что снова возможен бесконечный цикл.
Если вы укажете опцию "--bulk-delete" и вернете false из этого метода,
"pt-archiver" может не делать то, что вы хотите. Строка не будет заархивирована, но будет
удален, поскольку массовое удаление работает с диапазонами строк и не знает, какие строки
плагин выбран для сохранения.
Если вы укажете параметр "--bulk-insert", возвращаемое значение этого метода будет влиять на
записывается ли строка во временный файл для массовой вставки, поэтому массовые вставки
будет работать как положено. Однако массовая вставка требует массового удаления.
before_delete (строка => \ @row)
Этот метод вызывается для каждой строки непосредственно перед ее удалением. Это относится только к
"--источник". Это хорошее место для обработки зависимостей, таких как удаление
вещи, которые имеют внешний ключ для строки, которую вы собираетесь удалить. Вы также можете использовать
это для рекурсивного архивирования всех зависимых таблиц.
Этот метод плагина вызывается, даже если задано "--no-delete", но не если
дается "--bulk-delete".
before_bulk_delete (first_row => \ @row, last_row => \ @row)
Этот метод вызывается непосредственно перед выполнением массового удаления. Это похоже на
метод before_delete, за исключением того, что его аргументы - первая и последняя строка диапазона
быть удаленным. Он вызывается, даже если задано "--no-delete".
before_insert (строка => \ @row)
Этот метод вызывается для каждой строки непосредственно перед ее вставкой. Это относится только к
«-дест». Вы можете использовать это для вставки строки в несколько таблиц, возможно, с
Предложение ON DUPLICATE KEY UPDATE для создания сводных таблиц в хранилище данных.
Этот метод не вызывается, если задано "--bulk-insert".
before_bulk_insert (first_row => \ @row, last_row => \ @row, filename =>
Bulk_insert_filename)
Этот метод вызывается непосредственно перед выполнением массовой вставки. Это похоже на
"before_insert" метод, за исключением того, что его аргументы - первая и последняя строка диапазона
быть удаленным.
custom_sth (строка => \ @row, sql => $ sql)
Этот метод вызывается непосредственно перед вставкой строки, но после "before_insert ()". Это
позволяет плагину при желании указать другой оператор «INSERT». Возврат
значение (если есть) должно быть дескриптором инструкции DBI. Параметр "sql" - это текст SQL.
используется для подготовки оператора INSERT по умолчанию. Этот метод не вызывается, если вы
укажите "--bulk-insert".
Если значение не возвращается, используется дескриптор оператора INSERT по умолчанию.
Этот метод применяется только к плагину, указанному для "--dest", поэтому, если ваш плагин не
делая то, что вы ожидаете, убедитесь, что вы указали его для пункта назначения, а не для
источник.
custom_sth_bulk (first_row => \ @row, last_row => \ @row, sql => $ sql, filename =>
$ bulk_insert_filename)
Если вы указали --bulk-insert, этот метод вызывается непосредственно перед массовым
вставить, но после "before_bulk_insert ()", а аргументы разные.
Возвращаемое значение этого метода и т. Д. Похоже на "custom_sth ()"метод.
after_finish ()
Этот метод вызывается после того, как pt-archiver выходит из цикла архивирования, фиксирует всю базу данных.
обрабатывает, закрывает "--file" и печатает окончательную статистику, но до запуска pt-archiver
ANALYZE или OPTIMIZE (см. «--Analyze» и «--optimize»).
Если вы укажете плагин и для «--source», и для «--dest», конструкции pt-archiver вызовут
before_begin (), и звонки after_finish () на двух плагинах в порядке "--source",
«-дест».
pt-archiver предполагает, что он контролирует транзакции, и что плагин НЕ будет фиксировать или запускать
назад дескриптор базы данных. Дескриптор базы данных, переданный конструктору плагина, является
такой же дескриптор использует сам pt-архиватор. Помните, что "--source" и "--dest" являются отдельными
ручки.
Пример модуля может выглядеть так:
пакет My :: Module;
новый {
мой ($ class,% args) = @_;
return bless (\% args, $ class);
}
суб перед_начало {
мой ($ self,% args) = @_;
# Сохранить имена столбцов на будущее
$ self -> {cols} = $ args {cols};
}
суб is_archivable {
мой ($ self,% args) = @_;
# Выполните сложную логику с помощью $ args {row}
1 вернуться;
}
sub before_delete {} # Не предпринимать никаких действий
sub before_insert {} # Не предпринимать никаких действий
sub custom_sth {} # Не предпринимать никаких действий
sub after_finish {} # Не предпринимать никаких действий
1;
ОКРУЖАЮЩАЯ СРЕДА
Переменная среды «PTDEBUG» включает вывод подробной отладки в STDERR. Включить
отладку и запись всего вывода в файл, запустите инструмент, например:
PTDEBUG = 1 pt-архиватор ...> ФАЙЛ 2> & 1
Будьте осторожны: вывод отладки очень объемный и может генерировать несколько мегабайт вывода.
СИСТЕМА ТРЕБОВАНИЯ
Вам понадобятся Perl, DBI, DBD :: mysql и некоторые основные пакеты, которые должны быть установлены в любом
разумно новая версия Perl.
Используйте pt-archiverp онлайн с помощью сервисов onworks.net