Залив больших дампов на хостинг

Скрипты Прокомментировать

Вот уже не первый раз возникла задача залить дамп большой базы MySQL на хостинг. Раньше я делал это с помощью phpMyAdmin, но в случае с огромными дампами часто возникали проблемы. По причине ограничения памяти и времени исполнения скриптов в php, большие файлы не обрабатывались до конца. Приходилось идти на разные хитрости.

Например, несколько раз я заливал файлы дампов на сервер и запускал через SSH на сервере программку, которая их импортировала в БД. Способ конечно неплохой, но не всегда есть доступ ssh, иногда он вообще не входит в услуги хостинга, иногда что-то надо выяснять с техподдержкой хостера. А это лишние действия, которых всегда хочется избежать. Да и сама программка, с помощью которой идёт работа с удаленным сервером через shell довольно сложна для тех, кто не работал с линуксом, т. к. в ней надо писать вручную команды для этого самого удаленного сервера. Может быть, где-то это организовано и получше, но в PuTTY (который судя по всему является одним из самых популярных SSH-клиентов) мне было сложновато сразу разобраться. В общем, у меня конечно получилось залить большой дамп, но особого удовольствия я не получил, т.к. пришлось повоевать с хостером за шелл и потратить около часа времени, чтобы разобраться с этой программкой.

Однажды я заливал дамп вообще извращенным способом - делал из MySQL базы на локальном компьютере с помощью phpMyAdmin относительно маленькие дампы (по 2-5 МБ) и с помощью phpMyAdmin на удалённом сервере заливал эти файлы в нужную базу. Способ тоже не понравился, т.к. пришлось раз 20 повторить одно и то же действие, нужно было следить, чтобы не пропустить никакого кусочка базы и ничего не заливать по 2 раза. Также при копировании и отправке таких текстовых фрагментов по 2-5 МБ браузер жестко тормозил. Я залил в конце концов нужный дамп, но снова за тот же час, что и в первом случае.

Когда передо мной вновь возникла задача заливки огромного дампа (около 100 МБ) на сервер, я задумался о том, как избежать проблем первых двух случаев. Идея залить дамп через фтп, порезать его на кусочки с помощью php скрипта и дальше с помощью этого же скрипта импортировать его в базу MySQL показалась мне наилучшим решением проблемы.

Однако, программировать было некогда да и лень :) Поэтому попытался быстренько залить дамп с помощью второго из описанных выше способов - через phpMyAdmin. Я вкинул кусочек дампа в соответствующую форму phpMyAdmin - и браузер подвис при его передаче. Через некоторое время я увидел сообщение об ошибке, в котором было написано, что у php не хватает памяти на данную операцию. Хотел было увеличить количество памяти, выделенной для пхп, но потом всё-таки дочитал до конца сообщение об ошибке. А в нем было написано, что для загрузки больших файлов нужно воспользоваться сведениями из документации phpMyAdmin. В документации нашел ссылку на BigDump, который и стал решением моей проблемы. Суть этого скрипта примерно такая же, как я задумывал выше:

  • Загрузка файла дампа на ftp;
  • Изменение в файле bigdump.php данных для доступа к БД MySQL;
  • Загрузка файла bigdump.php на ftp в ту же папку, где находится залитый ранее дамп.

После проведения этих простых операций в браузере открываем файл bigdump.php и наблюдаем примерно следующее:

BigDump - загрузка больших mysql dump-ов

Как видно из рисунка, дампы могут быть как простыми текстовыми файлами, так и архивами. На этой странице выбираем файл, который нужно импортировать, и всё - процесс пошел. О его ходе будет сообщать такая страничка:

BigDump - страница загрузки

Синенькая полоска внизу по ходу загрузки будет двигаться, это реализовано с помощью AJAX. Таким образом, заливка больших дампов MySQL с помощью BigDump становится простым, быстрым и приятным занятием, за что можно сказать спасибо автору этого скрипта.

P. S. Внимание! Не забудьте правильно выставить кодировку для этого дампа в скрипте bigdump.php, за неё отвечает переменная $db_connection_charset. По умолчанию она пустая. В первый раз я забыл про неё - русские буквы благополучно накрылись медным тазом. Поставил $db_connection_charset = “utf8″; - и проблема была решена.

Комментарии (12) к “Залив больших дампов на хостинг”

  1. omni:

    ыыыы, я давно решил для себя эту проблемму, написав скрипт эмулирующий работу терминала. а дальше дело в шляпе: загружаем скрипт и дамп через фтп, а дальше просто вводим команду - что-то вроде
    mysql -h host.ru -u username -p dbname < dump

  2. zweroboy:

    Тоже вариант… Но это ж надо право для скриптов php на выполнение exec или чего-то подобного?

  3. Defender:

    Скрипт супер очень помог в работе.

  4. Masterhost:

    Большое спасибо за программку, давно мучался вопросом заливки больших баз данных, через ssh пытался разобраться, но особо не получилось, да и времени на это особо не было, приходилось резать таблицы :)

  5. Sergunik:

    скрипт ваще кульный. соу мач сенкс автору :)

  6. AccuffArribre:

    Интересный материал, спасибо!

  7. anonim:

    Попробовал, не хватает видно лимита времени, вышала вот такая ошибка
    http://s44.radikal.ru/i104/0906/89/a7d6055bb562.jpg

  8. Антон:

    Спасибо. Скрипт решил следующую проблему - нужно было перенести маленький дамп на хостинг со старой версией MySQL и без PHPMyAdmin. Писать скрипт было лень:) Этот выручил замечательно

  9. Odine:

    Спасибо буду сейчас пробывать на базе весом 1.2 гб без архива

  10. olga:

    Спасибо…скрипт помог залить большую базу, но возникли проблеми с кодировкой cp1251(((

  11. Сергей Владимирович:

    Спасибо. Удалось залить 300МБ дамп форума с помощью этого скрипта. Я удивляюсь почему в phpmyadmin до сих пор не добавили что-нибудь подобное.

  12. Alex:

    Недавно возникла такая же проблемка, пол дня промучился пока не нашел замечательный скриптик Sypex Dumper (http://sypex.net) и база в 280Mb зашла как к себе домой))

Прокомментировать

Сообщения в RSS Комментарии в RSS Войти