GoGPT Best VPN GoSearch

Значок OnWorks

pt-online-schema-changep - Онлайн в облаке

Запустите pt-online-schema-changep в провайдере бесплатного хостинга OnWorks через Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

Это команда pt-online-schema-changep, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

ПРОГРАММА:

ИМЯ


pt-online-schema-change - ИЗМЕНИТЬ таблицы без их блокировки.

СИНТАКСИС


Использование: pt-online-schema-change [ОПЦИИ] DSN

pt-online-schema-change изменяет структуру таблицы без блокировки чтения или записи.
Укажите базу данных и таблицу в DSN. Не используйте этот инструмент, пока не прочтете его
документацию и внимательно проверьте свои резервные копии.

Добавьте столбец в sakila.actor:

pt-online-schema-change --alter "ДОБАВИТЬ КОЛОНКУ c1 INT" D = sakila, t = субъект

Измените sakila.actor на InnoDB, эффективно выполняя OPTIMIZE TABLE в неблокирующем режиме.
мода, потому что это уже таблица InnoDB:

pt-online-schema-change --alter "ENGINE = InnoDB" D = sakila, t = субъект

РИСКИ


Percona Toolkit зрелый, проверенный в реальном мире и хорошо протестированный, но все базы данных
инструменты могут представлять опасность для системы и сервера базы данных. Перед использованием этого инструмента,
пожалуйста:

· Прочтите документацию к инструменту

· Просмотрите известные "ОШИБКИ" инструмента.

· Протестируйте инструмент на непроизводственном сервере

· Сделайте резервную копию вашего производственного сервера и проверьте резервные копии

ОПИСАНИЕ


pt-online-schema-change имитирует способ, которым MySQL изменяет таблицы внутри, но работает
на копии таблицы, которую вы хотите изменить. Это означает, что исходная таблица не
заблокирован, и клиенты могут продолжать читать и изменять данные в нем.

pt-online-schema-change работает, создавая пустую копию таблицы для изменения, изменяя
это по желанию, а затем копирование строк из исходной таблицы в новую таблицу. Когда
копирование завершено, исходная таблица удаляется и заменяется новой. От
по умолчанию он также удаляет исходную таблицу.

Процесс копирования данных выполняется небольшими порциями данных, которые изменяются, чтобы попытаться
заставить их выполняться за определенное время (см. «--chunk-time»). Этот процесс очень
аналогично тому, как работают другие инструменты, такие как pt-table-контрольная сумма. Любые изменения данных в
исходные таблицы во время копирования будут отражены в новой таблице, потому что инструмент
создает триггеры в исходной таблице для обновления соответствующих строк в новой таблице.
Использование триггеров означает, что инструмент не будет работать, если какие-либо триггеры уже определены.
на столе.

Когда инструмент заканчивает копирование данных в новую таблицу, он использует атомарную "ПЕРЕИМЕНОВАТЬ ТАБЛИЦУ"
операция для одновременного переименования исходной и новой таблиц. После этого
инструмент отбрасывает исходный стол.

Внешние ключи усложняют работу инструмента и представляют дополнительный риск. Техника
атомарного переименования исходной и новой таблиц не работает, когда внешние ключи ссылаются
к столу. Инструмент должен обновить внешние ключи, чтобы ссылаться на новую таблицу после схемы.
изменение завершено. Инструмент поддерживает два метода для этого. Ты можешь читать
подробнее об этом в документации для "--alter-foreign-keys-method".

Внешние ключи также вызывают некоторые побочные эффекты. В итоговой таблице будут те же внешние ключи.
и индексирует как исходную таблицу (если вы не укажете иное в своем ALTER
оператор), но имена объектов могут быть немного изменены, чтобы избежать имени объекта
коллизии в MySQL и InnoDB.

В целях безопасности инструмент не изменяет таблицу, если вы не укажете параметр «--execute»,
который по умолчанию не включен. Инструмент поддерживает множество других мер по предотвращению
нежелательная нагрузка или другие проблемы, в том числе автоматическое обнаружение реплик, подключение к
их, и используя следующие проверки безопасности:

· В большинстве случаев инструмент откажется работать, если не задан ПЕРВИЧНЫЙ КЛЮЧ или УНИКАЛЬНЫЙ ИНДЕКС.
присутствует в таблице. См. "--Alter" для подробностей.

· Инструмент отказывается работать, если обнаруживает фильтры репликации. Видеть
"- [no] check-replication-filters" для подробностей.

· Инструмент приостанавливает операцию копирования данных, если обнаруживает отложенные реплики.
в тиражировании. См. "--Max-lag" для подробностей.

· Инструмент приостанавливает или прерывает свою работу, если обнаруживает слишком большую нагрузку на сервер. Видеть
"--max-load" и "--critical-load" для получения подробной информации.

· Инструмент устанавливает "innodb_lock_wait_timeout = 1" и (для MySQL 5.5 и новее)
"lock_wait_timeout = 60", чтобы он с большей вероятностью стал жертвой какой-либо блокировки
разногласия и меньшая вероятность нарушения других транзакций. Эти значения могут быть
изменено указанием "--set-vars".

· Инструмент отказывается изменять таблицу, если на нее ссылаются ограничения внешнего ключа, если только
вы указываете "--alter-external-keys-method".

· Инструмент не может изменять таблицы MyISAM на узлах «Percona XtraDB Cluster».

Percona ЭкстраБД Кластер


pt-online-schema-change работает с Percona XtraDB Cluster (PXC) 5.5.28-23.7 и новее, но
есть два ограничения: изменять можно только таблицы InnoDB, и "wsrep_OSU_method" должен
должен быть установлен на «TOI» (полная изоляция заказа). Инструмент завершает работу с ошибкой, если хост является
узел кластера, а таблица - MyISAM или преобразуется в MyISAM ("ENGINE = MyISAM"), или
если wsrep_OSU_method не является TOI. Отключить эти проверки невозможно.

ВЫВОД


Инструмент выводит информацию о своей деятельности в STDOUT, чтобы вы могли видеть, что это такое.
делает. На этапе копирования данных он выводит отчеты «--progress» в STDERR. Вы можете получить
дополнительную информацию, указав "--print".

Если указано «--statistics», отчет о различных внутренних событиях распечатывается по адресу
конец, например:

# Счетчик событий
# ====== =====
# ВСТАВИТЬ 1

ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ


«--dry-run» и «--execute» являются взаимоисключающими.

Этот инструмент принимает дополнительные аргументы командной строки. Обратитесь к «ОБЗОРУ» и использованию
информация для подробностей.

--альтер
тип: строка

Модификация схемы без ключевых слов ALTER TABLE. Вы можете выполнять несколько
изменения в таблице, указав их запятыми. Пожалуйста, обратитесь к MySQL
руководство по синтаксису ALTER TABLE.

Применяются следующие ограничения, которые в случае попытки вызвать сбой инструмента в
непредсказуемыми способами:

· Почти во всех случаях ПЕРВИЧНЫЙ КЛЮЧ или УНИКАЛЬНЫЙ ИНДЕКС должен присутствовать в
Таблица. Это необходимо, потому что инструмент создает триггер DELETE, чтобы сохранить
новая таблица обновляется во время выполнения процесса.

Заметное исключение - когда ПЕРВИЧНЫЙ КЛЮЧ или УНИКАЛЬНЫЙ ИНДЕКС создается из
существующий столбцы как часть предложения ALTER; в этом случае он будет использовать эти
столбцы для триггера DELETE.

· Предложение «RENAME» не может использоваться для переименования таблицы.

· Столбцы не могут быть переименованы путем удаления и повторного добавления с новым именем. Инструмент
не будет копировать данные исходного столбца в новый столбец.

· Если вы добавите столбец без значения по умолчанию и сделаете его НЕ NULL, инструмент будет
потерпеть неудачу, так как он не будет пытаться угадать значение по умолчанию за вас; Вы должны указать
по умолчанию.

· "DROP FOREIGN KEY constraint_name" требует указания "_constraint_name", а
чем реальное "constraint_name". Из-за ограничений в MySQL pt-online-schema-
change добавляет начальное подчеркивание к именам ограничений внешнего ключа при создании
новая таблица. Например, чтобы снять это ограничение:

ОГРАНИЧЕНИЕ `fk_foo` ИНОСТРАННЫЙ КЛЮЧ (` foo_id`) ССЫЛКИ `bar` (` foo_id`)

Вы должны указать "--alter" DROP FOREIGN KEY _fk_foo "".

· Инструмент не использует "LOCK IN SHARE MODE" с MySQL 5.0, потому что это может вызвать
ошибка подчиненного устройства, прерывающая репликацию:

Запрос вызвал разные ошибки на главном и подчиненном устройствах. Ошибка на мастере:
'Обнаружен тупик при попытке получить блокировку; попробуйте перезапустить транзакцию '(1213),
Ошибка на ведомом: «нет ошибки» (0). База данных по умолчанию: pt_osc.
Запрос: 'INSERT INTO pt_osc.t (id, c) VALUES (' 730 ',' new row ')'

Ошибка возникает при преобразовании таблицы MyISAM в InnoDB, потому что MyISAM не является
транзакционный, но InnoDB транзакционный. MySQL 5.1 и новее обрабатывают этот случай
правильно, но тестирование воспроизводит ошибку в 5% случаев с MySQL 5.0.

Это ошибка MySQL, похожая наhttp://bugs.mysql.com/bug.php? id = 45694>, но
в MySQL 5.0 нет исправления или обходного пути. Без "LOCK IN SHARE MODE" тесты
проходят 100% времени, поэтому риск потери данных или нарушения репликации должен быть
незначителен.

Be Убедитесь в проверить новый (см. таблицу ниже) if через MySQL 5.0 и преобразование от МойИСАМ в
ИнноДБ!

--alter-external-keys-метод
тип: строка

Как изменить внешние ключи, чтобы они ссылались на новую таблицу. Внешние ключи, которые
ссылка на изменяемую таблицу должна обрабатываться специально, чтобы гарантировать, что они
продолжайте ссылаться на правильную таблицу. Когда инструмент переименовывает исходную таблицу в
пусть его место займет новый, внешние ключи «следуют» за переименованной таблицей и должны
быть измененным, чтобы вместо этого ссылаться на новую таблицу.

Инструмент поддерживает два метода для достижения этой цели. Он автоматически находит "ребенок
таблицы », которые ссылаются на изменяемую таблицу.

автоматический
Автоматически определяйте, какой метод лучше. Инструмент использует rebuild_constraints.
если возможно (подробности см. в описании этого метода), а если нет, то он
использует drop_swap.

перестроить_ограничения
Этот метод использует ALTER TABLE для удаления и повторного добавления ограничений внешнего ключа, которые
ссылку на новую таблицу. Это предпочтительный метод, если только один или несколько из
«дочерние» таблицы настолько велики, что «ALTER» займет слишком много времени. Инструмент
определяет это, сравнивая количество строк в дочерней таблице со скоростью
Инструмент может копировать строки из старой таблицы в новую. Если
инструмент оценивает, что дочерняя таблица может быть изменена за меньшее время, чем
"--chunk-time", тогда он будет использовать эту технику. Для оценки
время, необходимое для изменения дочерней таблицы, инструмент умножает скорость копирования строк
"--chunk-size-limit", потому что MySQL "ALTER TABLE" обычно намного быстрее
чем внешний процесс копирования строк.

Из-за ограничений в MySQL внешние ключи не будут иметь одинаковых имен после
ИЗМЕНИТЬ то, что они сделали до этого. Инструмент должен переименовать внешний ключ, когда он
переопределяет его, добавляя к имени ведущий знак подчеркивания. В некоторых случаях MySQL
также автоматически переименовывает индексы, необходимые для внешнего ключа.

drop_swap
Отключить проверку внешнего ключа (FOREIGN_KEY_CHECKS = 0), затем удалить исходную таблицу
перед переименованием новой таблицы на ее место. Это отличается от обычного
метод замены старой и новой таблицы, который использует атомарное "ПЕРЕИМЕНОВАНИЕ", то есть
не обнаруживается клиентскими приложениями.

Этот метод быстрее и не блокирует, но более рискован по двум причинам.
Во-первых, в течение короткого времени между отбрасыванием исходной таблицы и переименованием
временная таблица, изменяемая таблица просто не существует, а запросы
против этого приведет к ошибке. Во-вторых, если есть ошибка и новый
стол нельзя переименовать на место старого, значит уже поздно
прервать, потому что старая таблица удалена навсегда.

Этот метод заставляет "--no-swap-tables" и "--no-drop-old-table".

нет
Этот метод похож на "drop_swap" без "swap". Любые внешние ключи, которые
ссылка на исходную таблицу теперь будет ссылаться на несуществующую таблицу. Это будет
обычно вызывают нарушения внешнего ключа, которые видны в "SHOW ENGINE INNODB
СОСТОЯНИЕ ", аналогичное следующему:

Попытка добавить в индекс кортеж idx_fk_staff_id:
СОЧЕТАНИЕ ДАННЫХ: 2 поля;
0: len 1; шестнадцатеричный 05; asc ;;
1: len 4; шестнадцатеричный 80000001; asc ;;
Но родительская таблица `sakila`.`staff_old`
или его файл .ibd в настоящее время не существует!

Это связано с тем, что исходная таблица (в данном случае sakila.staff) была переименована в
sakila.staff_old, а потом уронили. Этот метод обработки ограничений внешнего ключа
предоставляется, чтобы администратор базы данных мог отключить встроенные в инструмент
функциональность при желании.

- [нет] анализировать до обмена
по умолчанию: да

Выполните ANALYZE TABLE для новой таблицы перед заменой старой. По умолчанию,
это происходит только при использовании MySQL 5.6 и новее, а innodb_stats_persistent -
включено. Укажите параметр явно, чтобы включить или отключить его независимо от MySQL
версия и "innodb_stats_persistent".

Это позволяет избежать потенциально серьезной проблемы, связанной со статистикой оптимизатора InnoDB.
Если предупреждаемая таблица занята и инструмент завершает работу быстро, новая таблица будет
нет статистики оптимизатора после замены. Это может привести к быстрому использованию индекса
запросов для выполнения полного сканирования таблицы до обновления статистики оптимизатора (обычно после
10 секунд). Если таблица большая, а сервер очень загружен, это может вызвать сбой.

--иск-пас
Запрашивать пароль при подключении к MySQL.

--charset
краткая форма: -A; тип: строка

Набор символов по умолчанию. Если значение - utf8, устанавливает binmode Perl на STDOUT на utf8,
передает параметр mysql_enable_utf8 в DBD :: mysql и запускает SET NAMES UTF8 после
подключение к MySQL. Любое другое значение устанавливает binmode на STDOUT без слоя utf8,
и запускает SET NAMES после подключения к MySQL.

- [нет] чек-альтер
по умолчанию: да

Анализирует указанный "--alter" и пытается предупредить о возможном непреднамеренном поведении.
В настоящее время он проверяет:

Переименование столбца
В предыдущих версиях инструмента переименование столбца с "ИЗМЕНИТЬ имя КОЛОНКИ"
new_name "приведет к потере данных этого столбца. Теперь инструмент анализирует
alter и пытается отловить эти случаи, поэтому переименованные столбцы должны иметь
те же данные, что и у оригиналов. Однако код, который делает это, не является полностью
взорванный синтаксический анализатор SQL, поэтому вы должны сначала запустить инструмент с помощью "--dry-run" и "--print"
и убедитесь, что он правильно определяет переименованные столбцы.

УДАЛИТЬ ПЕРВИЧНЫЙ КЛЮЧ
Если "--alter" содержит "DROP PRIMARY KEY" (без учета регистра и пробела), предупреждение
печатается, и инструмент завершает работу, если не указано «--dry-run». Изменение
первичный ключ может быть опасным, но инструмент может с этим справиться. Триггеры инструмента,
особенно триггер DELETE, больше всего страдает изменение первичного ключа
потому что инструмент предпочитает использовать первичный ключ для своих триггеров. Вам следует
сначала запустите инструмент с помощью «--dry-run» и «--print» и убедитесь, что триггеры
исправить.

--check-интервал
тип: время; по умолчанию: 1

Время ожидания между проверками на "--max-lag".

- [нет] чек-план
по умолчанию: да

Проверяйте планы выполнения запросов на безопасность. По умолчанию этот параметр вызывает запуск инструмента.
EXPLAIN перед выполнением запросов, предназначенных для доступа к небольшому объему данных, но
который может получить доступ ко многим строкам, если MySQL выберет плохой план выполнения. К ним относятся
запросы для определения границ фрагментов и сами запросы фрагментов. Если появится
что MySQL будет использовать плохой план выполнения запроса, инструмент пропустит фрагмент
таблице.

Инструмент использует несколько эвристик, чтобы определить, плохой ли план выполнения. В
во-первых, сообщает ли EXPLAIN, что MySQL намеревается использовать желаемый индекс для доступа
ряды. Если MySQL выбирает другой индекс, инструмент считает запрос небезопасным.

Инструмент также проверяет, какую часть индекса MySQL сообщает, что он будет использовать для
запрос. Вывод EXPLAIN показывает это в столбце key_len. Инструмент запоминает
наибольший key_len, и пропускает фрагменты, где MySQL сообщает, что он будет использовать меньший
префикс индекса. Эту эвристику можно понять как пропуск фрагментов, которые имеют
худший план исполнения, чем у других частей.

Инструмент выводит предупреждение при первом пропуске фрагмента из-за неправильного выполнения.
план в каждой таблице. Последующие фрагменты пропускаются без уведомления, хотя вы можете видеть
количество пропущенных фрагментов в столбце ПРОПУСКАННЫЕ выходных данных инструмента.

Эта опция добавляет некоторую настройку для каждой таблицы и блока. Хотя работы нет
навязчиво для MySQL, это приводит к большему количеству обращений к серверу, что потребляет
время. Если сделать фрагменты слишком маленькими, накладные расходы станут относительно большими. Это
поэтому рекомендуется не делать куски слишком маленькими, потому что инструмент может
очень долго, чтобы завершить, если вы это сделаете.

- [нет] фильтров проверки-репликации
по умолчанию: да

Прервать, если на каком-либо сервере установлен какой-либо фильтр репликации. Инструмент ищет сервер
параметры, которые фильтруют репликацию, такие как binlog_ignore_db и replicate_do_db. Если это
находит такие фильтры, прерывается с ошибкой.

Если для реплик настроены какие-либо параметры фильтрации, будьте осторожны, чтобы
для изменения любых баз данных или таблиц, которые существуют на главном сервере, а не на репликах,
потому что это могло привести к сбою репликации. Для получения дополнительной информации о репликации
правила, см.http://dev.mysql.com/doc/en/replication-rules.html>.

--check-slave-лаг
тип: строка

Приостановите копирование данных до тех пор, пока задержка реплики не станет меньше "--max-lag". Стоимость - это
DSN, который наследует свойства из параметров подключения («--port», «--user»,
и т.д.). Этот параметр отменяет нормальное поведение поиска и постоянного
мониторинг задержки репликации на ВСЕХ подключенных репликах. Если вы не хотите контролировать
ВСЕ реплики, но вы хотите отслеживать больше, чем одну реплику, тогда используйте
Параметр DSN для параметра "--recursion-method" вместо этого параметра.

--chunk-индекс
тип: строка

Предпочтите этот индекс для таблиц фрагментов. По умолчанию инструмент выбирает наиболее
соответствующий индекс для разбиения на части. Эта опция позволяет вам указать индекс, который вы
предпочитать. Если индекс не существует, инструмент вернется к своему значению по умолчанию.
поведение при выборе индекса. Инструмент добавляет индекс к операторам SQL в
Оговорка "FORCE INDEX". Будьте осторожны при использовании этой опции; плохой выбор индекса может
вызвать плохую работу.

--чанк-индекс-столбцы
тип: int

Используйте только это количество крайних левых столбцов в "--chunk-index". Это работает только для
составные индексы и полезны в случаях, когда ошибка в оптимизаторе запросов MySQL
(планировщик) заставляет его сканировать большой диапазон строк вместо использования индекса для поиска
начальная и конечная точки точно. Эта проблема иногда возникает в индексах с
много столбцов, например 4 или более. В этом случае инструмент может распечатать предупреждение.
связанных с опцией «- [нет] чек-план». Указание инструменту использовать только первый
В некоторых случаях N столбцов индекса - это обходной путь для устранения ошибки.

- размер куска
тип: размер; по умолчанию: 1000

Количество строк, выбираемых для каждого копируемого фрагмента. Допустимые суффиксы: k, M, G.

Этот параметр может переопределить поведение по умолчанию, которое заключается в настройке размера блока.
динамически, чтобы попытаться заставить чанки выполняться ровно за "--chunk-time" секунды. Когда это
опция не установлена ​​явно, ее значение по умолчанию используется в качестве отправной точки, но после
что инструмент игнорирует значение этой опции. Если вы установите этот параметр явно,
однако затем он отключает поведение динамической настройки и пытается сделать все фрагменты
точно указанное количество строк.

Есть тонкость: если индекс чанка не уникален, то возможно, что чанки
будет больше, чем хотелось бы. Например, если таблица разбита по индексу,
содержит 10,000 XNUMX заданного значения, невозможно написать предложение WHERE, которое соответствует
только 1,000 значений, и этот фрагмент будет иметь размер не менее 10,000 XNUMX строк. Такой
chunk, вероятно, будет пропущен из-за "--chunk-size-limit".

--chunk-size-limit
тип: плавающий; по умолчанию: 4.0

Не копируйте фрагменты, которые намного превышают желаемый размер фрагмента.

Если таблица не имеет уникальных индексов, размеры блоков могут быть неточными. Этот вариант
указывает максимально допустимый предел погрешности. Инструмент использует к
оцените, сколько строк находится в блоке. Если эта оценка превышает желаемый кусок
размер, умноженный на ограничение, инструмент пропускает фрагмент.

Минимальное значение для этой опции - 1, что означает, что ни один чанк не может быть больше, чем
"- размер куска". Вероятно, вы не захотите указывать 1, потому что строки, сообщаемые
EXPLAIN - это оценки, которые могут отличаться от реального количества строк в
кусок. Вы можете отключить проверку больших фрагментов, указав значение 0.

Инструмент также использует этот параметр, чтобы определить, как обрабатывать внешние ключи, которые ссылаются на
таблица, которую нужно изменить. См. "--Alter-external-keys-method" для подробностей.

- время куска
тип: плавающий; по умолчанию: 0.5

Настройте размер блока динамически, чтобы каждый запрос на копирование данных выполнялся именно так долго.
Инструмент отслеживает скорость копирования (строк в секунду) и регулирует размер блока после каждого
запрос на копирование данных, так что следующий запрос займет это количество времени (в секундах), чтобы
выполнять. Он поддерживает экспоненциально убывающее скользящее среднее количество запросов в секунду, поэтому
что если производительность сервера изменится из-за изменений нагрузки на сервер, инструмент
быстро адаптируется.

Если для этого параметра установлено значение XNUMX, размер блока не регулируется автоматически, поэтому время запроса будет
могут отличаться, но размеры блоков запроса не будут. Другой способ сделать то же самое - указать
значение для "--chunk-size" явно, вместо того, чтобы оставлять его по умолчанию.

--config
тип: Массив

Прочтите этот список файлов конфигурации, разделенных запятыми; если указано, это должно быть первым
параметр в командной строке.

--критическая нагрузка
тип: Массив; по умолчанию: Threads_running = 50

Проверяйте SHOW GLOBAL STATUS после каждого фрагмента и прерывайте, если нагрузка слишком высока. В
option принимает список переменных состояния MySQL и пороговых значений, разделенных запятыми. An
необязательный "= MAX_VALUE" (или ": MAX_VALUE") может следовать за каждой переменной. Если не указано,
инструмент определяет порог, проверяя текущее значение при запуске и удваивая его.

См. "--Max-load" для получения дополнительной информации. Эти параметры работают аналогично, за исключением того, что это
опция прервет работу инструмента, а не приостановит ее, а значение по умолчанию -
вычисляется иначе, если вы не укажете пороговое значение. Причина этого варианта в том, что
проверка безопасности на случай, если триггеры в исходной таблице увеличат нагрузку на сервер
что это вызывает простои. Вероятно, не существует единственного значения Threads_running, которое было бы
неверно для каждого сервера, но значение по умолчанию 50 кажется неприемлемо высоким для
большинство серверов, указывая, что операцию следует немедленно отменить.

--база данных
краткая форма: -D; тип: строка

Подключитесь к этой базе данных.

- двигатель по умолчанию
Удалите «ДВИГАТЕЛЬ» из новой таблицы.

По умолчанию новая таблица создается с теми же параметрами таблицы, что и исходная таблица,
поэтому, если исходная таблица использует InnoDB, тогда новая таблица будет использовать InnoDB. В определенных
случаях, связанных с репликацией, это может вызвать непреднамеренные изменения в репликах, которые используют
другой движок для одного и того же стола. Указание этой опции приводит к тому, что новая таблица
быть создан с помощью движка системы по умолчанию.

--defaults-файл
краткая форма: -F; тип: строка

Только читать параметры mysql из данного файла. Вы должны указать абсолютный путь.

- [нет] drop-new-table
по умолчанию: да

Отбросьте новую таблицу, если копирование исходной таблицы не удалось.

Указание "--no-drop-new-table" и "--no-swap-tables" оставляет новую измененную копию
таблицы без изменения исходной таблицы. См. "--New-table-name".

--no-drop-new-table не работает с методом drop_swap alter-external-keys-method.

- [нет] drop-old-table
по умолчанию: да

Отбросьте исходную таблицу после ее переименования. После того, как исходная таблица была
успешно переименован, чтобы новая таблица заняла свое место, и если ошибок нет,
инструмент по умолчанию удаляет исходную таблицу. Если есть ошибки, инструмент уходит
исходный стол на месте.

Если указан "--no-swap-tables", то старой таблицы для удаления нет.

- [нет] дроп-триггеров
по умолчанию: да

Сбросьте триггеры на старую таблицу. "--no-drop-triggers" заставляет "--no-drop-old-table".

--прогон, репетиция
Создайте и измените новую таблицу, но не создавайте триггеры, не копируйте данные и не заменяйте
оригинальный стол.

--выполнять
Укажите, что вы прочитали документацию и хотите изменить таблицу. Ты должен
укажите эту опцию, чтобы изменить таблицу. В противном случае инструмент будет работать только
некоторые проверки безопасности и выход. Это помогает убедиться, что вы прочитали документацию.
и поймете, как пользоваться этим инструментом. Если вы не читали документацию, то сделайте
не указывайте эту опцию.

--сила
Эта опция обходит подтверждение в случае использования alter-external-keys-method = none,
что может нарушить ограничения внешнего ключа.

--Помогите
Показать справку и выйти.

--хозяин
краткая форма: -h; тип: строка

Подключитесь к хосту.

--max-поток-ctl
тип: поплавок

Немного похоже на --max-lag, но для кластеров PXC. Проверить среднее время, потраченное кластером
приостановить управление потоком и приостановить инструмент, если он превышает указанный процент
в опции. Значение 0 заставит инструмент приостанавливаться, когда * любое * управление потоком
активность обнаружена. По умолчанию проверка управления потоком не выполняется. Эта опция доступна
для PXC версии 5.6 или выше.

--max-лаг
тип: время; по умолчанию: 1 с

Приостановите копирование данных до тех пор, пока отставание всех реплик не станет меньше этого значения. После каждых данных-
копировать запрос (каждый фрагмент), инструмент проверяет задержку репликации всех реплик, чтобы
который он подключает, используя Seconds_Behind_Master. Если какая-то реплика отстает более чем
значение этой опции, тогда инструмент будет спать в течение "--check-interval" секунд,
затем еще раз проверьте все реплики. Если вы укажете "--check-slave-lag", то только инструмент
проверяет задержку на этом сервере, а не на всех серверах. Если вы хотите контролировать, какие именно
серверы, которые отслеживает инструмент, используйте значение DSN для "--recursion-method".

Инструмент вечно ждет, пока реплики перестанут отставать. Если какая-либо реплика остановлена,
инструмент ждет вечно, пока реплика не запустится. Копирование данных продолжается, когда все
реплики запущены и не сильно лагают.

Во время ожидания инструмент распечатывает отчеты о проделанной работе. Если реплика остановлена, она печатает
отчет о ходе выполнения немедленно, а затем снова через каждый интервал отчета о ходе выполнения.

--Максимальная нагрузка
тип: Массив; по умолчанию: Threads_running = 25

Изучите SHOW GLOBAL STATUS после каждого фрагмента и сделайте паузу, если какие-либо переменные состояния
выше их порогов. Опция принимает список MySQL, разделенный запятыми.
переменные состояния. Необязательный знак "= MAX_VALUE" (или ": MAX_VALUE") может следовать за каждым
Переменная. Если не указан, инструмент определяет порог, исследуя текущее значение.
значение и увеличив его на 20%.

Например, если вы хотите, чтобы инструмент приостанавливал работу, когда Threads_connected становится слишком высоким, вы
можно указать "Threads_connected", и инструмент проверит текущее значение, когда он
начинает работать и добавить 20% к этому значению. Если текущее значение 100, то инструмент
приостанавливается, когда Threads_connected превышает 120, и возобновляет работу, когда оно ниже 120
опять таки. Если вы хотите указать явный порог, например 110, вы можете использовать либо
«Threads_connected: 110» или «Threads_connected = 110».

Цель этой опции - предотвратить чрезмерную нагрузку на инструмент.
сервер. Если запросы на копирование данных являются навязчивыми или вызывают ожидание блокировки, тогда
другие запросы на сервере будут блокироваться и помещаться в очередь. Обычно это вызывает
Threads_running для увеличения, и инструмент может обнаружить это, запустив SHOW GLOBAL
СТАТУС сразу после завершения каждого запроса. Если вы укажете порог для этого
переменная, то вы можете указать инструменту подождать, пока запросы не начнут нормально работать.
снова. Однако это не предотвратит постановку в очередь; это только даст серверу шанс
чтобы выйти из очереди. Если вы заметили очередь, лучше всего уменьшить
кусок времени.

--new-имя-таблицы
тип: строка; по умолчанию:% T_new

Новое имя таблицы до того, как она будет заменена. % T заменяется исходным именем таблицы.
Когда используется значение по умолчанию, инструмент ставит перед именем до 10 символов «_» (подчеркивание), чтобы
найти уникальное имя таблицы. Если указано имя таблицы, инструмент не ставит перед ним префикс.
с "_", поэтому таблица не должна существовать.

--пароль
краткая форма: -p; тип: строка

Пароль для использования при подключении. Если пароль содержит запятые, их нужно экранировать.
с обратной косой чертой: "пример \, пожалуйста"

--пид
тип: строка

Создайте данный файл PID. Инструмент не запустится, если файл PID уже существует и
PID, который он содержит, отличается от текущего PID. Однако, если файл PID
существует и содержащийся в нем PID больше не работает, инструмент перезапишет PID
файл с текущим PID. PID-файл автоматически удаляется при выходе из инструмента.

--плагин
тип: строка

Файл модуля Perl, который определяет класс "pt_online_schema_change_plugin". Плагин
позволяет написать модуль Perl, который может подключаться ко многим частям pt-online-schema-
изменять. Для этого требуется хорошее знание соглашений Perl и Percona Toolkit, которые
выходят за рамки данной документации. Пожалуйста, свяжитесь с Percona, если у вас есть
вопросы или нужна помощь.

См. «ПЛАГИН» для получения дополнительной информации.

--порт
краткая форма: -P; тип: int

Номер порта для подключения.

--Распечатать
Вывести операторы SQL в STDOUT. Указав этот параметр, вы сможете увидеть большую часть
операторы, которые выполняет инструмент. Вы можете использовать эту опцию с "--dry-run" для
пример.

--прогресс
тип: массив; по умолчанию: время, 30

Распечатайте отчеты о ходе выполнения в STDERR при копировании строк. Значение разделяется запятыми.
список из двух частей. Первая часть может быть процентом, временем или итерациями; в
вторая часть определяет, как часто должно печататься обновление, в процентах, секундах,
или количество итераций.

--тихий
краткая форма: -q

Не выводить сообщения в STDOUT (отключает "--progress"). Ошибки и предупреждения
все еще печатается в STDERR.

- рекурсивный
тип: int

Количество уровней в иерархии для рекурсии при обнаружении реплик. По умолчанию
бесконечно. См. Также «--recursion-method».

- рекурсивный метод
тип: массив; по умолчанию: список процессов, хосты

Предпочтительный метод рекурсии для обнаружения реплик. Возможные методы:

ИСПОЛЬЗОВАНИЕ МЕТОДА
=========== ===================
список процессов ПОКАЗАТЬ СПИСОК ПРОЦЕССОВ
хосты SHOW SLAVE HOSTS
dsn = DSN DSN из таблицы
никто не найду рабов

Метод processlist используется по умолчанию, потому что SHOW SLAVE HOSTS не является надежным.
Однако метод хостов может работать лучше, если сервер использует нестандартный порт (не
3306). Инструмент обычно делает правильные вещи и находит все реплики, но вы можете
предпочтительный метод, и он будет использован в первую очередь.

Метод hosts требует, чтобы реплики были настроены с report_host, report_port,
и так далее

Метод dsn особенный: он определяет таблицу, из которой считываются другие строки DSN.
В указанном DSN должны быть указаны D и t или t с указанием базы данных. Таблица DSN
должен иметь следующую структуру:

СОЗДАТЬ ТАБЛИЦУ `dsns` (
`id` Int(11) НЕ НУЛЕВОЕ AUTO_INCREMENT,
`parent_id` Int(11) ПО УМОЛЧАНИЮ NULL,
`dsn` варчар(255) НЕ NULL,
ПЕРВИЧНЫЙ КЛЮЧ (`id`)
);

Чтобы инструмент отслеживал задержку репликации только на хостах 10.10.1.16 и 10.10.1.17,
вставить в таблицу значения «h = 10.10.1.16» и «h = 10.10.1.17». В настоящее время
DSN упорядочиваются по идентификатору, но в противном случае идентификаторы и parent_id игнорируются.

--set-варс
тип: Массив

Задайте переменные MySQL в этом списке пар «переменная = значение», разделенном запятыми.

По умолчанию набор инструментов:

wait_timeout = 10000
innodb_lock_wait_timeout = 1
lock_wait_timeout = 60

Переменные, указанные в командной строке, отменяют эти значения по умолчанию. Например,
указание "--set-vars wait_timeout = 500" отменяет значение по умолчанию 10000.

Инструмент выводит предупреждение и продолжает, если переменная не может быть установлена.

--спать
тип: плавающий; по умолчанию: 0

Как долго спать (в секундах) после копирования каждого фрагмента. Эта опция полезна, когда
регулирование с помощью "--max-lag" и "--max-load" невозможно. Небольшой, менее секунды
следует использовать значение, например 0.1, иначе инструмент может долго копировать
большие столы.

--разъем
краткие формы; тип: строка

Файл сокета, используемый для подключения.

--статистика
Распечатать статистику о внутренних счетчиках. Это полезно, чтобы узнать, сколько предупреждений
были подавлены по сравнению с количеством INSERT.

- [нет] своп-таблиц
по умолчанию: да

Поменяйте местами исходную таблицу и новую измененную таблицу. Этот шаг завершает онлайн-
процесс изменения схемы, сделав таблицу с новой схемой вместо
оригинальный стол. Исходная таблица становится "старой", и инструмент удаляет ее.
если вы не отключите "- [no] drop-old-table".

--пытается
тип: массив

Сколько раз пробовать критические операции. Если некоторые операции завершаются неудачно из-за не-
фатальные, исправимые ошибки, инструмент ждет и снова пытается выполнить операцию. Эти
операции, которые повторяются, с их количеством попыток по умолчанию и временем ожидания
между попытками (в секундах):

ОПЕРАЦИЯ ПЫТАЕТСЯ ПОДОЖДИТЕ
================== ===== ====
create_triggers 10 1
drop_triggers 10 1
copy_rows 10 0.25
таблицы swap_tables 10 1
update_foreign_keys 10 1
анализировать_таблицу 10 1

Чтобы изменить значения по умолчанию, укажите новые значения, например:

- пытается create_triggers: 5: 0.5, drop_triggers: 5: 0.5

Это заставляет инструмент попробовать create_triggers и drop_triggers 5 раз с 0.5
вторая пауза между попытками. Итак, формат такой:

операция: пытается: ждать [, операция: пытается: ждать]

Необходимо указать все три значения.

Обратите внимание, что на большинство операций влияет только MySQL 5.5 и новее.
"lock_wait_timeout" (см. "--set-vars") из-за блокировок метаданных. "Copy_rows"
на операцию в любой версии MySQL влияет "innodb_lock_wait_timeout".

Для создания и отбрасывания триггеров количество попыток относится к каждому «СОЗДАТЬ
TRIGGER "и" DROP TRIGGER "для каждого триггера. Для копирования строк число
of try применяется к каждому фрагменту, а не ко всей таблице. Для обмена столами число
of попыток обычно применяется один раз, потому что обычно существует только одна «ПЕРЕИМЕНОВАТЬ ТАБЛИЦУ»
утверждение. Для восстановления ограничений внешнего ключа количество попыток применяется к
каждый оператор (операторы «ALTER» для «rebuild_constraints»
"- метод-альтернативных-внешних-ключей"; другие операторы для метода drop_swap).

Инструмент повторяет каждую операцию, если возникают следующие ошибки:

Таймаут ожидания блокировки (innodb_lock_wait_timeout и lock_wait_timeout)
Найден тупик
Запрос убит (KILL QUERY )
Соединение разорвано (KILL CONNECTION )
Потеряно соединение с MySQL

В случае потери или прерывания соединения инструмент автоматически восстановит соединение.

Сбои и повторные попытки фиксируются в «-статистике».

--Пользователь
краткая форма: -u; тип: строка

Пользователь для входа, если не текущий пользователь.

--версия
Показать версию и выйти.

- [нет] проверки версии
по умолчанию: да

Проверьте наличие последней версии Percona Toolkit, MySQL и других программ.

Это стандартная функция "автоматической проверки обновлений" с двумя дополнительными
Особенности. Сначала инструмент проверяет версию других программ в локальной системе в
дополнение к собственной версии. Например, он проверяет версию каждого сервера MySQL.
он подключается к Perl и модулю Perl DBD :: mysql. Во-вторых, он проверяет и предупреждает
о версиях с известными проблемами. Например, в MySQL 5.5.25 была критическая ошибка и
был переиздан как 5.5.25a.

Все обновления или известные проблемы распечатываются в STDOUT перед обычным выводом инструмента.
Эта функция никогда не должна мешать нормальной работе инструмента.

Для получения дополнительной информации посетите .

PLUGIN


Файл, указанный параметром "--plugin", должен определять класс (т. Е. Пакет) с именем
"pt_online_schema_change_plugin" с подпрограммой "new ()". Инструмент создаст
экземпляр этого класса и вызовите любые определенные им хуки. Никаких крючков не требуется, но
плагин без них не очень полезен.

Эти хуки в этом порядке вызываются, если определены:

инициализации
before_create_new_table
after_create_new_table
before_alter_new_table
after_alter_new_table
before_create_triggers
after_create_triggers
before_copy_rows
after_copy_rows
before_swap_tables
after_swap_tables
before_update_foreign_keys
after_update_foreign_keys
before_drop_old_table
after_drop_old_table
before_drop_triggers
перед_выходом
get_slave_lag

Каждому хуку передаются разные аргументы. Чтобы увидеть, какие аргументы передаются ловушке,
найдите имя ловушки в исходном коде инструмента, например:

# --хук плагина
if ($ plugin && $ plugin-> can ('init')) {
$ plugin-> init (
orig_tbl => $ orig_tbl,
child_tables => $ child_tables,
renamed_cols => $ renamed_cols,
рабы => $ рабы,
slave_lag_cxns => $ slave_lag_cxns,
);
}

Комментарий «# --plugin hook» предшествует каждому вызову ловушки.

Пожалуйста, свяжитесь с Percona, если у вас есть вопросы или вам нужна помощь.

DSN ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ


Эти параметры DSN используются для создания DSN. Каждая опция дается как «option = value».
Параметры чувствительны к регистру, поэтому P и p - это не одно и то же. Не может быть
пробел до или после "=", и если значение содержит пробелы, его следует заключить в кавычки.
Параметры DSN разделяются запятыми. См. Полную информацию на странице руководства percona-toolkit.

· А

dsn: кодировка; копия: да

Набор символов по умолчанию.

· Д

dsn: база данных; копия: да

База данных для старой и новой таблицы.

· Ф

dsn: mysql_read_default_file; копия: да

Только читать параметры по умолчанию из данного файла

· Ч

dsn: host; копия: да

Подключитесь к хосту.

· п

dsn: пароль; копия: да

Пароль для использования при подключении. Если пароль содержит запятые, их нужно экранировать.
с обратной косой чертой: "пример \, пожалуйста"

· П

dsn: порт; копия: да

Номер порта для подключения.

· С

dsn: mysql_socket; копия: да

Файл сокета, используемый для подключения.

· Т

dsn: table; копия: нет

Таблицу переделать.

· U

dsn: пользователь; копия: да

Пользователь для входа, если не текущий пользователь.

ОКРУЖАЮЩАЯ СРЕДА


Переменная среды «PTDEBUG» включает вывод подробной отладки в STDERR. Включить
отладку и запись всего вывода в файл, запустите инструмент, например:

PTDEBUG = 1 pt-online-schema-change ...> ФАЙЛ 2> & 1

Будьте осторожны: вывод отладки очень объемный и может генерировать несколько мегабайт вывода.

СИСТЕМА ТРЕБОВАНИЯ


Вам понадобятся Perl, DBI, DBD :: mysql и некоторые основные пакеты, которые должны быть установлены в любом
разумно новая версия Perl.

Этот инструмент работает только с MySQL 5.0.2 и более новыми версиями, поскольку более ранние версии не работают.
триггеры поддержки.

Используйте pt-online-schema-changep онлайн с помощью сервисов onworks.net


Бесплатные серверы и рабочие станции

Скачать приложения для Windows и Linux

Команды Linux

Ad




×
Реклама
❤️Совершайте покупки, бронируйте или заказывайте здесь — никаких затрат, что помогает поддерживать бесплатность услуг.