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

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

Вот уже не первый раз возникла задача залить дамп большой базы 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″; – и проблема была решена.

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

  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 зашла как к себе домой))

  13. darmoid:

    бигдамп меня очень часто выручал, но теперь пробую залить бд на 15метров и она вперлась рогом никак не идет :(
    Error at the line 7568: (6616, ‘admin’, ’2010-03-16 17:33:00′, ‘

  14. CyberCop:

    To Сергей Владимирович:
    >>удивляюсь почему в phpmyadmin до сих пор не добавили что-нибудь подобное

    Ну, скажем так, разработчики майадмина сами же к этому скрипту и отсылают, когда возникает ошибка обработки больших дампов. Потому больше удивляет почему пользователи phpmyadmin не читают, что им предлагается. Я сам этот скрипт нашел именно по подсказке.

  15. Andru:

    Обалденная прога! phpMyAdmin на хостере заливает максимальный размер дампа в 20,5 Мб. А у меня дамп в 21 Мб. И залетел за одну секунду! Я даже не поверил…то-ли ошибка какая, то-ли и вправду залился! Проверил и точняк!
    Сенкс разработчикам!

  16. odmin:

    на самом деле оптимальный вариант покупать нормальный vps и на нем производить все из командной строки. И быстрее и проще и надежнее.. ;)

  17. Анна:

    «At this place the current query includes more than 300 dump lines. That can happen if your dump file was created by some tool which doesn’t place a semicolon followed by a linebreak at the end of each query, or if your dump contains extended inserts or very long procedure definitions. »

    Что делать?:((

  18. Takasu:

    Большое спасибо. Раньше мучался с заливкой дампов, скрипт супер.

  19. СергейФедорович:

    Огромное БЛАГОДАРЮ! Очень помог пост! Респект! Залил два дампа – на Ура! И без обращения в техподдержку хостера!

  20. Иван:

    Этой программой я пользовался на ВПС где есть прова доступа root а как быть если нужно заливать на хостинг там эта программа не запускается даже если выставить все макс права на папки и файлы вот такая проблема, а сома программа работает здорово и быстро без проблем

  21. Евгений:

    Супер все очень круто

  22. Сергей:

    MySQL Error: User has exceeded the \’max_questions\’ resource (current value: 75000)

    Откуда вообще вылезла max_questions?

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

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