Что я действительно могу сделать с помощью pt-table-sync из набора инструментов Percona?
Я искал инструмент для синхронизации таблиц из 2 разных баз данных и нашел pt-table-sync
, Я прочитал документацию и запутался: в основном они используют примеры, относящиеся к реплицированной среде, но я думал, что весь смысл репликации в том, чтобы позаботиться о синхронизации данных для вас, отсюда и мои вопросы:
ВОПРОСЫ
Какой смысл использовать
pt-table-sync
если процесс репликации должен позаботиться о синхронизации данных для вас?Могу ли я использовать
pt-table-sync
в не реплицированной среде (между 2+ хостами, которые не имеют ничего общего друг с другом, это рольpt-table-sync --execute host1 host2 host3
пример дан)?Если я должен использовать
pt-table-sync
в реплицированной среде, могу ли я обойтись безbin-logs
наmaster
(есть пример, говорящий о разрешении разногласий, обнаруженныхpt-table-checksum
так интересно, еслиbin-logs
абсолютно необходимы)?
3 ответа
Ответ на вопрос 1
MySQL Replication страдает от двух основных проблем
Репликация MySQL является асинхронной. Это может привести к задержке репликации. Это проявляется в проблемах связи между мастером и подчиненным через поток подчиненного ввода / вывода. Это можно логически и численно увидеть в
Seconds_Behind_Master
,Data Drift
, Это прерывистое состояние, когда ведущий и ведомый просто несинхронизированы из-за факторов, выходящих за рамки репликации MySQL. Например, обратите внимание на один способ лучше синхронизировать репликацию: используйте опциюsync-binlog
, Когда вы установитеsync-binlog
в 1 mysqld выполнит сброс текущего двоичного журнала для каждой записи, которую вы записываете в двоичном журнале. Это может смешно тормозить Мастера. По умолчанию,sync-binlog
это 0.- Вот вопрос: с
sync-binlog=0
Кто отвечает за сброс двоичного журнала на диск? - Ответ (пожалуйста, сядьте за это): ОПЕРАЦИОННАЯ СИСТЕМА!!!
- С этим ответом он ставит подчиненное устройство в ужасное неудобство, поскольку его поток ввода-вывода зависит от операционной системы мастера. Когда ОС Мастера приступает к сбросу двоичных изменений журнала на диск, и Поток ввода-вывода подчиненного устройства может обнаружить следующий входящий оператор SQL, тогда этот оператор передается через Поток ввода-вывода подчиненному.
- У Percona есть хороший PDF-файл о работе с данными.
- Вот вопрос: с
Ответ на вопрос 2
Прямого ответа здесь нет, потому что pt-table-sync
был разработан для обнаружения потока ввода / вывода ведомого с помощью --sync-to-master
вариант.
Ответ на вопрос 3
Прямой ответ здесь - нет, потому что MySQL Replication требует знать
- какой текущий двоичный журнал на Мастер? (это
Master_Log_File
отSHOW SLAVE STATUS\G
) - Какую последнюю позицию Slave прочитал из текущего двоичного журнала Мастера? (это
Read_Master_Log_Pos
отSHOW SLAVE STATUS\G
)
Если вы просто хотите, чтобы ваши двоичные журналы убирались с пути, вы можете сделать одну из двух вещей
- ВАРИАНТ 1: На мастере установите
expire-logs-days
3, чтобы сохранить бинарные логи за последние 3 дня- добавлять
expire-logs-days=3
в /etc/my.cnf - Перезагрузка не требуется: просто запустите
SET GLOBAL expire_logs_days = 3;
- добавлять
- ВАРИАНТ 2: Выполнить
SHOW SLAVE STATUS\G
на Рабе. Принять значениеRelay_Master_Log_File
, и используйте его, чтобы очистить двоичные журналы на Master, чтобы поднять этот файл журнала.- Предположим, вы бежите
SHOW SLAVE STATUS\G
на Рабе - Вы получаете это
Relay_Master_Log_File: mysql-bin.000035
- Запустите это на Мастере:
PURGE BINARY LOGS TO 'mysql-bin.000035';
- Предположим, вы бежите
ПРЕДЛОЖЕНИЕ
Если вы хотите больше доверять pt-table-sync, попробуйте использовать --print
вариант и перенаправление в текстовый файл вместо --execute
вариант. Это сгенерирует SQL, который обычно выполняется на Master. После этого вы можете просто запустить SQL непосредственно на этом подчиненном устройстве. Думайте об этом как генеральная репетиция для --execute
,
но я думал, что весь смысл репликации должен был позаботиться о синхронизации данных для вас
Да, репликация MySQL пытается синхронизировать реплицированную базу данных. Тем не менее, репликация MySQL сложна, и репликация может произойти сбой по разным причинам. Ошибки репликации в моем опыте редки, но они случаются во время неожиданных сбоев сервера, когда пользователи нажимают "Control-C" в середине большой вставки на мастер-диске и т. Д. MySQL.com не предоставляет хороших инструментов для работы со многими из этих проблем. К счастью, несколько инженеров, таких как Барон Шварц (первоначальный автор Percona Toolkit (ранее известный как Maatkit)) разработали инструменты, облегчающие администрирование MySQL.
Например, у меня в настоящее время есть таблица с 50 миллионами строк. Несколько строк не синхронизированы из-за сбоя сервера несколько недель назад. Мне нужно выяснить, какие строки не синхронизированы, но это было бы больно делать вручную. Я использую контрольную сумму pt-table для проверки ошибок репликации в реплике и синхронизацию pt-table для определения, какие строки отсутствуют в реплике.
Если вы рассматриваете вопрос репликации MySQL, я настоятельно рекомендую вам изучить и использовать Percona Toolkit. Если бы мы начали с Percona Toolkit, администрирование наших баз данных MySQL было бы намного проще.
Я прочитал документацию и запутался:
Документация для Percona Toolkit написана как техническое руководство. К сожалению, он не очень хорошо описывает, как использовать инструменты, как они вам помогают и т. Д. http://www.mysqlperformanceblog.com/ содержит некоторую информацию, но в основном он сосредоточен на развилке Percona MySQL (Это то, как они зарабатывают на жизнь), что требует от читателя некоторого перевода.
Ответ на вопрос 1
pt-table-sync
(вместе с pt-table-checksum
) может использоваться для исправления ошибок репликации, таких как повреждение данных, кто-то напрямую изменяет данные на ведомом устройстве, сбои сервера, изменения схемы в неправильном порядке и т. д.
тем не мение pt-table-sync
может также использоваться без репликации для синхронизации таблиц почти в реальном времени, если данные не сильно меняются.
Правильный ответ на вопрос 2
Конечно, вы можете использовать его и в не реплицированной среде, в руководстве также упоминается об этом. Я использую его из cron, чтобы синхронизировать 3 сервера mysql каждые 5 минут. Они имеют одну и ту же копию данных, которая изменяется только иногда (на первом сервере), поэтому репликация для этой цели будет излишней.
Вы можете указать отдельные базы данных или отдельные таблицы для синхронизации. Вы можете иметь несколько серверов назначения. pt-table-sync
использует несколько эффективных алгоритмов для обнаружения изменений в таблицах базы данных и копирования только этих изменений (он разбивает изменения на 4 группы: удаляет, заменяет, вставляет, обновляет).