Как сделать импорт большой базы данных

Обновлено: 02.07.2024

Доброго времени суток! Сегодня мы вновь коснемся вопросов переезда с сервера на сервер и тех проблем, которые могут возникнуть в процессе этого.

Вводная часть

Начну с лирического отступления. Когда я только начинал свою более-менее профессиональную деятельность в WEB-разработке, мне казалось логичным и единственно верным правило: новый сайт — это всегда новая база данных. Что же здесь непонятного? Все с чистого листа. Зачем тянуть за собой уже существующие таблицы данных? В ответ на это системный администратор, который входил в команду работающую над рядом интернет-проектов, всегда тяжело вздыхал, иногда сильно ругался и рассказывал о префиксах таблиц. В общем, выбить новую базу данных было тяжело. Почти невозможно. Меня это очень даже раздражало, раздражало до степени бешенства.

Не понимал я подхода администратора сервера ровно до того момента пока мне не пришлось столкнуть с переносом двух десятков сайтов с одного сервера на другой. При этом ряд интернет-ресурсов использовали сразу несколько баз данных. В общем, осознал и встал на путь исправления. Подход изменился. Теперь я группирую различные проекты по 3-5 базам данных, что значительно упрощает жизнь. Объем каждой базы данных больше, но количество самих баз — значительно меньше.

Сразу скажу, что значительный объем базы данных может быть вызван всего одним единственным интернет-ресурсом. С такой ситуацией сталкиваюсь часто и обязательно беру ее в расчет. Так в чем же могут возникнуть проблемы с переносом баз данных? Переходим к практической составляющей.

Максимальный размер файла 2048 килобайт

Как правило, именно таким бывает стандартное ограничение для импорта существующей базы данных.

Экспорт, импорт больших файлов MySQL базы данных

Когда БД MySQL превышает PHP лимит на загрузку файлов, то импорт больших файлов MySQL базы данных может стать настоящей головной болью для администратора веб ресурса. Есть два средства, которые помогут - первое это mysqldump, второе BigDump.

mysqldump

Для экспорта и импорта больших MySQL дампов лучше конечно использовать специально созданную для этих целей mysqldump, но для этого потребуется доступ к SSH консоли:

Из описания man mysqldump версии MySQL сервера 5.5.30 следует, что опция " --opt ", которая автоматически включает и " --quick ", включена по умолчанию:

mysql Ver 14.14 Distrib 5.5.30, for Linux (x86_64) using readline 5.1
.
mysqldump can retrieve and dump table contents row by row, or it can
retrieve the entire content from a table and buffer it in memory before
dumping it. Buffering in memory can be a problem if you are dumping
large tables. To dump tables row by row, use the --quick option (or
--opt, which enables --quick). The --opt option (and hence --quick) is
enabled by default, so to enable memory buffering, use --skip-quick.

О чем это говорит, а говорит это о том, что mysqldump может извлекать содержимое таблиц строку за строкой, а может и извлечь содержимое таблиц в буфер оперативной памяти перед созданием дампа. В версии MySQL 5.5.30, опция --opt, а также и опция --quick автоматически включаются в ходе работы mysqldump - т.е. по умолчанию mysqldump читает таблицы строку за строкой не помещая её предварительно в буфер оперативной памяти.

Из описания же утилиты mysqldump в книге Поль Дюбуа "MySQL", для какой только версии так и не ясно но явно старее чем 5.5.30, поведение mysqldump по умолчанию полностью противоположное - т.е. по умолчанию mysqldump предварительно помещает таблицы в буфер оперативной памяти, а потом уже создаёт дамп БД.

При обработке больших объёмов данных с предварительным помещением их в буфер оперативной памяти может привести к неприятным последствиям, вплоть до полного краха msqld демона/сервиса. Поэтому лучше всего когда есть доступ/выбор к SSH консоли и phpMyAdmin, то лучше всего использовать первый вариант с явно указанными опциями --opt и --quick

Если Вы используете саму свежую версию mysqldump для создания дампа, который планируется разворачивать на более старых версиях MySQL сервера, то вы недолжны использовать опции " --opt " и " --extended-insert " option, указав " --skip-opt ".

Также нужно помнить, что с опцией "--opt" полностью блокируется чтение/запись БД на время создания дампа и поэтому создавать дампы с опцией "--opt" лучше всего ночью, когда мозгвыносящие спят:)

Дополнительные полезные опции для утилиты mysqldump:

  • --add-drop-table и --add-drop-database — опция добавляет команду DROP TABLE перед восстановлением таблиц или DROP DATABASE перед восстановлением дампа БД - т.е. перед восстановлением таблиц БД из дампа, уже имеющиеся в рабочей БД таблицы с таким же именем будут сначала удалены, а потом пересозданы из резервной копии;
  • --quote-names — названия таблиц и столбцов заключает в кавычки, рекомендуется для использования mysqldump на MySQL сервере младше 4.1.1, в более новых версиях --quote-names активирован по умолчанию;
  • --compatible=mysql40 - если создаваемый дам планируется разворачивать на MySQL 4.0.x или других серверах БД, то для этого используйте эту опцию, для опции --compatible= также доступны значения: "ansi", "mysql323", "mysql40", "postgresql", "oracle", "mssql", "db2", "maxdb", "no_key_options", "no_table_options", "no_field_options";
  • --comments, -i - позволяет в дамп добавить комментарий с дополнительной информацией, например о версии mysqldump, MySQL сервере, имени хоста и т.д;
  • --all-databases - сделает дамп всех имеющихся на данном MySQL-сервере баз данных.

Для автоматического создания MySQL дампа можно использовать приведённый ниже bash скрипт:

Или вот такой вариант, для регулярного и автоматического создания всех доступных баз данных:

Незабываем добавить скрипт в crontab -u user -e .

BigDump

В случае когда БД будет превышать РНР лимит на загрузку файлов, обычно это 20-50-100 МБ, и нет возможности использовать mysqldump, то для импорта таких файлов phpMyAdmin нам не поможет.

В таких случаях для импорта таких файлов нужно или обращаться в тех. поддержку для ручного импорта БД администратором или же использовать какие-то скрипты на подобии BigDump, настройки которого в bigdump.php равны примерным значениям:

Думаю особых пояснений не нужно, что и как заполнять - $filename "путь к файлу дампа", а MAX_QUERY_LINES это количество строк которое может считаться за один запрос, которое подбирается индивидуально для каждого отдельно взятого дампа.

Например для полноценного импорта дампа OpenCart размером в 10-15 МБ, лимит РНР ограничивал загрузку в 2 МБ, значение MAX_QUERY_LINES пришлось постепенно увеличить до 3000.

Рекомендуемый контент

Вы не любите рекламу!? Напрасно!:) На нашем сайте она вовсе ненавязчивая, а потому для нашего сайта можете полностью отключить AdBlock (uBlock/uBlock Origin/NoScript) и прочие блокировщики рекламы! AdBlock/uBlock может препятствовать нормальной работе системы поиска по сайту, отображению рекомендуемого контента и прочих сервисов Google. Рекомендуем полностью отключить блокировщик рекламы и скриптов, а также разрешить фреймы (aka iframe).

АдМинь БагоИскатель ярый борец за безглючную работу любых механизмов и организмов во всей вселенной и потому пребывает в вечном поиске всяческих багов, а тот кто ищет как известно всегда находит. Когда что-то или кого-то вылечить не в состоянии, то со словами "Я в аду, а вы все черти" уходит в запой выйдя из которого снова берётся лечить неизлечимое.

Добавить комментарий

АХТУНГ! Все комменты модерасятся модерастом. Мессаги исключительно рекламного или оскорбительного содержания, оценочные суждения типа "круто" ("отлично", "спасибо", "автор дебил" и т.п.) не публикуются, а поэтому злостным спамерам, пранкерам и прочей сетевой нечисти рекомендуем напрасно не тратить своего времени и удовлетворять свои больные фантазии на специализированных Интернет ресурсах! Разумная критика, замечания, дополнения приветствуются. Поля помеченные символом * обязательны к заполнению.

:wall: ЗА ЧТО ТОЛЬКО ПРЕДКИ СТРАДАЛИ, ВОЕВАЛИ, КРОВЬ ПРОЛИВАЛИ!? :ganba: Чтобы их наследники тряпочно-ушаноч ные бараны так всё взяли и тупо просрали?

Можно было бы и до 200-210 понизить, но данная модель "Back-UPS ES 525" не поддерживает фичу "Set EEPROM with conf file values" увы.

"OUTPUTVOLTS" бы ещё понизить до 220, нафига батарею напрягать на "NOMOUTV: 230 Volts", когда их в сети почти никогда нет

Импорт баз данных большого размера | Хостинг сайтов. Качественный виртуальный хостинг сайтов

Работа с ISPmanager

Работа с биллингом

Работа с сайтами

Немного о доменах

Способы оплаты хостинга

Работа с различными CMS

Самая большая головная боль при переносе сайта, это импорт базы большого размера. Есть несколько способов ее импортирования.

Способ №1

Не самый удобный способ, но более привычный для большинства, это импорт базы напрямую через phpMyAdmin.

1. Идем phpMyAdmin (как входить описано здесь)

2. Авторизовываемся, введя логин и пароль пользователя базы данных.

3. Слева в меню выбираем вашу базу, затем переходим на вкладку Импорт, нажимаем обзор и указываем какой файл импортировать. Не забываем выбрать кодировку импорта, иначе у вас буду символы или вопросики вместо текста.

4. Ждем пока будет достигнут лимит времени импорта и повторяем операцию, в этом случае импорт будет продолжен с того места, где был прерван.

Хочу отметить, что этот способ самый долгий и ненадежный для баз большого рамера.

Способ №2

По моему мнению самы оптимальный способ импорта больших баз данных и делает это быстреее стандартного способа раз в 20, если не быстрее.

Для импорта используем отличную утилиту Sypex Dumper Lite или Sypex Dumper 2

Описывать принцип работы и установки думаю не стоит, т.к. инструкции идут в архивах обоих версий программ.

Единственное хочу заострить внимание на некоторых их особенностях.

Sypex Dumper Lite - более медленно работает, зато стабильная и импортирует практически любые дампы баз данных.

Sypex Dumper 2 - отличная скорость и возможности, но импортирует только те базы, которые были сохранены только с ее помощью. Проверял лично, 300mb импортирует в течении пары минут.

Импорт базы данных Mysql через консоль (терминал, ssh)

В этом посте я сделаю заметку для себя, а возможно и для других. Порой приходится импортировать или экспортировать большие по размеру базы данных. Но делая это через сторонние программы или скрипты, дело упирается в ограничения POST данных, в размер загружаемых файлов на сервер или, в конце концов, в скорость интернета. Тут я опишу способ импорта/экспорта Mysql базы данных через ssh (консоль, терминал).

Импорт базы данных.

В принципе можно воспользоваться командой :

mysql -uroot -proot_pass db_name mysql -uLogin -pPassword

(вместо Login и Password вводим данные для авторизации пользователя БД)
Выбираем базу данных:

(вместо db_name вводим название БД)
Делаем импорт файла в выбранную бд:

Читайте также: