Я запускаю веб-приложение в среде общего хостинга, которая использует базу данных 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 часов !
После некоторых поисков я обнаружил, что отключение проверок внешних ограничений во время импорта должно ускорить процесс. Поэтому я добавил следующую строку в начале файла дампа:
// dbDump.sql
SET FOREIGN_KEY_CHECKS=0;
...
Однако это не имело существенного значения ... Импорт теперь занял около 8 часов. Быстрее, но все же довольно долго.
Почему импорт данных занимает так много времени? Есть ли лучший / более быстрый способ сделать это?
Сервер не самый быстрый (общий хостинг ...), но для экспорта / вывода данных требуется всего около 2 минут. То, что экспорт быстрее импорта (без проверки синтаксиса, без разбора, просто запись ...), не удивительно, но в 300 раз быстрее (10 часов против 2 минут)? Это огромная разница ...
Нет ли другого решения, которое было бы быстрее? Например, вместо этого скопируйте двоичный файл БД? Все было бы лучше, чем использовать текстовый файл в качестве средства передачи.
Это не просто передача данных на другую машину для тестирования. Я также создаю ежедневные резервные копии базы данных. Если потребуется восстановить БД, было бы очень плохо, если сайт не работает в течение 10 часов ...