Окончание сериала, смотрите начало и оглавление этого цикла статей на этой странице. Это — заключительная четвёртая часть из цикла статей «Программное окружение MySQL», которая посвящена Репликации и бэкапу данных MySQL с помощью срипт-пакета Maatkit.
Репликация — отдельная большая тема, содержащая множество специфики, которую в этой краткой статье хотелось бы опустить, в силу невозможности объять необъятное. Здесь мы сосредоточимся лишь на утилитах Maatkit для сопровождения и упрощения этой самой репликации:
А на следующей утилите из этого раздела хотелось бы остановиться чуть поподробнее, т.к. сфера её применения часто выходит за рамки только лишь штатного назначения — контроля результатов репликации. Итак, mk-table-checksum
выполняет проверку целостности данных после репликации, для чего проводится снятие контрольных сумм таблиц и баз данных на одном или множестве серверов (позволяет подключаться теоретически к неограниченному количеству серверов MySQL, проводя анализ и сравнение содержимого таблиц). Фильтр mk-checksum-filter
позволяет при этом группировать и визуально подсвечивать выходные данные mk-table-checksum
, для более наглядных результатов работы.
Утилиту mk-table-checksum
можно также использовать для сверки идентичности не только реплицируемых баз данных целиком, но и их отдельных таблиц (вне рамок репликации), например, системных с правами пользователей (если они у вас должны быть везде аналогичными или для поиска каких-либо отличий).
Репликация, как достаточно сложный процесс, требует понимания многих мелочей и деталей синхронизации: различные методы подсчета контрольных сумм в mk-table-checksum
, разработанные для разных режимов репликации, которые могут даже изменять сами сверяемые таблицы (подтверждение этого — работа утилиты с ключом —-replicate
). Общий же список алгоритмов сверки доступен через ключ —algorithm
.
Ну и в заключение пункта следует предупредить, что снятие контрольных сумм может приводить в некоторых случаях к серьёзной нагрузке на сам сервер, поэтому следует аккуратно планировать время и обстоятельства проведения подобных мероприятий.
Небольшое отступление, которое поможет лучше понять необходимость и предназначение подобных «текстовых утилит», включенных в Maatkit, но никак не связанных напрямик с функциональностью MySQL.
Дело в том, что, будучи полностью верным конвейерному принципу решения задач, характерным именно для unixway, Maatkit построен на множестве узкоспециализированных утилит, которые условно можно разделить на две диалектически связанные группы: те, которые выделяют и сохраняют проблемные SQL-запросы по самым разным критериям и условиям (в качестве выходного результата генерируя файлы-списки отобранных запросов), и вторую большую группу утилит — которая получает в качестве входящих параметров эти самые, заранее им подготовленные запросы, которые они впоследствии как-то профилируют, тестируют и так далее. Отдельная, третья группа утилит, предназначена для системного мониторинга и администрирования MySQL.
Сохранение всего накопленного содержимого баз данных является одной из основных стоящих задач перед DBA. Давайте посмотрим, что может предложить в этом плане Maatkit.
Утилита mk-parallel-dump
делает снимок (дамп) таблиц и баз данных в параллельном режиме. Применяемая в паре с ней mk-parallel-restore
, — загружает ранее сделанные резервные дампы. Главное отличительное свойство этих утилит от штатных средств и методов MySQL — использование параллельных методов доступа к базе данных, что заметно повышает скорость выполнения операции.
И, наконец, более сложный и избирательный вариант бэкапа представляет mk-archiver
— эта утилита выгружает записи, отобранные по заданному критерию, с одной таблицы MySQL в другую, этого же (или любого другого) MySQL-сервера, либо — в указанный файл. Утилита спроектирована с учетом очень простой возможности его расширения (подключение своих постпроцессов и предварительных фильтров) и добавления собственной логики сохранения данных.
Приведем пример его типичного вызова:
mk-archiver --source h=arizona_srv,D=test,t=tbl --dest h=texas_srv --file '/var/log/archive/%Y-%m-%d-%D.%t' --where "1=1" --limit 500 --commit-each
Здесь мы архивируем все записи таблицы tbl
с сервера arizona_srv
на texas_srv
, а также дополнительно дублируем содержимое этой таблицы в файл, сгенерированный с именем текущей даты. При этом формат ключа --source
будет выглядеть так:
--source h=my_server,D=my_database,t=my_tbl
Где h, D, t
— это, соответственно: узел-источник сервера MySQL, база данных и таблица на нём.
На сегодня с пакетом Maatkit всё, дополнительные вопросы можно прояснить для себя в подробной официальной документации или здесь.
~
Начало и оглавление этой серии статей смотрите здесь