Данная утилита позволяет получить дамп (``моментальный снимок'') содержимого базы данных или совокупности баз для создания резервной копии или пересылки данных на другой SQL-сервер баз данных (не обязательно MySQL-сервер). Дамп будет содержать набор команд SQL для создания и/или заполнения таблиц.
Если же резервная копия создается на сервере, то вместо описываемой
утилиты следует использовать mysqlhotcopy. См.раздел See Раздел 4.8.6, «mysqlhotcopy, Копирование баз данных и таблиц MySQL».
shell> mysqldump [OPTIONS] database [tables] или mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] или mysqldump [OPTIONS] --all-databases [OPTIONS]
Если не указывать имена таблиц или использовать параметры --databases или
--all-databases, то будет получен дамп базы данных в целом (соответственно
- всех баз данных).
Перечень опций, поддерживаемых вашей конкретной версией утилиты mysqldump,
можно получить, выполнив команду mysqldump --help.
Следует иметь в виду, что утилита mysqldump, используемая без опций
--quick или --opt, перед тем, как сделать дамп результата выборки
информации, загрузит весь результат в память. Это может создать проблемы
при получении дампа большой базы данных.
Учтите, что не следует применять параметры --opt или -e, если вы
собираетесь использовать для получения дампа новую копию программы
mysqldump, а затем воспроизводить его на очень старом MySQL-сервере.
Утилита mysqldump поддерживает следующие опции:
-
--add-locksДобавить команды
LOCK TABLESперед выполнением иUNLOCK TABLEпосле выполнения каждого дампа таблицы (для ускорения доступа к MySQL). -
--add-drop-tableДобавить команду
DROP TABLEперед каждой командойCREATE TABLE. -
-A, --all-databasesПроизвести дамп всех баз данных. Аналогично опции
--databasesс указанием всех баз данных. -
-a, --allВключить все опции создания объектов, специфичные для MySQL.
-
--allow-keywordsРазрешить создавать имена столбцов, которые совпадают с ключевыми словами. Отсутствие конфликтов обеспечивается прибавлением имени таблицы в качестве префикса к имени каждого столбца.
-
-c, --complete-insertИспользовать полные команды
INSERT(с именами столбцов). -
-C, --compressИспользовать сжатие всей информации между клиентом и сервером, если они оба поддерживают сжатие.
-
-B, --databasesВыполнить дамп нескольких баз данных. Обратите внимание на разницу в использовании: в этом случае таблицы не указываются. Все имена аргументов рассматриваются как имена баз данных. Оператор
USE db_name;включается в вывод перед каждой новой базой данных. -
--delayedИспользовать команду
INSERT DELAYEDпри вставке строк. -
-e, --extended-insertИспользовать команду
INSERTс новым многострочным синтаксисом (повышает компактность и быстродействие операторов ввода). -
-#, --debug[=option_string]Отслеживать прохождение программы (для отладки).
-
--helpВывести справочную информацию и выйти из программы.
-
--fields-terminated-by=...,--fields-enclosed-by=...,--fields-optionally-enclosed-by=...,--fields-escaped-by=...,--lines-terminated-by=...Эти опции используются совместно с параметром
-Tи имеют то же самое значение, что и соответствующие операторы дляLOAD DATA INFILE. См. раздел See Раздел 6.4.9, «Синтаксис оператораLOAD DATA INFILE». -
-F, --flush-logsЗаписать на диск данные системного журнала из буфера MySQL-сервера перед началом выполнения дампа.
-
-f, --force,Продолжать даже при получении ошибки SQL при выполнении дампа таблицы.
-
-h, --host=..Выполнить дамп данных MySQL сервера на указанном хосте. Значение хоста по умолчанию -
localhost. -
-l, --lock-tables.Заблокировать все таблицы перед началом выполнения дампа. Таблицы блокируются оператором
READ LOCAL, чтобы разрешить параллельные записи дляMyISAM-таблиц. Следует отметить, что при выполнении дампа совокупности баз данных опция--lock-tablesблокирует таблицы каждой базы по отдельности. Таким образом, использование этого параметра не гарантирует, что таблицы будут логически непротиворечивы в пределах этих баз данных. В различных базах данных при выполнении дампа таблицы могут находиться в совершенно разных состояниях. -
-K, --disable-keysДобавляет выражение
/*!40000 ALTER TABLE tb_name DISABLE KEYS */;и/*!40000 ALTER TABLE tb_name ENABLE KEYS */;в выводе результата. Это ускорит загрузку данных на сервер MySQL 4.0, так как индексы создаются после внесения всех данных. -
-n, --no-create-dbВ выводе результата выражение
CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name;будет отсутствовать. Данная строка будет добавлена в любом случае при использовании опций--databasesили--all-databases. -
-t, --no-create-infoНе записывать информацию о создании таблицы (команда
CREATE TABLE). -
-d, --no-dataНе записывать информацию из строк таблицы. Это очень полезно для получения дампа структуры таблицы!
-
--optТо же, что и
--quick --add-drop-table --add-locks --extended-insert --lock-tables. Должно дать наиболее быстрый дамп для чтения на MySQL-сервере. -
-pyour_pass, --password[=your_pass]Используемый пароль при подключении к серверу. Если аргумент
=your_passне введен,mysqldumpпредложит ввести пароль. -
-P port_num, --port=port_numНомер порта TCP/IP, используемого для подключения к хосту.
-
--protocol=(TCP | SOCKET | PIPE | MEMORY)Для указания протокола соединения, который надлежит использовать. Новшество в MySQL 4.1.0.
-
-q, --quickВыводить дамп непосредственно на стандартный вывод
stdoutбез буферизации запроса. Для этого используется функцияmysql_use_result(). -
-Q, --quote-namesВзять в кавычки имена таблиц и столбцов без символов '
`'. -
-r, --result-file=...Прямой вывод указанного файла. Этот опцию следует использовать в MS DOS, так как она предотвращает преобразование символа новой строки '\n' в последовательность '\n\r' (новая строка + возврат каретки).
-
--single-transactionДанная опция выдает SQL-команду
BEGINперед выполнением дампа данных с сервера. Наиболее часто используется сInnoDB-таблицамии и уровнем изоляции транзакцийREAD_COMMITTED, так как именно в этом режиме можно получить дамп с непротиворечивым состоянием базы данных после выполнения командыBEGINбез блокирования каких-либо приложений. Используя эту опцию, необходимо помнить, что при выполнении дампа только транзакционные таблицы будут находиться в непротиворечивом состоянии, т.е. некоторыеMyISAM- илиHEAP-таблицы при использовании данной опции могут все же изменить свое состояние.Опция
--single-transactionдобавлена в версии 4.0.2. Она является взаимоисключающей по отношению к опции--lock-tables, так как командаLOCK TABLESуже принимает открытую транзакцию. -
-S /path/to/socket, --socket=/path/to/socketФайл сокета для подсоединения к
localhost(значение хоста по умолчанию). -
--tablesПерекрывает параметр --databases (-B).
-
-T, --tab=path-to-some-directoryДля каждой заданной таблицы создает файл a
table_name.sql, содержащий SQLCREATEкоманды для создания таблицы, и файлtable_name.txtс данными таблицы. Файл.txtимеет формат в соответствии с параметрами--fields-xxxи--lines--xxx. Примечание: Этот параметр работает только при условии, что утилитаmysqldumpзапущена на том же компьютере, что и демонmysqld, причем пользователь/группа, запустившие данный потокmysqld(обычно это пользовательmysqlи группаmysql), должны иметь право создавать/записывать файл по указанному адресу. -
-u user_name, --user=user_nameИмя пользователя MySQL-сервера, используемое при подключении к серверу. Значением по умолчанию является имя пользователя Unix.
-
-O var=option, --set-variable var=optionУстановить значения переменных. Доступные для использования переменные перечислены ниже. В MySQL 4.0 просто используйте
--var=option. -
-v, --verboseРасширенный режим вывода. Вывод более детальной информации о работе программы.
-
-V, --versionВывести информацию о версии и выйти из программы.
-
-w, --where='where-condition'Выполнить дамп только выбранных записей. Обратите внимание, что кавычки обязательны.
"--where=user='jimf'" "-wuserid>1" "-wuserid<1"
-
-X, --xmlПредставляет дамп базы данных в виде XML.
-
-x, --first-slaveБлокирует все таблицы во всех базах данных.
-
-O net_buffer_length=#, where # < 16MПри создании многострочных операторов ввода (как и в случаях применения параметров
--extended-insertили--opt) утилитаmysqldumpбудет создавать строки длиной вплоть до указанной вnet_buffer_length. При увеличении значения этой переменной необходимо также убедиться в том, что в MySQL-сервере для переменнойmax_allowed_packetуказано значение больше, чем величинаnet_buffer_length.
Чаще всего утилита mysqldump используется для получения резервной копии
всех баз данных. See Раздел 4.4.1, «Резервное копирование баз данных».
mysqldump --opt database > backup-file.sql
Можно, наоборот, прочитать этот файл на MySQL-сервере посредством команды:
mysql database < backup-file.sql
или
mysql -e "source /patch-to-backup/backup-file.sql" database
Данная утилита достаточно часто используется и для переноса информации из базы данных на другой MySQL-сервер:
mysqldump --opt database | mysql --host=remote-host -C database
Вполне возможно получить дамп нескольких баз данных с помощью одной команды:
mysqldump --databases database1 [database2 ...] > my_databases.sql
Если необходим дамп всех баз данных, можно использовать:
mysqldump --all-databases > all_databases.sql