Лучший способ перенести / клонировать большие базы данных MySQL на другой сервер

273
Andrei Herford

Я запускаю веб-приложение в среде общего хостинга, которая использует базу данных MYSQL размером около 3 ГБ.

Для целей тестирования я настроил среду XAMPP на моем локальном компьютере с macOS. Чтобы скопировать онлайн-БД на мой локальный компьютер, который я использовал mysqldumpна сервере, а затем непосредственно импортировал файл дампа в mysql:

// Server $ mysqldump -alv -h127.0.0.3 --default-character-set=utf8 -u dbUser -p'dbPass' --extended-insert dbName > dbDump.sql  // Local machine $ mysql -h 127.0.0.3 -u dbUser -p'dbPass' dbName < dbDump.sql 

Единственной оптимизацией здесь является использование extended-insert. Однако импорт занимает около 10 часов !

В немом файле уже есть команды для отключения проверки уникальных и внешних ключей для ускорения импорта:

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 

Я не экспортирую SQL и не уверен /*!40014, выполняются ли команды или нет, поэтому добавлен SET FOREIGN_KEY_CHECKS=0;вручную в файл, чтобы убедиться, что проверки отключены. Однако это не имеет никакого значения.

Почему импорт данных занимает так много времени? Есть ли лучший / более быстрый способ сделать это?

Сервер не самый быстрый (общий хостинг ...), но для экспорта / вывода данных требуется всего около 2 минут. То, что экспорт (без проверки синтаксиса, без синтаксического анализа, просто запись ...) быстрее импорта (синтаксический анализ, проверка синтаксиса и т. Д.) Неудивителен, но в 300 раз быстрее (10 часов против 2 минут)? Это огромная разница ...

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

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

0
* не уверен, выполняются ли команды / \ *! 40014 или нет * Выполняется, если версия сервера 4.00.14 или выше. Прочитайте [там] (https://dev.mysql.com/doc/refman/5.7/en/comments.html). * Есть ли лучший / более быстрый способ сделать это? * Существует много способов резервного копирования. Прочитайте [там] (https://dev.mysql.com/doc/refman/5.7/en/backup-methods.html). Обратите внимание на «Создание резервных копий текстовых файлов с разделителями» (структура БД должна быть выгружена отдельно без данных). Akina 5 лет назад 1

1 ответ на вопрос

1
danblack

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

Увеличьте innodb_buffer_pool_sizeдо 70% доступной оперативной памяти. Установите innodb_log_file_size512M (используя эту процедуру (настройте URL для версии сервера MySQL)).

Во время импорта SET GLOBAL innodb_flush_log_at_trx_commit=0и установите значение 1 после завершения импорта.

Похожие вопросы