Bigdump - завантаження великих mysql dump-ів, записки звіробою

Ось уже не перший раз постало завдання залити дамп великої бази 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 і спостерігаємо приблизно наступне:

Як видно з малюнка, дампи можуть бути як простими текстовими файлами, так і архівами. На цій сторінці вибираємо файл, який потрібно імпортувати, і все - процес пішов. Про його ході буде повідомляти така сторінка

P. S. Увага! Не забудьте правильно виставити кодування для цього дампа в скрипті bigdump.php, за неї відповідає змінна $ db_connection_charset. За умовчанням вона порожня. У перший раз я забув про неї - українські літери благополучно накрилися мідним тазом. Поставив $ db_connection_charset = «utf8"; - і проблема була вирішена.

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

Теж варіант ... Але це ж треба право для скриптів php на виконання exec або чогось подібного?

Скрипт супер дуже допоміг в роботі.

Велике спасибі за програмку, давно мучився питанням заливки великих баз даних, через ssh намагався розібратися, але особливо не вийшло, та й часу на це особливо не було, доводилося різати таблиці

Цікавий матеріал, спасибі!

Дякуємо. Скрипт вирішив наступну проблему - потрібно було перенести маленький дамп на хостинг зі старою версією MySQL і без PHPMyAdmin. Писати скрипт було лінь :) Цей виручив чудово

Дякую буду зараз пробувати на базі вагою 1.2 гб без архіву

Спасибі ... скрипт допоміг залити велику базу, але виникли проблеми з кодуванням cp1251 (((

Дякуємо. Вдалося залити 300Мб дамп форуму за допомогою цього скрипта. Я дивуюся чому в phpmyadmin досі не додали що-небудь подібне.

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

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

насправді оптимальний варіант купувати нормальний vps і на ньому робити все з командного рядка. І швидше і простіше і надійніше.

«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 does not 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. »

Щиро Дякую. Раніше мучився з заливкою дампов, скрипт супер.

Величезне ДЯКУЮ! Дуже допоміг пост! Респект! Залив два дампа - на Ура! І без звернення в техпідтримку хостера!

Цією програмою я користувався на ВПС де є прова доступу root а як бути якщо потрібно заливати на хостинг там ця програма не запускається навіть якщо виставити всі макс права на папки і файли ось така проблема, а сома програма працює здорово і швидко без проблем

Супер все дуже круто

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

Звідки взагалі вилізла max_questions?