Получение дампов данных и структуры таблицы
Данная утилита позволяет получить дамп (``моментальный снимок'') содержимого базы данных или совокупности баз для создания резервной копии или пересылки данных на другой 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Для каждой заданной таблицы создает файл atable_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
Разберем пример простейшее использования, задампим базу данных «database» при помощи перенаправления потока в файл «database.sql»:
где:
- -u или -–user=... — имя пользователя
- -h или --host=... — удаленный хост (для локального хоста можно опустить этот параметр)
- -p или --password — запросить пароль
- database — имя базы данных
- database.sql — файл для дампа
Для того чтобы сделать дамп несколько баз данных, необходимо использовать параметр --databases (или сокращенно -B), пример:
А для того чтобы сделать дамп всех баз данных, необходимо использовать параметр --all-databases (или сокращенно -A), пример:
Развертывание дампа
Перенаправляем поток в обратную сторону и развертываем базу данных:
Или через mysql-console:
Ну, а если у нас gz-архив к примеру, то:
Пример использование некоторых параметров
Например, нам нужны данные с «продакшен версии базы» для «версии разработчика», то есть нам нужна «песочница». Выбираем не более 100 записей:
Или нам нужна только структура, без данных:
Примеры навеяны постом Александра Макарова — http://rmcreative.ru/blog/post/ljogkiy-damp-mysql
Делаем дамп только триггеров, процедур и событий:
Шпаргалка по параметрам
Приведу некоторые параметры, которые могут понадобится при работе с утилитой mysqldump.
- --add-drop-database
- Добавляет оператор DROP DATABASE перед каждым оператором CREATE DATABASE.
- --add-drop-table
- Добавляет оператор DROP TABLE перед каждым оператором CREATE TABLE.
- --add-locks
- Добавляет оператор LOCK TABLES перед выполнением и UNLOCK TABLE после выполнения каждого дампа таблицы (для ускорения доступа к MySQL).
- --all-databases, -A
- Сохраняет все таблицы из всех баз данных, которые находятся под управлением текущего сервера.
- --allow-keywords
- Разрешить создавать имена столбцов, которые совпадают с ключевыми словами. Отсутствие конфликтов обеспечивается прибавлением имени таблицы в качестве префикса к имени каждого столбца.
- --comments, -i
- Данный параметр позволяет добавить в дамп дополнительную информацию, такую, как версия mysqldump, версия MySQL, имя хоста, на котором расположен сервер MySQL.
- --compact
- Данный параметр требует от mysqldump создать дамп, используя как можно более компактный формат. Параметр является противоположным --comments.
- --compatible=name
- Параметр генерирует вывод, который совместим с другими СУБД или более старыми версиями MySQL. Вместо ключевого слова name можно использовать: «ansi», «mysql323», «mysql40», «postgresql», «oracle», «mssql», «db2», «maxdb», «no_key_options», «no_table_options», «no_field_options». Можно использовать несколько значений, разделив их запятыми.
- --complete-insert, -c
- Используется полная форма оператора INSERT (с именами столбцов).
- --create-options
- Добавляет дополнительную информацию в операторы CREATE TABLE. Это может быть тип таблицы, начальное значение AUTO_INCREMENT и другие параметры.
- --databases, -B
- Параметр позволяет указать имена нескольких баз данных, для которых необходимо создать дамп.
- --delayed
- Использовать команду INSERT DELAYED при вставке строк.
- --delete-master-logs
- На главном сервере репликации автоматически удаляются бинарные логи (logbin) после того, как дамп был успешно создан при помощи mysqldump. Этот параметр автоматически включает параметр «--master-data».
- --disable-keys, -K
- Для каждой таблицы, окружает оператор INSERT выражениями /*!40000 ALTER TABLE tbl_name DISABLE KEYS */; и /*!40000 ALTER TABLE tbl_name ENABLE KEYS */; в выводе результата дампа. Это ускорит загрузку данных на сервер для таблиц типа MyISAM, так как индексы создаются после внесения всех данных.
- --extended-insert, -e
- Использовать команду INSERT с новым многострочным синтаксисом (повышает компактность и быстродействие операторов ввода).
- --flush-logs, -F
- Записать на диск данные системного журнала из буфера MySQL-сервера перед началом выполнения дампа.
- --force, -f
- Продолжать даже если в процессе создания дампа произошла ошибка.
- --hex-blob
- Параметр позволяет представить бинарные данные в полях типа BINARY, VARBINARY, BLOB и BIT в шестнадцатеричном формате. Так последовательность «abc» будет заменена на 0×616263.
- --ignore-table=db_name.tbl_name
- Позволяет игнорировать таблицу tbl_name базы данных db_name при создании дампа. Если из дампа необходимо исключить несколько таблиц, необходимо использовать несколько параметров «--ignore-table», указывая по одной таблице в каждом из параметров.
- --insert-ignore
- Добавляет ключевое слово IGNORE в оператор INSERT.
- --lock-all-tables, -x
- Указание этого параметра приводит к блокировке всех таблиц во всех базах данных на время создания полного дампа всех баз данных.
- --lock-tables, -l
- Указание этого параметра приводит к блокировке таблиц базы данных, для которой создается дамп.
- --no-autocommit
- Включает все операторы INSERT, относящиеся к одной таблице, в одну транзакцию, что приводит к увеличению скорости загрузки данных.
- --no-create-db, -n
- Подавляет создание в дампе операторов CREATE DATABASE, которые автоматически добавляются при использовании параметров --databases и --all-databases.
- --no-data, -d
- Подавляет создание операторов INSERT в дампе, что может быть полезно при создании дампа структуры базы данных без самих данных.
- --opt
- Параметр предназначен для оптимизации скорости резервирования данных и является сокращением, включающим следующие опции: --quick --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --set-charset. Начиная с MySQL 4.1, параметр --opt используется по умолчанию, т.е. все вышеперечисленные параметры включаются по умолчанию, даже если они не указываются. Для того чтобы исключить такое поведение, необходимо воспользоваться параметров --skip-opt
- --order-by-primary
- Указание параметра приводит к тому. что каждая таблица сортируется по первичному ключу или первому уникальному индексу.
- --port, -P
- Номер TCP порта, используемого для подключения к хосту.
- --protocol={TCP|SOCKET|PIPE|MEMORY}
- Параметр позволяет задать протокол подключения к серверу.
- --quick, -q
- Позволяет начать формирование дампа, не дожидаясь полной загрузки данных с сервера и экономя тем самым память.
- --quote-names, -Q
- Помещает имена баз данных, таблиц и столбцов в обратные апострофы `. Начиная с MySQL 4.1, данный параметр включен по умолчанию.
- --replace
- Добавляет ключевое слово REPLACE в оператор INSERT. Данный параметр впервые появился в MySQL 5.1.3.
- --result-file=/path/to/file, -r /path/to/file
- Параметр направляет дамп в файл file. Этот параметр особенно удобен в Windows, без использования командной строки. когда можно перенаправить результат в файл при помощи последовательностей > и >>.
- --routines, -R
- Данный параметр создает дамп хранимых процедур и функций. Доступен с MySQL 5.1.2.
- --single-transaction
- Параметр создает дамп в виде одной транзакции.
- --skip-comments
- Данный параметр позволяет подавить вывод в дамп дополнительной информации.
- --socket=/path/to/socket, -S /path/to/socket
- Файл сокета для подсоединения к localhost.
- --tab=/path/, -T /path/
- При использовании этого параметра в каталоге path для каждой таблицы создаются два отдельных файла: tbl_name.sql, содержащий оператор CREATE TABLE, и tbl_name.txt, который содержит данные таблиц, разделенные символом табуляции. Формат данных может быть переопределен явно с помощью параметров --fields-xxx и --lines-xxx.
- --tables
- Перекрывает действия параметра --databases (-B). Все аргументы, следующие за этим параметром, трактуются как имена таблиц.
- --triggers
- Создается дамп триггеров. Этот параметр включен по умолчанию. для его отключения следует использовать параметр --skip-triggers.
- --events, -E
- Создается дамп событий. Смотрите MySQL Event Scheduler или встроенный диспетчер событий в MySQL.
- --tz-utc
- при использовании данного параметра в дамп будет добавлен оператор вида SET TIME_ZONE='+00:00', который позволит обмениваться дампа в различных временных зонах.
- --verbose, -v
- Расширенный режим вывода. Вывод более детальной информации о работе программы.
- --version, -V
- Вывести информацию о версии программы.
- --where='where-condition', -w 'where-condition'
- Выполнить дамп только выбранных записей. Обратите внимание, что кавычки обязательны.
- --xml, -X
- Представляет дамп базы данных в виде XML.
- --first-slave, -x
- Блокирует все таблицы во всех базах данных.
- --debug=..., -#
- Отслеживать прохождение программы (для отладки).
- --help
- Вывести справочную информацию и выйти из программы.
