поиск:
Полезные ссылки

  • Форум по MySQL

  • Статьи по MySQL

  • Вопросы по MySQL

  • MySQL.com


  • Базы данных

  • MySQL

  • PostgreSQL


  • PHP конференция 2005
    Подробности!

    4.8.5. mysqldump, Получение дампов данных и структуры таблицы

    Данная утилита позволяет получить дамп (``моментальный снимок'') содержимого базы данных или совокупности баз для создания резервной копии или пересылки данных на другой 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, содержащий 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

      Установить значения переменных. Доступные для использования переменные перечислены ниже. В 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
    
     
    © 1997-2005 PHP Club Team
    Rambler's Top100