Я запускаю веб-приложение в среде общего хостинга, которая использует базу данных 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 часов ...