Это команда pt-table-syncp, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
pt-table-sync - эффективная синхронизация данных таблицы MySQL.
СИНТАКСИС
Использование: pt-table-sync [ОПЦИИ] DSN [DSN]
pt-table-sync эффективно синхронизирует данные между таблицами MySQL.
Этот инструмент изменяет данные, поэтому для максимальной безопасности вы должны сделать резервную копию своих данных перед использованием.
Это. При синхронизации сервера, который является подчиненным устройством репликации, с параметром «--replicate» или
"--sync-to-master", это всегда вносит изменения в мастер репликации, никогда
подчиненное устройство репликации напрямую. Это вообще единственный безопасный способ принести реплику.
снова в синхронизации со своим хозяином; изменения в реплике обычно являются источником
проблемы в первую очередь. Однако изменения, которые он вносит в мастер, не должны выполняться.
изменения, которые устанавливают для данных их текущие значения и фактически влияют только на реплику.
Синхронизируйте db.tbl на host1 с host2:
pt-table-sync --execute h = host1, D = db, t = tbl h = host2
Синхронизируйте все таблицы на host1 с host2 и host3:
pt-table-sync --execute хост1 хост2 хост3
Сделайте так, чтобы slave1 имел те же данные, что и его мастер репликации:
pt-table-sync --execute --sync-to-master подчиненное устройство1
Устранение различий, обнаруженных контрольной суммой pt-table на всех подчиненных устройствах master1:
pt-table-sync --execute --replication test.checksum master1
То же, что и выше, но устраняет различия только на slave1:
pt-table-sync --execute --replication test.checksum \
--sync-to-master подчиненный1
Синхронизируйте master2 в конфигурации репликации master-master, где копия db.tbl master2
заведомо или предположительно неверно:
pt-table-sync --execute --sync-to-master h = master2, D = db, t = tbl
Обратите внимание, что в конфигурации мастер-мастер следующее НЕ будет делать то, что вы хотите,
потому что он будет вносить изменения непосредственно в master2, который затем будет проходить через репликацию
и измените данные master1:
# Не делайте этого при настройке мастер-мастер!
pt-table-sync --execute h = master1, D = db, t = tbl master2
РИСКИ
ПРЕДУПРЕЖДЕНИЕ: pt-table-sync изменяет данные! Перед использованием этого инструмента, пожалуйста:
· Прочтите документацию к инструменту
· Просмотрите известные "ОШИБКИ" инструмента.
· Протестируйте инструмент на непроизводственном сервере
· Сделайте резервную копию вашего производственного сервера и проверьте резервные копии
pt-table-sync является зрелым, проверенным в реальном мире и хорошо протестированным, но при использовании
неправильно это может иметь неблагоприятные последствия. Всегда сначала проверяйте синхронизацию с помощью
"--dry-run" и "--print".
ОПИСАНИЕ
pt-table-sync выполняет одностороннюю и двунаправленную синхронизацию табличных данных. Оно делает
синхронизировать структуры таблиц, индексы или любые другие объекты схемы. Следующий
описывает одностороннюю синхронизацию. «ДВУНАПРАВЛЕННАЯ СИНХРОНИЗАЦИЯ» описана позже.
Этот инструмент сложен и работает по-разному. Чтобы использовать его безопасно и
эффективно, вы должны понимать три вещи: цель "--репликация", поиск
различия и указание хостов. Эти три понятия тесно связаны и определяют
как инструмент будет работать. Ниже приводится сокращенная логика:
если DSN есть частично, синхронизируйте только эту таблицу:
если 1 DSN:
если --sync-to-master:
DSN является подчиненным. Подключитесь к своему мастеру и синхронизируйте.
если более 1 DSN:
Первый DSN - это источник. По очереди синхронизируйте каждый DSN.
иначе, если --replicate:
если --sync-to-master:
DSN является ведомым. Подключитесь к своему хозяину, найдите записи
различий и исправить.
еще:
DSN является главным. Найдите рабов и подключитесь к каждому,
найти записи о различиях и исправить.
еще:
если только 1 DSN и --sync-to-master:
DSN является подчиненным. Подключитесь к его мастеру, найдите столы и
фильтровать с помощью --databases и т. д. и синхронизировать каждую таблицу с мастером.
еще:
найти таблицы, фильтровать с помощью --databases и т.д., и синхронизировать каждый
DSN к первому.
pt-table-sync может работать одним из двух способов: с «--replicate» или без него. По умолчанию
работать без "--replicate", что заставляет pt-table-sync автоматически находить различия
эффективно с помощью одного из нескольких алгоритмов (см. «АЛГОРИТМЫ»). В качестве альтернативы значение
of "--replicate", если указано, заставляет pt-table-sync использовать уже найденные различия
предварительно запустив контрольную сумму pt-table с собственной опцией "--replicate". Строго
говоря, вам не нужно использовать "--replicate", потому что pt-table-sync может найти различия,
но многие люди используют "--replicate", если, например, они регулярно проверяют контрольную сумму, используя pt-table-
контрольную сумму затем исправьте различия по мере необходимости с помощью pt-table-sync. Если вы не уверены, прочтите каждый
документацию инструмента внимательно и решайте сами, либо проконсультируйтесь со специалистом.
Независимо от того, используется ли «--replicate» или нет, вам необходимо указать, какие хосты
синхронизировать. Есть два способа: с "--sync-to-master" или без. Указание
"--sync-to-master" заставляет pt-table-sync ожидать одного и только ведомого DSN в командной строке.
Инструмент автоматически обнаружит главного подчиненного устройства и синхронизирует его, чтобы его данные были
такой же, как его хозяин. Это достигается путем внесения изменений в мастер, который затем
пройти через репликацию и обновить ведомое устройство, чтобы устранить его различия. Be тщательный
хоть: хотя эта опция определяет и синхронизирует одно ведомое устройство, если есть другие ведомые устройства.
на том же главном устройстве они будут получать через репликацию изменения, предназначенные для подчиненного устройства.
что вы пытаетесь синхронизировать.
В качестве альтернативы, если вы не укажете "--sync-to-master", первый DSN, указанный в
командная строка - это исходный хост. Всегда есть только один исходный хост. Если вы не
укажите "--replicate", тогда вы должны указать хотя бы один другой DSN в качестве пункта назначения
хозяин. Может быть один или несколько хостов назначения. Исходный и целевой хосты должны быть
независимый; они не могут находиться в одной топологии репликации. pt-table-sync умрет с
ошибка, если он обнаруживает, что целевой хост является подчиненным, поскольку изменения записываются
непосредственно на хосты назначения (и писать напрямую на подчиненные устройства небезопасно). Или, если вы
укажите "--replicate" (но не "--sync-to-master"), тогда pt-table-sync ожидает один-единственный
один главный DSN в командной строке. Инструмент автоматически обнаружит все мастерские
рабов и синхронизируйте их с мастером. Это единственный способ синхронизировать несколько (всех) ведомых устройств на
один раз (потому что "--sync-to-master" указывает только одно ведомое устройство).
Каждый хост в командной строке указывается как DSN. Первый DSN (или только DSN для случаев
например, "--sync-to-master") предоставляет значения по умолчанию для других DSN, независимо от того,
указываются в командной строке или автоматически обнаруживаются инструментом. Итак, в этом примере
pt-table-sync --execute h = host1, u = msandbox, p = msandbox h = host2
DSN host2 наследует части DSN «u» и «p» от DSN host1. Использовать
параметр "--explain-hosts", чтобы увидеть, как pt-table-sync будет интерпретировать DSN, указанные в
командная строка.
ВЫВОД
Если вы укажете опцию «--verbose», вы увидите информацию о различиях
между столами. В каждой таблице одна строка. Каждый сервер печатается отдельно. За
пример,
# Синхронизация h = host1, D = test, t = test1
# УДАЛИТЬ ЗАМЕНИТЬ ВСТАВИТЬ АЛГОРИТМ ОБНОВЛЕНИЯ START END EXIT DATABASE.TABLE
# 0 0 3 0 Фрагмент 13:00:00 13:00:17 2 test.test1
Таблица test.test1 на host1 требовала 3 оператора INSERT для синхронизации и использовала
Алгоритм чанка (см. «АЛГОРИТМЫ»). Операция синхронизации для этой таблицы началась в 13:00:00.
и закончился через 17 секунд (время взято из «NOW ()» на исходном хосте). Потому что
отличий не обнаружено, его «СТАТУС ВЫХОДА» был 2.
Если вы укажете опцию «--print», вы увидите фактические операторы SQL, которые скрипт
используется для синхронизации таблицы, если также указано "--execute".
Если вы хотите увидеть операторы SQL, которые pt-table-sync использует для выбора фрагментов,
полубайты, строки и т. д., затем укажите «--print» один раз и «--verbose» дважды. Будь осторожен
хотя: это может напечатать много операторов SQL.
Бывают случаи, когда никакая комбинация операторов INSERT, UPDATE или DELETE не может
разрешать разногласия, не нарушая уникальный ключ. Например, предположим, что есть
первичный ключ в столбце a и уникальный ключ в столбце b. Тогда нет возможности синхронизировать эти
две таблицы с простыми операторами UPDATE:
+ --- + --- + + --- + --- +
| а | б | | а | б |
+ --- + --- + + --- + --- +
| 1 | 2 | | 1 | 1 |
| 2 | 1 | | 2 | 2 |
+ --- + --- + + --- + --- +
В этом случае инструмент переписывает запросы на «УДАЛИТЬ» и «ЗАМЕНИТЬ». Это автоматически
обрабатывается после первого нарушения индекса, поэтому вам не о чем беспокоиться.
Будьте осторожны при использовании pt-table-sync в любой настройке master-master. Мастер-мастер репликации
по своей сути сложен, и в нем легко ошибаться. Вы должны быть уверены, что используете
инструмент правильно для репликации мастер-мастер. См. «ОБЗОР» для обзора
правильное использование.
Также будьте осторожны с таблицами, у которых есть ограничения внешнего ключа с «ON DELETE» или «ON».
UPDATE ", потому что они могут вызвать непреднамеренные изменения в дочерних таблицах. См.
"- [нет] чек-дочерних-таблиц".
В общем, этот инструмент лучше всего подходит, когда ваши таблицы имеют первичный ключ или уникальный индекс.
Хотя он может синхронизировать данные в таблицах без первичного ключа или уникального индекса, он может
Лучше всего синхронизировать эти данные другими способами.
РЕПЛИКАЦИЯ БЕЗОПАСНОСТЬ
Безопасная синхронизация ведущего и ведомого устройства репликации в целом является нетривиальной проблемой.
Есть множество проблем, о которых стоит подумать, например, другие процессы, изменяющие данные,
пытается изменить данные на ведомом устройстве, независимо от того, являются ли место назначения и источник ведущим-ведущим
пара и многое другое.
Как правило, безопасный способ сделать это - изменить данные на мастере и позволить изменениям
поток через репликацию к ведомому устройству, как и любые другие изменения. Однако это работает, только если
можно ЗАМЕНИТЬ в таблицу на мастере. REPLACE работает, только если есть
уникальный индекс таблицы (в противном случае он действует как обычный INSERT).
Если ваша таблица имеет уникальные ключи, вы должны использовать «--sync-to-master» и / или «--replicate»
параметры для синхронизации ведомого устройства с его мастером. Как правило, это правильно. Когда
в таблице нет уникального ключа, нет другого выбора, кроме как изменить данные на
slave, а pt-table-sync обнаружит, что вы пытаетесь это сделать. Он будет жаловаться и
die, если вы не укажете "--no-check-slave" (см. "- [no] check-slave").
Если вы синхронизируете таблицу без первичного или уникального ключа в паре главный-главный, вы
должны изменить данные на целевом сервере. Следовательно, вам необходимо указать
"--no-bin-log" для безопасности (см. "- [no] bin-log"). Если вы этого не сделаете, изменения, которые вы вносите
целевой сервер выполнит репликацию обратно на исходный сервер и изменит там данные!
Обычно безопасный вариант для пары мастер-мастер - использовать параметр "--sync-to-master"
вариант, чтобы вы не меняли данные на конечном сервере. Вам также понадобится
укажите "--no-check-slave", чтобы pt-table-sync не жаловался на изменение данных
на рабу.
АЛГОРИТМЫ
pt-table-sync имеет общую структуру синхронизации данных, которая использует разные алгоритмы для поиска
различия. Инструмент автоматически выбирает лучший алгоритм для каждой таблицы на основе
индексы, типы столбцов и предпочтения алгоритмов, заданные параметром «--algorithms». В
Доступны следующие алгоритмы, перечисленные в порядке их предпочтения по умолчанию:
ломоть
Находит индекс, первый столбец которого является числовым (включая типы даты и времени), и
делит диапазон значений столбца на фрагменты строк размером примерно "--chunk-size".
Синхронизирует фрагмент за раз, подсчитывая контрольную сумму всего фрагмента. Если чанк отличается на
источник и место назначения, контрольные суммы строк каждого фрагмента индивидуально, чтобы найти строки, которые
отличаются.
Это эффективно, когда столбец имеет достаточную мощность, чтобы в конечном итоге фрагменты
примерно подходящего размера.
Начальная контрольная сумма для каждого фрагмента довольно мала и приводит к минимальному сетевому трафику.
и потребление памяти. Если необходимо проверить строки блока, только первичный ключ
по сети отправляются столбцы и контрольная сумма, а не вся строка. Если строка
окажется, что оно отличается, будет извлечена вся строка, но не раньше.
Обратите внимание, что этот алгоритм не будет работать, если разбить столбец char, где все значения
начнем с того же персонажа. В этом случае инструмент закроется и предложит выбрать
другой алгоритм.
клев
Находит индекс и увеличивает его по полубайтам фиксированного размера строк "--chunk-size",
с использованием алгоритма без возврата (подробнее об этом алгоритме см. pt-archiver). Это
очень похож на "Чанк", но вместо предварительного расчета границ каждого
часть таблицы, основанная на мощности индекса, он использует "LIMIT" для определения каждого полубайта
верхний предел и верхний предел предыдущего полубайта для определения нижнего предела.
Он работает поэтапно: один запрос находит строку, которая будет определять верхнюю границу следующего полубайта.
граница, а следующий запрос проверяет контрольную сумму всего полубайта. Если клев отличается
между источником и местом назначения, он исследует полубайт построчно, так же как «Чанк»
делает.
Группа по
Выбирает всю таблицу, сгруппированную по всем столбцам, с добавленным столбцом COUNT (*).
Сравнивает все столбцы и, если они одинаковые, сравнивает значение столбца COUNT (*) с
определить, сколько строк нужно вставить или удалить в место назначения. Работает на столах
без первичного ключа или уникального индекса.
Поток
Выбирает всю таблицу в одном большом потоке и сравнивает все столбцы. Выбирает все
столбцы. Намного менее эффективен, чем другие алгоритмы, но работает, когда нет
подходящий индекс для их использования.
Планы на будущее
Возможности для будущих алгоритмов - это TempTable (то, что я первоначально называл восходящим
в более ранних версиях этого инструмента), DrillDown (то, что я первоначально называл сверху вниз) и
GroupByPrefix (аналогично тому, как работает агент задания SqlYOG). У каждого алгоритма есть свои сильные стороны
и слабые стороны. Если вы хотите применить свою любимую технику поиска
различия между двумя источниками данных на возможно разных серверах, я готов
помощь. Алгоритмы придерживаются простого интерфейса, что позволяет довольно легко писать
твой собственный.
ДВУНАПРАВЛЕННЫЙ СИНХРОНИЗАЦИИ
Двунаправленная синхронизация - это новая экспериментальная функция. Чтобы он работал надежно, есть
ряд строгих ограничений:
* работает только при синхронизации одного сервера с другими независимыми серверами
* никак не работает с репликацией
* требует, чтобы таблицы были разбиты на части с помощью алгоритма Chunk
* не N-way, только двунаправленный между двумя серверами одновременно
* не обрабатывает изменения DELETE
Например, предположим, что у нас есть три сервера: c1, r1, r2. c1 - центральный сервер, a
псевдо-мастер для других серверов (а именно, r1 и r2 не являются подчиненными для c1). r1 и r2 являются
удаленные серверы. Строки в таблице foo обновляются и вставляются на всех трех серверах, и мы
хотите синхронизировать все изменения между всеми серверами. В таблице foo есть столбцы:
id int ПЕРВИЧНЫЙ КЛЮЧ
метка времени ts обновляется автоматически
имя varchar
Смещения автоинкремента используются, чтобы новые строки с любого сервера не создавали конфликтующих
значения первичного ключа (id). Как правило, новые строки, определяемые столбцом ts, занимают
приоритет, когда во время двунаправленной синхронизации обнаруживается одна и та же, но отличающаяся строка. "Тем же
но разные "означает, что две строки имеют одинаковое значение первичного ключа (id), но разные
значения для некоторого другого столбца, например столбца имени в этом примере. То же, но разные
конфликты разрешаются «конфликтом». Конфликт сравнивает некоторую колонку конкурирующих
строк для определения «победителя». Выигрышный ряд становится источником, и используются его значения.
чтобы обновить другую строку.
Между тремя столбцами, используемыми для двунаправленной синхронизации, есть тонкие различия.
с которыми вы должны быть знакомы: столбец фрагмента ("--chunk-column"), столбец (столбцы) сравнения
("--columns") и столбец конфликта ("--conflict-column"). Столбец фрагмента используется только
разбить таблицу на части; например, "WHERE id> = 5 AND id <10". Куски суммируются по контрольной сумме, и когда
Контрольные суммы блока показывают разницу, инструмент выбирает строки в этом блоке и контрольные суммы
«--columns» для каждой строки. Если контрольная сумма столбца отличается, в строках есть один или несколько
конфликтующие значения столбца. В традиционной однонаправленной синхронизации конфликт спорный
точку, потому что ее можно решить, просто обновив всю целевую строку с помощью
значения исходной строки. Однако при двунаправленной синхронизации "--conflict-column" (в
соответствие с другим списком опций "--conflict- *" ниже) сравнивается, чтобы определить, какие
строка "правильная" или "авторитетная"; эта строка становится «источником».
Для полной синхронизации всех трех серверов требуется два запуска pt-table-sync. Первое
запустить синхронизацию c1 и r1, затем синхронизировать c1 и r2, включая любые изменения из r1. На данный момент c1
и r2 полностью синхронизированы, но в r1 отсутствуют какие-либо изменения по сравнению с r2, потому что c1 не
есть эти изменения, когда он и r1 были синхронизированы. Поэтому необходим второй прогон, который синхронизирует
серверы в том же порядке, но на этот раз, когда c1 и r1 синхронизированы, r1 получает изменения r2.
Инструмент не синхронизирует N-образные линии, а только двунаправленно между первым DSN, указанным на
командная строка и каждый последующий DSN по очереди. Таким образом, инструмент в этом примере будет запущен
дважды как:
pt-table-sync - двунаправленный h = c1 h = r1 h = r2
Параметр "--bidirectional" включает эту функцию и вызывает различные проверки работоспособности.
выполненный. Вы должны указать другие параметры, которые сообщают pt-table-sync, как разрешить
конфликты для одинаковых, но разных строк. Вот эти варианты:
* --конфликт-столбец
* --conflict-сравнение
* --конфликтное значение
* --конфликт-порог
* --conflict-error "> (необязательно)
Используйте «--print», чтобы проверить эту опцию перед «--execute». Напечатанные операторы SQL будут
есть комментарии о том, на каком хосте оператор будет выполнен, если вы использовали
"--выполнять".
Техническое примечание: первый DSN всегда является "левым" сервером, а остальные DSN -
всегда «правильный» сервер. Поскольку любой сервер может стать источником или местом назначения, он
сбивает с толку думать о них как о «src» и «dst». Следовательно, они обычно называются
как слева, так и справа. Это легко запомнить, потому что первый DSN всегда слева.
DSN других серверов в командной строке.
ВЫХОД статус
Ниже приведены статусы выхода (также называемые возвращаемыми значениями или кодами возврата), когда pt-
table-sync завершает работу и завершает работу.
СТАТУС ЗНАЧЕНИЕ
====== ============================================ ===========
0 Успех.
1 Внутренняя ошибка.
2 По крайней мере одна таблица отличается по назначению.
3 Комбинация 1 и 2.
ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ
Укажите хотя бы одно из «--print», «--execute» или «--dry-run».
«--where» и «--replicate» исключают друг друга.
Этот инструмент принимает дополнительные аргументы командной строки. Обратитесь к «ОБЗОРУ» и использованию
информация для подробностей.
--алгоритмы
тип: строка; по умолчанию: Chunk, Nibble, GroupBy, Stream
Алгоритм для использования при сравнении таблиц в порядке предпочтения.
Для каждой таблицы pt-table-sync проверит, можно ли синхронизировать таблицу с заданным
алгоритмы в том порядке, в котором они указаны. Первый алгоритм, который может синхронизировать
таблица используется. См. «АЛГОРИТМЫ».
--иск-пас
Запрашивать пароль при подключении к MySQL.
- двунаправленный
Включите двунаправленную синхронизацию между первым и последующими хостами.
См. «ДВУНАПРАВЛЕННАЯ СИНХРОНИЗАЦИЯ» для получения дополнительной информации.
- [нет] bin-log
по умолчанию: да
Войдите в двоичный журнал («SET SQL_LOG_BIN = 1»).
Указание «--no-bin-log» приведет к «SET SQL_LOG_BIN = 0».
--буфер-в-MySQL
Укажите MySQL буферизировать запросы в своей памяти.
Этот параметр добавляет параметр «SQL_BUFFER_RESULT» в запросы сравнения. Этот
заставляет MySQL выполнять запросы и помещать их во временную таблицу внутри
перед отправкой результатов обратно в pt-table-sync. Преимущество этой стратегии:
что pt-table-sync может извлекать строки по желанию, не используя много памяти внутри
Perl-процесс, снимая блокировки с таблицы MySQL (чтобы уменьшить конкуренцию с
другие запросы). Недостатком является то, что он использует больше памяти на сервере MySQL.
.
Вы, вероятно, захотите также оставить включенным "- [no] buffer-to-client", потому что буферизация
во временную таблицу, а затем загрузить все это в память Perl, вероятно, глупо
вещь которую нужно сделать. Эта опция наиболее полезна для алгоритмов GroupBy и Stream, которые
может получить много данных с сервера.
- [нет] буфер для клиента
по умолчанию: да
Получать строки одну за другой из MySQL во время сравнения.
Эта опция включает mysql_use_result, который заставляет MySQL удерживать выбранные строки на
сервер, пока инструмент их не загрузит. Это позволяет инструменту использовать меньше памяти, но
может дольше удерживать строки на сервере заблокированными.
Если этот параметр отключен указанием «--no-buffer-to-client», то
"mysql_store_result" используется, что заставляет MySQL отправлять все выбранные строки в инструмент
однажды. Это может привести к тому, что "курсор" результатов будет оставаться открытым в течение более короткого времени.
на сервере, но если таблицы большие, это может занять много времени, и используйте
вся твоя память.
Для большинства нетривиальных размеров данных вы хотите оставить эту опцию включенной.
Эта опция отключена, когда используется "--bidirectional".
--charset
краткая форма: -A; тип: строка
Набор символов по умолчанию. Если значение - utf8, устанавливает binmode Perl на STDOUT на utf8,
передает параметр mysql_enable_utf8 в DBD :: mysql и запускает SET NAMES UTF8 после
подключение к MySQL. Любое другое значение устанавливает binmode на STDOUT без слоя utf8,
и запускает SET NAMES после подключения к MySQL.
- [нет] чек-дочерних таблиц
по умолчанию: да
Проверьте, не повлияет ли "--execute" на дочерние таблицы. Когда "--replace",
"--replicate" или "--sync-to-master" указано, инструмент может синхронизировать таблицы, используя
Заявления «ЗАМЕНИТЬ». Если у синхронизируемой таблицы есть дочерние таблицы с "ON DELETE"
CASCADE "," ON UPDATE CASCADE "или" ON UPDATE SET NULL "инструмент выводит ошибку и
пропускает таблицу, потому что "REPLACE" становится "DELETE", затем "INSERT", поэтому "DELETE" будет
каскадировать в дочернюю таблицу и удалять ее строки. В худшем случае это может удалить
все строки в дочерних таблицах!
Укажите "--no-check-child-tables", чтобы отключить эту проверку. Чтобы полностью избежать
влияющие на дочерние таблицы, также укажите "--no-external-key-tests", чтобы MySQL не
каскадировать любые операции от родительских к дочерним таблицам.
Эта проверка выполняется, только если "--execute" и одно из "--replace", "--replicate" или
"--sync-to-master" указан. «--print» не проверяет дочерние таблицы.
Сообщение об ошибке печатает только первую дочернюю таблицу, найденную с помощью «ON DELETE CASCADE»,
Ограничение внешнего ключа «ON UPDATE CASCADE» или «ON UPDATE SET NULL». Может быть
другие затронутые дочерние таблицы.
- [нет] чек-мастер
по умолчанию: да
С помощью «--sync-to-master» попробуйте проверить, что обнаруженный мастер является настоящим мастером.
- [нет] чек-раб
по умолчанию: да
Проверьте, является ли целевой сервер подчиненным.
Если целевой сервер является подчиненным, вносить на него изменения обычно небезопасно.
Однако иногда приходится; "--replace" не будет работать, если нет уникального индекса,
например, поэтому вы не можете вносить изменения в мастер в этом сценарии. По умолчанию pt-
table-sync будет жаловаться, если вы попытаетесь изменить данные на ведомом устройстве. Уточнить
"--no-check-slave", чтобы отключить эту проверку. Используйте его на свой страх и риск.
- [нет] чек-триггеров
по умолчанию: да
Убедитесь, что в целевой таблице не определены триггеры.
Триггеры были введены в MySQL v5.0.2, поэтому для более старых версий этот параметр не имеет
эффект, потому что триггеры не будут проверяться.
--chunk-столбец
тип: строка
Разделите таблицу на этот столбец.
--chunk-индекс
тип: строка
Разбейте таблицу на части, используя этот индекс.
- размер куска
тип: строка; по умолчанию: 1000
Количество строк или размер данных в блоке.
Размер каждого блока строк для алгоритмов "Chunk" и "Nibble". Размер может
быть либо количеством строк, либо размером данных. Размеры данных указываются с суффиксом
k = кибибайты, M = мебибайты, G = гибибайты. Размеры данных преобразуются в количество строк
разделив на среднюю длину строки.
--колонны
краткая форма: -c; тип: массив
Сравните этот список столбцов, разделенных запятыми.
--config
тип: Массив
Прочтите этот список файлов конфигурации, разделенных запятыми; если указано, это должно быть первым
параметр в командной строке.
--conflict-столбец
тип: строка
Сравните этот столбец, когда строки конфликтуют во время "--bidirectional" синхронизации.
Когда обнаруживается одна и та же, но отличающаяся строка, значение этого столбца из каждой строки равно
по сравнению с "--conflict-compare", "--conflict-value" и
"--conflict-threshold", чтобы определить, какая строка содержит правильные данные и становится
источник. Столбец может быть любого типа, для которого существует соответствующий
«--conflict-compare» (это почти все типы, кроме, например, blobs).
Эта опция работает только с "--bidirectional". См. «ДВУНАПРАВЛЕННАЯ СИНХРОНИЗАЦИЯ» для получения дополнительной информации.
Информация.
--конфликт-сравнение
тип: строка
Выберите "--conflict-column" с этим свойством в качестве источника.
Параметр влияет на то, как значения "--conflict-column" из конфликтующих строк будут
в сравнении. Возможные сравнения - одно из этих MAGIC_comparsions:
самый новый | самый старый | наибольший | наименьший | равно | совпадения
СРАВНЕНИЕ ВЫБИРАЕТ СТРОКУ С
========== ======================================== =================
newest Новейшее временное значение --conflict-column value
самое старое Самое старое временное значение --conflict-column значение
наибольшее Наибольшее числовое значение "--conflict-column value
наименьшее числовое значение --conflict-column value
равно --conflict-column значение равно --conflict-value
соответствует --conflict-column значение, соответствующее шаблону регулярного выражения Perl
- значение конфликта
Эта опция работает только с "--bidirectional". См. «ДВУНАПРАВЛЕННАЯ СИНХРОНИЗАЦИЯ» для получения дополнительной информации.
Информация.
- конфликт-ошибка
тип: строка; по умолчанию: предупреждать
Как сообщать о неразрешимых конфликтах и конфликтных ошибках
Этот параметр изменяет способ уведомления пользователя, когда конфликт не может быть разрешен или
вызывает какую-то ошибку. Возможные значения:
* warn: Распечатать предупреждение STDERR о неразрешимом конфликте
* die: Die, остановить синхронизацию и распечатать предупреждение для STDERR
Эта опция работает только с "--bidirectional". См. «ДВУНАПРАВЛЕННАЯ СИНХРОНИЗАЦИЯ» для получения дополнительной информации.
Информация.
--conflict-threshold
тип: строка
Величина, на которую один "--conflict-column" должен превосходить другой.
"--Conflict-threshold" предотвращает разрешение конфликта, если абсолютное
разница между двумя значениями "--conflict-column" меньше этой суммы. Для
Например, если два "--conflict-column" имеют значения отметки времени "2009-12-01 12:00:00" и
«2009-12-01 12:05:00» разница 5 минут. Если установлен "--conflict-threshold"
на "5m" конфликт будет разрешен, но если "--conflict-threshold" установлен на "6m"
конфликт не разрешится, потому что разница не больше или равна
до 6 минут. В последнем случае "--conflict-error" сообщит об ошибке.
Эта опция работает только с "--bidirectional". См. «ДВУНАПРАВЛЕННАЯ СИНХРОНИЗАЦИЯ» для получения дополнительной информации.
Информация.
- значение конфликта
тип: строка
Используйте это значение для определенного "--conflict-compare".
Эта опция дает значение для «равно» и «совпадает» «--conflict-compare».
Эта опция работает только с "--bidirectional". См. «ДВУНАПРАВЛЕННАЯ СИНХРОНИЗАЦИЯ» для получения дополнительной информации.
Информация.
- базы данных
краткая форма: -d; тип: хеш
Синхронизировать только этот список баз данных, разделенных запятыми.
Обычный запрос - синхронизировать таблицы из одной базы данных с таблицами из другой базы данных.
на том же или другом сервере. Пока это невозможно. "--databases" не годится
это, и вы не можете сделать это с частью D DSN, потому что в отсутствие
имя таблицы предполагается, что весь сервер должен быть синхронизирован, а часть D управляет только
база данных соединения по умолчанию.
--defaults-файл
краткая форма: -F; тип: строка
Только читать параметры mysql из данного файла. Вы должны указать абсолютный путь.
--прогон, репетиция
Проанализируйте, выберите алгоритм синхронизации, распечатайте и выйдите.
Подразумевается "--verbose", чтобы вы могли видеть результаты. Результаты находятся в том же выводе
формат, который вы увидите при фактическом запуске инструмента, но будут нули для
затронутые строки. Это потому, что инструмент действительно запускается, но останавливается перед ним.
сравнивает любые данные и просто возвращает нули. Нули не означают, что изменений нет.
быть произведенным.
--двигатели
краткая форма: -e; тип: хеш
Синхронизируйте только этот список механизмов хранения, разделенных запятыми.
--выполнять
Выполняйте запросы, чтобы таблицы содержали идентичные данные.
Эта опция заставляет pt-table-sync фактически синхронизировать данные таблицы, выполняя все запросы.
которые он создал для устранения различий в таблицах. Следовательно, Эта таблица предусматривает be измененный!
И если вы также не укажете «--verbose», изменения будут внесены незаметно. Если это
это не то, что вы хотите, см. «--print» или «--dry-run».
--explain-hosts
Распечатайте информацию о подключении и выйдите.
Распечатайте список хостов, к которым будет подключаться pt-table-sync, со всеми различными
варианты подключения и выход.
--плавающая точность
тип: int
Точность преобразования чисел в строку "FLOAT" и "DOUBLE". Причины FLOAT и
DOUBLE значения округляются до указанного количества цифр после десятичной точки,
с КРУГЛЫЙ() функция в MySQL. Это может помочь избежать несоответствия контрольной суммы из-за
разные представления одних и тех же значений с плавающей запятой в разных MySQL
версии и оборудование. По умолчанию округление не производится; значения конвертируются в
струны СЦЕПИТЬ () функция, а MySQL выбирает строковое представление. если ты
укажите значение 2, например, тогда значения 1.008 и 1.009 будут округлены до
1.01, и контрольная сумма будет равна.
- [нет] проверки внешнего ключа
по умолчанию: да
Включите проверку внешнего ключа ("SET FOREIGN_KEY_CHECKS = 1").
Указание «--no-external-key-tests» приведет к «SET FOREIGN_KEY_CHECKS = 0».
--функция
тип: строка
Какую хеш-функцию вы хотите использовать для контрольных сумм.
По умолчанию - «CRC32». Другие хорошие варианты включают «MD5» и «SHA1». Если у вас есть
установил пользовательскую функцию "FNV_64", "pt-table-sync" обнаружит ее и
предпочитаю использовать его, потому что он намного быстрее встроенных. Вы также можете использовать
MURMUR_HASH, если вы установили эту пользовательскую функцию. Оба они
распространяется вместе с Maatkit. См. Pt-table-контрольную сумму для получения дополнительной информации и тестов.
--Помогите
Показать справку и выйти.
- [нет] hex-blob
по умолчанию: да
Столбцы «HEX ()», «BLOB», «TEXT» и «BINARY».
Когда данные строки извлекаются из источника для создания запросов для синхронизации данных (т. Е.
запросы, видимые с помощью "--print" и выполняемые с помощью "--execute"), двоичные столбцы обертываются
in HEX () поэтому двоичные данные не создают недопустимый оператор SQL. Вы можете
отключите эту опцию, но вам, вероятно, не стоит.
--хозяин
краткая форма: -h; тип: строка
Подключитесь к хосту.
--игнорировать столбцы
тип: Хеш
Игнорируйте этот разделенный запятыми список имен столбцов при сравнениях.
Эта опция запрещает сравнение столбцов. Однако, если строка определена как
различаются между таблицами, все столбцы в этой строке будут синхронизированы независимо. (Нет
в настоящее время возможно исключить столбцы из самого процесса синхронизации, только из
сравнение.)
--ignore-базы данных
тип: Хеш
Игнорируйте этот список баз данных, разделенных запятыми.
(системные базы данных, такие как INFORMATION_SCHEMA , так и в представление_схемы игнорируются
дефолт)
--ignore -otors
тип: Hash; по умолчанию: FEDERATED, MRG_MyISAM
Игнорируйте этот разделенный запятыми список механизмов хранения.
--игнорировать-таблицы
тип: Хеш
Игнорируйте этот список таблиц, разделенных запятыми.
Имена таблиц могут быть дополнены именем базы данных.
--ignore-таблицы-регулярное выражение
тип: строка; группа: Фильтр
Игнорируйте таблицы, имена которых соответствуют регулярному выражению Perl.
- [нет] указатель-подсказка
по умолчанию: да
Добавьте подсказки FORCE / USE INDEX к запросам фрагментов и строк.
По умолчанию "pt-table-sync" добавляет подсказку FORCE / USE INDEX к каждому оператору SQL для принуждения
MySQL на использование индекса, выбранного алгоритмом синхронизации или указанного
"--chunk-index". Обычно это хорошо, но в редких случаях индекс может не совпадать.
лучше всего подходит для запроса, поэтому вы можете подавить подсказку индекса, указав
"--no-index-hint" и пусть MySQL выберет индекс.
Это не влияет на запросы, выводимые с помощью "--print"; это влияет только на чанк и
запросы строк, которые "pt-table-sync" использует для выбора и сравнения строк.
--замок
тип: int
Блокировать таблицы: 0 = нет, 1 = на цикл синхронизации, 2 = на таблицу или 3 = глобально.
Это использует «ТАБЛИЦЫ БЛОКИРОВКИ». Это может помочь предотвратить изменение таблиц, пока вы
исследуя их. Возможные значения:
ЗНАЧЕНИЕ СТОИМОСТИ
===== ============================================= ==========
0 Никогда не блокируйте таблицы.
1 Блокировка и разблокировка один раз за цикл синхронизации (как реализовано
алгоритмом синхронизации). Это самый гранулированный
доступный уровень блокировки. Например, Чанк
алгоритм заблокирует каждый фрагмент C ряды, а затем
разблокировать их, если они совпадают по источнику и
назначения, прежде чем перейти к следующему фрагменту.
2 Блокировка и разблокировка до и после каждого стола.
3 Блокировка и разблокировка один раз для каждого синхронизированного сервера (DSN), с
C .
Подчиненное устройство репликации никогда не блокируется, если указано «--replicate» или «--sync-to-master».
указан, так как теоретически блокировка таблицы на мастере должна предотвратить любые изменения
от происходящего. (Вы не меняете данные на своем ведомом устройстве, верно?) Если "--wait" -
задано, мастер (источник) заблокирован, а затем инструмент ждет, пока ведомый не догонит
мастеру, прежде чем продолжить.
Если указано "--transaction", "LOCK TABLES" не используется. Вместо этого заблокируйте и разблокируйте
реализуются путем начала и фиксации транзакций. Исключение составляют случаи, когда
«--lock» равно 3.
Если указано "--no-transaction", то "LOCK TABLES" используется для любого значения
"--замок". См. «- [нет] транзакции».
- заблокировать и переименовать
Заблокируйте исходную и целевую таблицы, синхронизируйте, а затем поменяйте местами имена. Это полезно как
менее блокирующий ALTER TABLE, когда таблицы достаточно синхронизированы друг с другом
(что вы можете выполнить с помощью любого количества средств, включая дамп и перезагрузку
или даже что-то вроде pt-archiver). Требуется ровно два DSN и предполагается, что они
находятся на одном сервере, поэтому он не ждет репликации или чего-то подобного. Таблицы
заблокирован с помощью LOCK TABLES.
--пароль
краткая форма: -p; тип: строка
Пароль для использования при подключении. Если пароль содержит запятые, их нужно экранировать.
с обратной косой чертой: "пример \, пожалуйста"
--пид
тип: строка
Создайте данный файл PID. Инструмент не запустится, если файл PID уже существует и
PID, который он содержит, отличается от текущего PID. Однако, если файл PID
существует и содержащийся в нем PID больше не работает, инструмент перезапишет PID
файл с текущим PID. PID-файл автоматически удаляется при выходе из инструмента.
--порт
краткая форма: -P; тип: int
Номер порта для подключения.
--Распечатать
Запросы на печать, которые устранят различия.
Если вы не доверяете pt-table-sync или просто хотите посмотреть, что он будет делать, это
хороший способ обезопасить себя. Эти запросы являются действительными SQL, и вы можете запустить их самостоятельно, если вы
хотите синхронизировать таблицы вручную.
- рекурсивный метод
тип: массив; по умолчанию: список процессов, хосты
Предпочтительный метод рекурсии, используемый для поиска ведомых устройств.
Возможные методы:
ИСПОЛЬЗОВАНИЕ МЕТОДА
=========== ===================
список процессов ПОКАЗАТЬ СПИСОК ПРОЦЕССОВ
хосты SHOW SLAVE HOSTS
никто не найду рабов
Метод списка процессов предпочтительнее, поскольку SHOW SLAVE HOSTS не является надежным.
Однако метод hosts требуется, если сервер использует нестандартный порт (не
3306). Обычно pt-table-sync делает правильные вещи и находит ведомые устройства, но вы можете
укажите предпочтительный метод, и он будет использован первым. Если он не найдет рабов,
другие методы будут испробованы.
--заменять
Запишите все операторы «INSERT» и «UPDATE» как «REPLACE».
Это автоматически включается по мере необходимости, когда есть нарушения уникального индекса.
- повторять
тип: строка
Таблицы синхронизации перечислены в этой таблице как разные.
Указывает, что "pt-table-sync" должен исследовать указанную таблицу для поиска данных, которые
отличается. Таблица точно такая же, как аргумент с тем же именем для pt-table-
контрольная сумма. То есть он содержит записи о том, какие таблицы (и диапазоны значений) отличаются
между мастером и рабом.
Для каждой таблицы и диапазона значений, которые показывают различия между основным и
ведомый, "pt-table-контрольная сумма" синхронизирует эту таблицу с соответствующим предложением "WHERE",
своему хозяину.
Это автоматически устанавливает для параметра "--wait" значение 60 и приводит к внесению изменений на главном сервере.
вместо раба.
Если указан "--sync-to-master", инструмент будет считать, что указанный вами сервер является
ведомое устройство и подключитесь к ведущему, как обычно, для синхронизации.
В противном случае он попытается использовать "SHOW PROCESSLIST" для поиска подчиненных серверов сервера, на котором вы
указано. Если он не может найти какие-либо ведомые устройства через «SHOW PROCESSLIST», он проверит
"ПОКАЗАТЬ РАБОЧИЕ ХОЗЯЙСТВА" вместо этого. Вы должны настроить "report-host" для каждого ведомого устройства,
"report-port" и другие параметры для правильной работы. Найдя рабов, он
проверить указанную таблицу на каждом ведомом устройстве, чтобы найти данные, которые необходимо синхронизировать, и
синхронизировать это.
Инструмент сначала исследует главную копию таблицы, предполагая, что это главная копия таблицы.
потенциально также раб. Любая таблица, в которой показаны различия, будет НЕ be
синхронизируется на подчиненных устройствах. Например, предположим, что ваша репликация настроена как A-> B,
Б-> С, Б-> Д. Предположим, вы используете этот аргумент и указываете сервер B. Инструмент будет
проверьте копию таблицы на сервере B. Если это похоже на данные сервера B в таблице
"test.tbl1" отличается от копии сервера A, инструмент не будет синхронизировать эту таблицу на
серверы C и D.
--set-варс
тип: Массив
Задайте переменные MySQL в этом списке пар «переменная = значение», разделенном запятыми.
По умолчанию набор инструментов:
wait_timeout = 10000
Переменные, указанные в командной строке, отменяют эти значения по умолчанию. Например,
указание "--set-vars wait_timeout = 500" отменяет значение по умолчанию 10000.
Инструмент выводит предупреждение и продолжает, если переменная не может быть установлена.
--разъем
краткие формы; тип: строка
Файл сокета, используемый для подключения.
--синхронизация с мастером
Считайте DSN подчиненным и синхронизируйте его с главным устройством.
Считайте указанный сервер подчиненным. Проверьте "ПОКАЗАТЬ СТАТУС ПОДЧИНЕННОГО", подключитесь к
ведущего сервера и рассматривать ведущее устройство как источник, а ведомое устройство как
назначения. Вызывает внесение изменений в мастер. Устанавливает "--wait" равным 60 с помощью
default, по умолчанию для параметра "--lock" устанавливается значение 1, а для параметра "- [no] transaction" - по умолчанию отключено значение "- [no] transaction".
См. Также «--replicate», который изменяет поведение этой опции.
--таблицы
краткая форма: -t; тип: хэш
Синхронизировать только этот список таблиц, разделенных запятыми.
Имена таблиц могут быть дополнены именем базы данных.
--timeout-ок
Продолжайте, если "--wait" не работает.
Если вы укажете "--wait" и ведомое устройство не догонит позицию ведущего до
время ожидания истекло, по умолчанию выполняется прерывание. Эта опция заставляет инструмент сохранять
все равно идет. Предупреждение: если вы пытаетесь получить последовательное сравнение между
два сервера, вы, вероятно, не захотите продолжать работу после тайм-аута.
- [нет] транзакции
Используйте транзакции вместо «БЛОКИРОВКИ ТАБЛИЦ».
Гранулярность начала и фиксации транзакций контролируется параметром «--lock».
По умолчанию это включено, но поскольку "--lock" по умолчанию отключено, у него нет
Эффект.
Большинство параметров, которые включают блокировку, также отключают транзакции по умолчанию, поэтому, если вы хотите
чтобы использовать транзакционную блокировку (через "LOCK IN SHARE MODE" и "FOR UPDATE", вы должны
явно укажите "--transaction".
Если вы не укажете "--transaction" явно, "pt-table-sync" определит,
основание таблицы, использовать ли транзакции или блокировки таблицы. В настоящее время он использует
транзакции в таблицах InnoDB и блокировки таблиц для всех остальных.
Если указан "--no-transaction", то "pt-table-sync" не будет использовать транзакции в
all (даже для таблиц InnoDB), а блокировка контролируется "--lock".
При включении явно или неявно устанавливается уровень изоляции транзакции.
«ПОВТОРНОЕ ЧТЕНИЕ» и транзакции запускаются «С ПОМОЩЬЮ СНИМКИ».
--отделка
Столбцы «TRIM ()» «VARCHAR» в режимах «BIT_XOR» и «ACCUM». Помогает при сравнении MySQL
От 4.1 до> = 5.0.
Это полезно, когда вас не волнуют различия в конечных пробелах между MySQL.
версии, которые различаются обработкой конечных пробелов. MySQL 5.0 и выше все
оставить конечные пробелы в "VARCHAR", в то время как предыдущие версии удаляли их.
- [нет] уникальных проверок
по умолчанию: да
Включить проверку уникальности ключа ("SET UNIQUE_CHECKS = 1").
Указание «--no-unique-check» приведет к «SET UNIQUE_CHECKS = 0».
--Пользователь
краткая форма: -u; тип: строка
Пользователь для входа, если не текущий пользователь.
--подробный
краткая форма: -v; совокупно: да
Распечатать результаты операций синхронизации.
См. «ВЫХОД» для получения более подробной информации о выходе.
--версия
Показать версию и выйти.
- [нет] проверки версии
по умолчанию: да
Проверьте наличие последней версии Percona Toolkit, MySQL и других программ.
Это стандартная функция "автоматической проверки обновлений" с двумя дополнительными
Особенности. Сначала инструмент проверяет версию других программ в локальной системе в
дополнение к собственной версии. Например, он проверяет версию каждого сервера MySQL.
он подключается к Perl и модулю Perl DBD :: mysql. Во-вторых, он проверяет и предупреждает
о версиях с известными проблемами. Например, в MySQL 5.5.25 была критическая ошибка и
был переиздан как 5.5.25a.
Все обновления или известные проблемы распечатываются в STDOUT перед обычным выводом инструмента.
Эта функция никогда не должна мешать нормальной работе инструмента.
Для получения дополнительной информации посетите .
--ждать
краткая форма: -w; тип: время
Как долго ждать, пока рабы догонят своего хозяина.
Заставьте ведущее устройство дождаться, пока ведомое устройство не догонит репликацию, прежде чем сравнивать
таблицы. Значение представляет собой количество секунд ожидания перед истечением времени ожидания (см. Также
"--timeout-ok"). По умолчанию устанавливает «--lock» в 1 и «- [no] transaction» в 0. если ты
увидеть такую ошибку, как следующая,
MASTER_POS_WAIT вернул -1
Это означает, что тайм-аут был превышен, и вам нужно его увеличить.
На значение этого параметра по умолчанию влияют другие параметры. Чтобы узнать, что такое ценность
по сути, используйте "--help".
Чтобы полностью отключить ожидание (кроме блокировок), укажите "--wait" 0. Это помогает, когда
ведомое устройство отстает от таблиц, которые не синхронизируются.
--куда
тип: строка
Предложение «WHERE», чтобы ограничить синхронизацию частью таблицы.
- [нет] нулевой кусок
по умолчанию: да
Добавьте блок для строк с нулевым или нулевым эквивалентом значений. Эффект действует только тогда, когда
указан "--chunk-size". Цель нулевого фрагмента - захватить
потенциально большое количество нулевых значений, которые нарушили бы размер первого
кусок. Например, если в беззнаковый
целочисленный столбец, в результате чего они сохраняются как нули, затем эти нулевые значения фиксируются
по нулевому фрагменту вместо первого фрагмента и всех его ненулевых значений.
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-table-sync ...> ФАЙЛ 2> & 1
Будьте осторожны: вывод отладки очень объемный и может генерировать несколько мегабайт вывода.
СИСТЕМА ТРЕБОВАНИЯ
Вам понадобятся Perl, DBI, DBD :: mysql и некоторые основные пакеты, которые должны быть установлены в любом
разумно новая версия Perl.
Используйте pt-table-syncp онлайн с помощью сервисов onworks.net