Применение утилиты mysqldump для импорта-экспорта данных в MySQL
Утилита командной строки mysqldump предназначена для автоматизации процедур переноса информационных объектов между экземплярами баз данных MySQL. Так же она используется для создания резервных копий баз данных MySQL. В обоих случая используется промежуточный файл *.sql, который образуется при экспорте. В нём содержится скрипт создания и/или наполнения информацией, имеющихся в базе данных таблиц. При импорте этот файл указывает в качестве источника данных для загрузки в другую базу данных или как резервная копия (дамп) для восстановления из неё в текущую базу.
Приведём некоторые примеры команд для экспорта и импорта базы данных:
mysqldump -u имя_пользователя -p -h имя_сервера_БД имя_базы > dump.sql |
По приведенной выше команде экспорта скрипт базы сохраняется в файле dump.sql.
Этот же файл используется затем при восстановлении данных (импорта) в качестве резервной копии (дампа). Делается это так:
mysql -u имя_пользователя -p -h имя_сервера_БД имя_базы < dump.sql |
При запуске приведенных выше команд будет запрашиваться пароль пользователя базы данных.
При выполнении импорта-экспорта система предполагает, что данные хранятся в кодировке Windows-1251. Если данные хранились в другой кодировке, то перед восстановлением с помощью текстового редактора в файле с резервной копией (в дампе) необходимо произвести корректировки. Для этого находим строку…
/*!40101 SET NAMES cp1251 */; |
… и меняем на, например, UTF8:
/*!40101 SET NAMES utf8 */ |
Утилита mysqldump имеет ряд дополнительных опций:
--add-drop-table — предписывает для каждой таблицы добавить команду DROP TABLE перед командой создания таблиц. Т.е. если в базе, в которую идёт восстановление, уже была такая таблица, то она уничтожается и полностью заменяется на создаваемую из скрипта.
--add-locks — для ускорения доступа к таблицам предписывает выполнять блокировку таблиц командой LOCK TABLES перед выполнением скрипта и команду UNLOCK TABLE после выполнения каждой из таблиц.
--quote-names — выполняет обрамления кавычками имён полей и таблиц. В версиях старше 4.1.1 она включена по умолчанию. Следовательно, явно её нужно указывать только для более младших версий.
Если база данных имеет значительный размер, а на вашем хостинге существует ограниченный объем оперативной памяти, что можно попытаться включить оптимизацию расхода памяти с помощью опций --quick и --opt. В противном случае возможны появления сообщений об ошибках:
mysqldump: Out of memory (Needed XXXXX bytes) |
Пример использования опции --opt:
mysqldump --opt -u имя_пользователя -p -h имя_сервера_БД --add-drop-table имя_базы > dump.sql |
Соответственный пример для опции --quick:
mysqldump --quick -u имя_пользователя -p -h имя_сервера_БД --add-drop-table имя_базы > dump.sql |
Для обеспечения совместимости между серверами при использовании дампов рекомендуем использовать ключ max_allowed_packetв вариантах таком:
--set-variable max_allowed_packet=2M
Либо таком:
либо
-O max_allowed_packet=2M |
Ошибка, которая возникает в процессе импорта вида:
mysqldump: Error 2020:Got packet bigger than 'max_allowed_packet'bytes when dumping table `some_table_name ` at row: 2 |
означает, что в импортируемых данных имеются элементы, которые невозможно разбить на части до 2 мегабайт каждая.
Это происходит, когда в базе хранятся бинарные данные, представляющие файлы картинок, звуко- или видео-файлы, т.е., когда применён подход не хранить подобную информацию непосредственно в файловой системе.
Если на целевом сервере установлена версия MySQL 4.0.x, то для совместимости дампа для такого сервера его надо делать с ключом:
--compatible=mysql40 |