≫ Защита и сжатие таблицы

Резервное копирование и восстановление

Регулярное резервное копирование ваших таблиц необходимо для восстановления в случае сбоев системы, отказа оборудования или повреждения/потери данных. Также настоятельно рекомендуется создавать резервные копии перед обновлением до новой версии Manticore Search или выполнением ALTER TABLE.

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

Логические резервные копии

Логические резервные копии предполагают экспорт схемы базы данных и данных в виде SQL-запросов или в форматах данных, специфичных для базы данных. Эта форма резервного копирования обычно читаема человеком и может использоваться для восстановления базы данных на различных системах или движках баз данных.

Плюсы и минусы логических резервных копий:

  • Портативность: Логические резервные копии, как правило, более портативны, чем физические, так как их можно использовать для восстановления базы данных на разном оборудовании или операционных системах.
  • Гибкость: Логические резервные копии позволяют выборочно восстанавливать конкретные таблицы, индексы или другие объекты базы данных.
  • Совместимость: Логические резервные копии можно использовать для миграции данных между разными системами управления базами данных или версиями, при условии, что целевая система поддерживает экспортируемый формат или SQL-запросы.
  • Медленнее создание и восстановление: Логические резервные копии могут выполняться медленнее, чем физические, так как движок базы данных должен преобразовать данные в SQL-запросы или другой формат экспорта.
  • Повышенная нагрузка на систему: Создание логических резервных копий может вызывать большую нагрузку на систему, так как процесс требует больше ресурсов CPU и памяти для обработки и экспорта данных.

Manticore Search поддерживает mysqldump для логических резервных копий.

Физические резервные копии

Физические резервные копии включают копирование необработанных файлов данных и системных файлов, составляющих базу данных. Этот тип резервного копирования фактически создает снимок физического состояния базы данных в определенный момент времени.

Плюсы и минусы физических резервных копий:

  • Скорость: Физические резервные копии обычно выполняются быстрее логических, так как включают прямое копирование необработанных файлов данных с диска.
  • Согласованность: Физические резервные копии обеспечивают согласованное резервное копирование всей базы данных, так как все связанные файлы копируются вместе.
  • Меньшая нагрузка на систему: Создание физических резервных копий обычно создает меньшую нагрузку на систему по сравнению с логическими, так как процесс не требует дополнительной обработки данных.
  • Портативность: Физические резервные копии, как правило, менее портативны, чем логические, так как могут зависеть от конкретного оборудования, операционной системы или конфигурации движка базы данных.
  • Гибкость: Физические резервные копии не позволяют выборочно восстанавливать отдельные объекты базы данных, так как резервная копия содержит необработанные файлы всей базы данных.
  • Совместимость: Физические резервные копии нельзя использовать для миграции данных между разными системами управления базами данных или версиями, так как необработанные файлы данных могут быть несовместимы между разными платформами или программным обеспечением.

Manticore Search имеет командный инструмент manticore-backup для физических резервных копий.

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

Использование командного инструмента manticore-backup

Инструмент manticore-backup, включенный в официальные пакеты Manticore Search, автоматизирует процесс резервного копирования таблиц для экземпляра, работающего в RT режиме.

Установка

Если вы следовали официальным инструкциям по установке, у вас уже должно быть все установлено, и вам не о чем беспокоиться. В противном случае, manticore-backup требует PHP 8.1.10 и специфические модули или manticore-executor, который является частью пакета manticore-extra, и вам нужно убедиться, что один из них доступен.

Обратите внимание, что manticore-backup пока недоступен для Windows.

Как использовать

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

Во-вторых, рекомендуется запускать инструмент под пользователем root, чтобы инструмент мог передавать права собственности на файлы, которые вы резервируете. В противном случае резервная копия также будет создана, но без передачи прав собственности. В любом случае, убедитесь, что manticore-backup имеет доступ к каталогу данных экземпляра Manticore.

Единственным обязательным аргументом для manticore-backup является --backup-dir, который указывает место назначения для резервной копии. Если вы не укажете дополнительных аргументов, manticore-backup:

  • найдет экземпляр Manticore, работающий с конфигурацией по умолчанию
  • создаст подкаталог в директории --backup-dir с именем, содержащим временную метку
  • сделает резервную копию всех таблиц, найденных в экземпляре
‹›
  • Example
Example
📋
manticore-backup --config=path/to/manticore.conf --backup-dir=backupdir
‹›
Response
Copyright (c) 2023-2024, Manticore Software LTD (https://manticoresearch.com)
Manticore config file: /etc/manticoresearch/manticore.conf
Tables to backup: all tables
Target dir: /mnt/backup/
Manticore config
  endpoint =  127.0.0.1:9308
Manticore versions:
  manticore: 5.0.2
  columnar: 1.15.4
  secondary: 1.15.4
2022-10-04 17:18:39 [Info] Starting the backup...
2022-10-04 17:18:39 [Info] Backing up config files...
2022-10-04 17:18:39 [Info]   config files - OK
2022-10-04 17:18:39 [Info] Backing up tables...
2022-10-04 17:18:39 [Info]   pq (percolate) [425B]...
2022-10-04 17:18:39 [Info]    OK
2022-10-04 17:18:39 [Info]   products (rt) [512B]...
2022-10-04 17:18:39 [Info]    OK
2022-10-04 17:18:39 [Info] Running sync
2022-10-04 17:18:42 [Info]  OK
2022-10-04 17:18:42 [Info] You can find backup here: /mnt/backup/backup-20221004171839
2022-10-04 17:18:42 [Info] Elapsed time: 2.76s
2022-10-04 17:18:42 [Info] Done

Чтобы сделать резервную копию только определенных таблиц, используйте флаг --tables, за которым следует список таблиц через запятую, например --tables=tbl1,tbl2. Это создаст резервную копию только указанных таблиц, игнорируя остальные.

‹›
  • Example
Example
📋
manticore-backup --backup-dir=/mnt/backup/ --tables=products
‹›
Response
Copyright (c) 2023-2024, Manticore Software LTD (https://manticoresearch.com)
Manticore config file: /etc/manticoresearch/manticore.conf
Tables to backup: products
Target dir: /mnt/backup/
Manticore config
  endpoint =  127.0.0.1:9308
Manticore versions:
  manticore: 5.0.3
  columnar: 1.16.1
  secondary: 0.0.0
2022-10-04 17:25:02 [Info] Starting the backup...
2022-10-04 17:25:02 [Info] Backing up config files...
2022-10-04 17:25:02 [Info]   config files - OK
2022-10-04 17:25:02 [Info] Backing up tables...
2022-10-04 17:25:02 [Info]   products (rt) [512B]...
2022-10-04 17:25:02 [Info]    OK
2022-10-04 17:25:02 [Info] Running sync
2022-10-04 17:25:06 [Info]  OK
2022-10-04 17:25:06 [Info] You can find backup here: /mnt/backup/backup-20221004172502
2022-10-04 17:25:06 [Info] Elapsed time: 4.82s
2022-10-04 17:25:06 [Info] Done

Аргументы

Аргумент Описание
--backup-dir=path Это путь к каталогу резервного копирования, где будет храниться резервная копия. Каталог должен уже существовать. Этот аргумент обязателен и не имеет значения по умолчанию. При каждом запуске резервного копирования manticore-backup создаст подкаталог в указанном каталоге с отметкой времени в имени (backup-[datetime]) и скопирует в него все необходимые таблицы. Таким образом, --backup-dir является контейнером для всех ваших резервных копий, и безопасно запускать скрипт несколько раз.
--restore[=backup] Восстановление из --backup-dir. Просто --restore выводит список доступных резервных копий. --restore=backup восстановит из <--backup-dir>/backup.
--force Пропустить проверку версий при восстановлении и аккуратно восстановить резервную копию.
--disable-telemetry Укажите этот флаг, если хотите отключить отправку анонимизированных метрик в Manticore. Также можно использовать переменную окружения TELEMETRY=0
--config=/path/to/manticore.conf Путь к конфигурации Manticore. Необязательно. Если не указан, будет использована конфигурация по умолчанию для вашей операционной системы. Используется для определения хоста и порта для связи с демоном Manticore. Инструмент manticore-backup поддерживает динамические конфигурационные файлы. Вы можете указать опцию --config несколько раз, если ваша конфигурация разбита на несколько файлов.
--tables=tbl1,tbl2, ... Список таблиц, разделённых точкой с запятой, которые вы хотите сохранить. Чтобы сохранить все таблицы, опустите этот аргумент. Все указанные таблицы должны существовать в экземпляре Manticore, с которого вы делаете резервное копирование, иначе резервное копирование завершится с ошибкой.
--compress Нужно ли сжимать файлы резервной копии. По умолчанию не включено.
--unlock В редких случаях, когда что-то идёт не так, таблицы могут остаться заблокированными. Используйте этот аргумент, чтобы разблокировать их.
--version Показать текущую версию.
--help Показать эту справку.

Справочник по SQL-команде BACKUP

Вы также можете сделать резервную копию данных через SQL, выполнив простую команду BACKUP TO /path/to/backup.

ПРИМЕЧАНИЕ: BACKUP не поддерживается в Windows. Рассмотрите возможность использования mysqldump вместо этого.

ПРИМЕЧАНИЕ: BACKUP требует Manticore Buddy. Если команда не работает, убедитесь, что Buddy установлен.

Общий синтаксис BACKUP

BACKUP
  [{TABLE | TABLES} a[, b]]
  TO path_to_backup
  [{OPTION | OPTIONS}
    async = {on | off | 1 | 0 | true | false | yes | no}
    [, compress = {on | off | 1 | 0 | true | false | yes | no}]
  ]

Например, чтобы сделать резервную копию таблиц a и b в каталог /backup, выполните следующую команду:

BACKUP TABLES a, b TO /backup

Доступны опции для управления и настройки процесса резервного копирования, такие как:

  • async: делает резервное копирование неблокирующим, позволяя сразу получить ответ с путем резервной копии и выполнять другие запросы во время выполнения резервного копирования. Значение по умолчанию — 0.
  • compress: включает сжатие файлов с помощью zstd. Значение по умолчанию — 0.

Например, чтобы выполнить резервное копирование всех таблиц в асинхронном режиме с включённым сжатием в каталог /tmp:

BACKUP TO /tmp OPTION async = yes, compress = yes

Поведение асинхронного резервного копирования

При использовании async = 1 (или yes, on, true) операция резервного копирования выполняется в фоновом задании:

  • Команда возвращает управление сразу с путем резервной копии
  • Вы можете продолжать выполнять другие запросы во время выполнения резервного копирования
  • Задание резервного копирования выполняется в отдельном потоке, управляемом Manticore Buddy
  • Во время выполнения задание резервного копирования будет отображаться в выводе SHOW QUERIES и автоматически удалится после завершения

Пример асинхронного резервного копирования:

BACKUP TO /tmp/mybackup OPTION async = 1

Это вернёт результат сразу с выводом, похожим на:

+----------------------------------+
| Path                             |
+----------------------------------+
| /tmp/mybackup/backup-20221004... |
+----------------------------------+

Вы можете проверить, выполняется ли резервное копирование, используя SHOW QUERIES. После завершения задание исчезнет из списка запросов, и все файлы резервной копии будут присутствовать в указанном каталоге.

Важные замечания

  1. Путь резервной копии может содержать пробелы, если он заключён в одинарные кавычки, например, BACKUP TO '/path/with spaces'
  2. Пути без пробелов не требуют кавычек: BACKUP TO /tmp/backup
  3. Поддерживаются пути Windows: BACKUP TO 'C:\path' или BACKUP TO C:\windows\backup
  4. Убедитесь, что Manticore Buddy запущен (по умолчанию он запущен)
  5. Каталог резервного копирования должен существовать и быть доступным для записи процессом Manticore

Как резервное копирование поддерживает согласованность таблиц

Для обеспечения согласованности таблиц во время резервного копирования инструменты резервного копирования Manticore Search используют инновационные команды FREEZE и UNFREEZE. В отличие от традиционной функции блокировки и разблокировки таблиц, например, в MySQL, FREEZE останавливает сброс данных на диск, при этом позволяя (в определённой степени) записывать и выбирать обновлённые данные из таблицы.

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

При использовании manticore-backup или SQL-команды BACKUP команда FREEZE выполняется один раз и одновременно замораживает все таблицы, которые вы сохраняете. Процесс резервного копирования затем последовательно сохраняет каждую таблицу, снимая заморозку после успешного резервного копирования каждой таблицы.

Если резервное копирование не удаётся или прерывается, инструмент пытается разморозить все таблицы.

Восстановление с помощью инструмента manticore-backup

Для восстановления экземпляра Manticore из резервной копии используйте команду manticore-backup с аргументами --backup-dir и --restore. Например: manticore-backup --backup-dir=/path/to/backups --restore. Если не указать аргумент для --restore, будет просто выведен список всех резервных копий в --backup-dir.

‹›
  • Example
Example
📋
manticore-backup --backup-dir=/mnt/backup/ --restore
‹›
Response
Copyright (c) 2023-2024, Manticore Software LTD (https://manticoresearch.com)
Manticore config file:
Backup dir: /tmp/
Available backups: 3
  backup-20221006144635 (Oct 06 2022 14:46:35)
  backup-20221006145233 (Oct 06 2022 14:52:33)
  backup-20221007104044 (Oct 07 2022 10:40:44)

Чтобы начать задачу восстановления, запустите manticore-backup с флагом --restore=backup name, где backup name — имя каталога резервной копии внутри --backup-dir. Обратите внимание, что:

  1. На том же хосте и порту не должно быть запущено ни одного экземпляра Manticore, который восстанавливается.
  2. Старый файл manticore.json не должен существовать.
  3. Старый конфигурационный файл не должен существовать.
  4. Старый каталог с данными должен существовать и быть пустым.

Если все условия выполнены, восстановление будет продолжено. Инструмент предоставит подсказки, так что вам не нужно их запоминать. Очень важно не перезаписывать существующие файлы, поэтому убедитесь, что вы удалили их перед восстановлением, если они ещё есть. Отсюда и все условия.

‹›
  • Example
Example
📋
manticore-backup --backup-dir=/mnt/backup/ --restore=backup-20221007104044
‹›
Response
Copyright (c) 2023-2024, Manticore Software LTD (https://manticoresearch.com)
Manticore config file:
Backup dir: /tmp/
2022-10-07 11:17:25 [Info] Starting to restore...
Manticore config
  endpoint =  127.0.0.1:9308
2022-10-07 11:17:25 [Info] Restoring config files...
2022-10-07 11:17:25 [Info]   config files - OK
2022-10-07 11:17:25 [Info] Restoring state files...
2022-10-07 11:17:25 [Info]   config files - OK
2022-10-07 11:17:25 [Info] Restoring data files...
2022-10-07 11:17:25 [Info]   config files - OK
2022-10-07 11:17:25 [Info] The backup '/tmp/backup-20221007104044' was successfully restored.
2022-10-07 11:17:25 [Info] Elapsed time: 0.02s
2022-10-07 11:17:25 [Info] Done

Резервное копирование и восстановление с помощью mysqldump

Manticore поддерживает утилиту mysqldump из MySQL до версии 9.5 и утилиту mariadb-dump из MariaDB до версии 12.1.

ПРИМЕЧАНИЕ: некоторые версии mysqldump / mariadb-dump требуют Manticore Buddy. Если дамп не работает, убедитесь, что Buddy установлен.

Чтобы создать резервную копию вашей базы данных Manticore Search, можно использовать команду mysqldump. В примерах мы используем порт и хост по умолчанию.

Обратите внимание, что mysqldump поддерживается только для таблиц реального времени.

‹›
  • Basic
  • Replace mode
  • Replication mode
📋
mysqldump -h0 -P9306 manticore > manticore_backup.sql
mariadb-dump -h0 -P9306 manticore > manticore_backup.sql

Выполнение этой команды создаст файл резервной копии с именем manticore_backup.sql. Этот файл будет содержать все данные и схемы таблиц.

Восстановление

Если вы хотите восстановить базу данных Manticore Search из файла резервной копии, инструмент mysql клиент — ваш выбор.

Обратите внимание, что при восстановлении в Plain режиме вы не можете напрямую удалять и создавать таблицы. Поэтому следует:

  • Использовать mysqldump с опцией -t, чтобы исключить команды CREATE TABLE из вашей резервной копии.
  • Вручную выполнить TRUNCATE таблиц перед продолжением восстановления.
‹›
  • SQL
SQL
📋
mysql -h0 -P9306 < manticore_backup.sql
mariadb -h0 -P9306 < manticore_backup.sql

Эта команда позволяет восстановить всё из файла manticore_backup.sql.

Дополнительные опции

Ниже приведены некоторые настройки, которые можно использовать с mysqldump для настройки вашей резервной копии:

  • -t пропускает команды drop/create таблиц. Полезно для полной переиндексации текста таблицы после изменения настроек токенизации.
  • --no-data: эта опция исключает данные таблиц из резервной копии, в результате получится файл с одними только схемами таблиц.
  • --ignore-table=[database_name].[table_name]: эта опция позволяет пропустить определённую таблицу во время резервного копирования. Обратите внимание, что имя базы данных должно быть manticore.
  • --replace для выполнения replace вместо insert. Полезно для полной переиндексации текста таблицы после изменения настроек токенизации.
  • --net-buffer-length=16M для формирования партий размером до 16 мегабайт, что ускоряет восстановление.
  • -e для группировки документов пакетами. Полезно для более быстрого восстановления.
  • -c для сохранения имён столбцов. Полезно для переиндексации таблицы после изменения её схемы (например, изменения порядка полей).

Для полного списка настроек и их подробных описаний, пожалуйста, обратитесь к официальной документации MySQL или документации MariaDB.

Примечания

  • Чтобы создать дамп в режиме репликации (когда дамп включает INSERT/REPLACE INTO <cluster_name>:<table_name>):
    • Убедитесь, что таблица не изменяется во время создания дампа.
    • Используйте пользователя cluster. Например: mysqldump -u cluster ... или mariadb-dump -u cluster .... Вы можете изменить имя пользователя, включающего режим репликации для mysqldump, выполнив SET GLOBAL cluster_user = new_name.
    • Используйте флаг -t.
    • Используйте флаг --skip-lock-tables.
    • При указании таблицы в режиме репликации необходимо следовать синтаксису cluster_name:table_name. Например: mysqldump -P9306 -h0 -t -ucluster manticore cluster:tbl.
  • Рекомендуется явно указывать базу данных manticore, если вы планируете делать резервное копирование всех баз, вместо использования опции --all-databases.
  • Обратите внимание, что mysqldump не поддерживает резервное копирование распределённых таблиц и не может резервировать таблицы с нестинаряемыми (non-stored) полями. В таких случаях используйте manticore-backup или SQL команду BACKUP. Если у вас есть распределённые таблицы, рекомендуется всегда указывать конкретные таблицы для дампа.
Last modified: November 22, 2025