Самый быстрый способ создания копии базы данных MySQL

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

На данный момент мы используем mysqldump, а затем импортируем скрипт базы данных, используя «mysql -u xx -p dbname ‹ dumpscript.sql»

Было бы хорошо, если бы это не заняло 2 дня!

Можно ли просто скопировать всю базу данных в виде файла с одного сервера на другой и пропустить всю ерунду экспорта/импорта?

Ваше здоровье


person MeatPopsicle    schedule 28.08.2012    source источник


Ответы (2)


есть пара решений:

  • иметь отдельный подчиненный сервер репликации, который можно остановить в любой момент и выполнить резервное копирование на уровне файлов
  • если вы используете движок innodb - вы можете взять снимок уровня файловой системы [например, с помощью lvm], а затем скопируйте файлы в тестовую среду.
  • если у вас много таблиц/баз данных - вы можете распараллелить процесс дампа и восстановления, чтобы ускорить процесс.
person pQd    schedule 28.08.2012

У меня есть много ограничений на то, где я могу запускать сценарии, получать доступ к источникам и целям и иметь достаточно места для подготовки данных для задачи.

Я получаю заархивированный дамп базы данных от хостинг-провайдера.
Я разделяю распакованные команды так, чтобы INSERT INTO строк помещались в один файл, а все остальные — во второй.

Затем я создаю структуры базы данных из второй.
Я конвертирую операторы INSERT INTO в CSV-файлы, связанные с таблицами.
Наконец, я загружаю CSV-файлы параллельно (до 50 таблиц одновременно), и таким образом Дамп текстового файла объемом 130 ГБ клонируется за 3 часа вместо 17 часов, которые потребовались бы при использовании метода «оператор за оператором».

В 3 часа я включаю:

  • копия окончена (10 минут),
  • проверка работоспособности (10 минут) и
  • фильтрация журналов (10 минут), так как записи в журнале должны быть только за последний учебный год.

Удаленный заархивированный файл размером от 7 ГБ до 13 ГБ передается по линии 40 МБ/с.
Загрузка осуществляется на удаленный сервер по линии 40 МБ/с.

Если ваш сервер mysql является локальным, скорость загрузки может быть выше.

Я использую scp, gzip, zgrep, sed, awk, ps, mysqlimport, mysql и некоторые другие утилиты для ускорения распаковки и фильтрации (pv, rg, pigz), если они доступны.

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

person amfipolis    schedule 25.03.2021
comment
Что такое ЛВМ? - person SherylHohman; 26.03.2021
comment
LVM — это логический том, где возможен моментальный снимок на уровне файловой системы. См. tldp.org/HOWTO/LVM-HOWTO/snapshots_backup.html. - person amfipolis; 08.04.2021