Любой способ импортировать таблицы MySQL с нетронутыми индексами?

2

В настоящее время наш сервер баз данных в реальном времени ежедневно загружает большие дампы данных (порядка 10 ГБ), импортирует их в MySQL, нормализует данные и создает ряд индексов (полнотекстовые индексы особенно обременительны). Это создает значительную нагрузку на живой сервер, который мы хотели бы разгрузить.

В идеале мы должны иметь отдельный автономный сервер, который будет выполнять всю эту работу, а затем просто упаковать и перенести таблицу с целыми индексами на работающий сервер. Возможно ли это с MySQL (или MariaDB)? Это таблицы MyISAM, так как мы используем функциональность слияния.

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

Натан Стретч
источник
1
Чтобы скопировать файлы, вам нужно остановить / запустить демоны MySQL на обеих машинах. Это было бы проблематично?
EEAA
Хорошая точка зрения. Это может привести к проблемам на живом сервере. Честно говоря, я не знаю достаточно о том, как эти взаимодействия работают, хотя. Может ли демон быть перезапущен таким образом, чтобы удерживались новые соединения, он ждет, пока не будут закрыты какие-либо текущие соединения (или не достигнут тайм-аут), а затем перезапускает и обрабатывает соединения, поставленные в очередь? Если это так, это может быть приемлемым, хотя, конечно, не идеальным. Является ли копирование файла с перезапуском единственным способом копирования с сохранением индексов?
Натан Стретч
Этот ответ не правильный? serverfault.com/a/340976/160130
Натан Стретч
1
Это может сработать, но вы никогда не увидите официальную документацию, подтверждающую, что это нормально.
EEAA

Ответы:

1

У меня похожая настройка / проблема, и в настоящее время я изучаю репликацию.

Главный сервер выполнит все обработки чисел, обработка данных будет выполнена на не реплицированной базе данных DBtemp. * На главном сервере, а затем перенесена в DBprod. * На главном сервере, который реплицируется.

Все еще в процессе установки, поэтому не могу дать результатов, но, надеюсь, это снижает нагрузку на ведомый (который является действующим сервером)

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