Подробная справка по утилите, скопированная с сайта mysql.ru, просто что бы не потерялась.
Справочное руководство по MySQL
4.8.5 mysqldump, Получение дампов данных и структуры таблицы
- 4 Администрирование баз данных
- 4.8 Клиентские сценарии и утилиты MySQL
- 4.8.1 Обзор клиентских сценариев и утилит
- 4.8.2
mysql
, Утилита командной строки - 4.8.3
mysqladmin
, Администрирование MySQL-сервера. - 4.8.4 Использование
mysqlcheck
для сопровождения и аварийного восстановления таблиц. - 4.8.5
mysqldump
, Получение дампов данных и структуры таблицы - 4.8.6
mysqlhotcopy
, Копирование баз данных и таблиц MySQL - 4.8.7
mysqlimport
, импорт данных из текстовых файлов - 4.8.8 Просмотр баз данных, таблиц и столбцов
- 4.8.9 perror, разъяснение кодов ошибок
- 4.8.10 Как запускать SQL-команды из текстового файла
- 4.8 Клиентские сценарии и утилиты MySQL
4.8.5 mysqldump
, Получение дампов данных и структуры таблицы
Данная утилита позволяет получить дамп («моментальный снимок») содержимого базы данных или совокупности баз для создания резервной копии или пересылки данных на другой SQL-сервер баз данных (не обязательно MySQL-сервер). Дамп будет содержать набор команд SQL для создания и/или заполнения таблиц.
Если же резервная копия создается на сервере, то вместо описываемой утилиты следует использовать mysqlhotcopy
. См.раздел See section 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 section 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, используемого для подключения к хосту (применяется при подсоединении к хостам, отличным от
localhost
, для которого используются сокеты Unix ). -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', содержащий SQL
CREATE
команды для создания таблицы, и файл `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
- Установить значения переменных. Доступные для использования переменные перечислены ниже.
-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 section 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