Как настроить смартфоны и ПК. Информационный портал
  • Главная
  • Телевизоры (Smart TV)
  • Делаем дамп (бэкап) базы данных, используя утилиту mysqldump. Делаем дамп базы MySQL и экспорт данных в консоли

Делаем дамп (бэкап) базы данных, используя утилиту mysqldump. Делаем дамп базы MySQL и экспорт данных в консоли

Данная статья может оказаться полезной, если у вас есть веб-сайт, который использует систему управления контентом (Joomla, WordPress, OpenCart и т.д.), и вы решили перенести его на другой сервер . Для этого требуется не только перенос файлов сайта, но и перенос . Перед тем, как приступить к переносу веб-сайта, необходимо подобрать хороший и заказать его, чтобы получить доступ к новому хостинговому аккаунту. Мы, например, предлагаем отдельный , Joomla и PrestaShop. Если вы хотите перенести сайт на новое имя и вам нужно , не торопитесь. Наш план виртуального хостинга S4 предоставит вам домен и в подарок. Если для вашего сайта недостаточно виртуального хостинга, вы всегда можете заказать VPS или .

Для переноса базы данных необходимо сначала создать ее дамп, то есть разместить содержимое в отдельный sql-файл. Делается это в меню phpMyAdmin на хостинге, откуда вы переносите сайт. Зайдите в phpMyAdmin, выделите слева базу данных, которую необходимо перенести, и нажмите на кнопку «Экспорт » в верхнем меню.

Откроется диалоговое окно, в котором обязательно выберите тип базы SQL, после чего нажмите кнопку ОК . Дождитесь пока файл базы данных скачается на ваш компьютер.

Теперь этот файл необходимо корректно разместить на нашем хостинге. Для этого необходимо сначала создание базы данных MySQL в cPanel аккаунте, добавление к ней пользователя и назначение ему привилегии. Ниже по порядку расписано, как создать базу данных в MySQL.

Зайдите в cPanel и найдите раздел «Базы данных », выберите «».

Откроется новое окно. На шаге 1 введите имя базы. Обратите внимание на то, что имя БД всегда будет с префиксом, первая половина имени будет содержать в себе имя cPanel аккаунта.

После ввода имени нажмите на кнопку «Следующий шаг ».

На шаге 2 необходимо создать пользователя MySQL к базе и задать пароль для него. После ввода всех данных нажмите кнопку «Создать пользователя ».

При настройке привилегий созданного пользователя выберите опцию «ВСЕ ПРАВА » и переходите к следующему шагу.

Если в предыдущих шагах все было сделано правильно, мастер баз данных оповестит вас об успешном завершении создания БД на хостинге.

Созданную БД вы теперь сможете найти в списке доступных баз MySQL в одноименном меню контрольной панели.

Теперь для восстановления базы данных MySQL импортируем в созданную базу содержимое сохраненного со старого хостинга файла с расширением .sql . Для этого на главной странице cPanel выберите пункт меню “phpMyAdmin ” в том же разделе “Базы данных ”. В открывшемся окне в меню слева выберите только что созданную БД и нажмите на вкладку «Импорт » в верхнем меню.

Нажмите кнопку «Выберите файл », в диалоговом окне выберите ранее сохраненный sql-файл и загрузите его на хостинг. Убедитесь, что выбран тип кодировки utf-8. После нажатия кнопки ОК дождитесь сообщения об успешном импорте базы данных.

На этом все действия, необходимые для переноса базы данных на другой , выполнены.

Делать дамп (бэкап) базы данных очень важно. Поэтому я сделал некоторые комментарии с примерами к такой отличной утилите, как mysqldump.

mysqldump - утилита позволяет получить дамп содержимого базы данных или совокупности баз для создания резервной копии или пересылки данных на другой SQL-сервер баз данных (не обязательно MySQL-сервер). Дамп будет содержать набор команд SQL для создания и/или заполнения таблиц.

mysqldump -u root -p -f name_database >

Этой командой мы делаем бэкап базы данных под именем name_database на диск С в файл mydb_backup_name_database.txt

Файл можно не создавать, MySQL создаст его сам.

mysql -u root -p -f name_database < C:\mydb_backup_name_database.txt

этой командой мы импортируем данные бэкапа из файла C:\mydb_backup_name_database.txt

Примечание: -f, --force - опция, которая указывает продолжать даже при получении ошибки SQL, т.е. игнорировать ошибки. Например, если в таблице уже существует во всем идентичная строка.

Чтобы пароль не запрашивался, нужно писать его сразу после -p, то есть без пробелов. Если пароль Pwd , то пример выгладит так:

mysqldump -u root -pPwd -f name_database > C:\mydb_backup_name_database.txt

Если вы часто используете данную команду, то лучше сделать отдельного пользователя с необходимыми правами, дабы поменьше светить пароль root-а

Рассмотрим более тонкие настройки mysqldump:

--databases позволяет сделать так, что mysqldump включит в сценарий восстановления команды CREATE DATABASE /*!33333 IF NOT EXISTS*/ DBNAME и USE DBNAME. Это позволит создавать рабочие базы "с нуля". То есть, без использования --databases подразумевается, что пользователь восстанавливает одну базу данных и явно указывает, куда нужно помещать восстанавливаемые данные. Если же backup создается с целью сделать полностью рабочую копию данных, например, на другом MySQL-сервере, то нужно использовать этот ключ;

--all-databases позволяет сделать копии всех баз данных, которые существуют на данном MySQL-сервере. Если же нужно сделать копии только некоторых баз, нужно просто указать их через пробел при вызове mysqldump из командной строки (см. выше);

Ключ --help . Программа mysqldump имеет множество версий. Посмотреть, какие возможности поддерживаются конкретно Вашей версией, можно с помощью этого ключа;

--add-drop-table - ключ, который заставит mysqldump добавлять в итоговый сценарий команду drop table перед созданием таблиц. Это позволит избежать некоторых ошибок при восстановлении базы из резервной копии. Конечно, нужно учитывать то, что таблицы, находящиеся в рабочей копии (если таблицы с таким же именем существуют в backup), перед восстановлением из резервной копии будут удалены из основной базы и пересозданы из backup;

--no-data . С помощью этого ключа можно быстро сделать копию структуры таблицы/баз без самих данных. Например, Вы создали сложную таблицу и хотели бы сохранить на будущее ее структуру, а сами данные, которые находятся в этой таблице, Вам в резервной копии не нужны;

--result-file=... - этот ключ можно использовать для перенаправления вывода в файл. Можно использовать обычное unix-перенаправление командой ">", а можно - вот этот ключ. Кому что нравится;

Еще один очень полезный совет по использованию mysqldump в хостинговой среде. Как правило, при использовании хостинга на пользователя налагаются некоторые ограничения. Например, нельзя занять больше некоторого количества физической памяти (RAM, ОЗУ). mysqldump по умолчанию помещает все полученные от MySQL-сервера данные в память, а потом записывает все это на диск. Соответственно, если провайдер дает Вам занять, например, 30Мб памяти, а база, копию которой Вы делаете с помощью mysqldump, занимает 50Мб, конечно, тут возникнет ошибка - mysqldump не сможет отработать корректно и завершится аварийно, о чем Вам сообщит. Чтобы "заставить" mysqldump писать данные сразу на диск, а не хранить их, пусть даже и временно, в памяти, используйте ключ --quick . Это решит проблему.

Приведем еще пару полезных примеров:

mysqldump -u root -pPwd -f --default-character-set=cp1251 DBNAME | gzip -c > filename.txt .gz

распаковывать такой архив можно командой:

gunzip filename.txt .gz

Чтобы знать, за какое число был сделан бэкап, можно написать такую команду:

mysqldump -uLOGIN -PPORT -hHOST -pPASS DBNAME | gzip -c > `date "+%Y-%m-%d"`.gz

а если приходится делать дампы с разными кодировками, то удобно пользоваться переменными:

set DBCHARACTER = utf8

set DBNAME = breach

mysqldump -u root -pPwd -f --default-character-set=$DBCHARACTER $DBNAME | bzip2 -c > sql.$DBNAME .`date "+%Y-%m-%d"`.bz2

Если Вы хотите автоматизировать удаление старых архивов, попробуйте воспользоваться cron и командой find, которая обычно есть в unix. Запуская периодически

find ~/каталог-с-архивами -name "*.gz" -mtime +7 -exec rm -f {} \;

Тем самым Вы будете удалять архивы, которые "старше" семи дней.

Сегодня хочу рассказать о дампах баз данных. Самого когда-то данное словосочетание пугало, хотя страшного в нем в общем-то ничего нет. Итак первый, и главный вопрос: что такое дамп базы данных ? Ответ на него неожиданно прост - дамп базы данных это файл с ее содержимым, позволяющий восстановить бд с "нуля". Т.е. это всего лишь ее копия. Так почему же дамп базы данных так и не назвать "копия бд"? Суть в том, что дамп сам по себе базой данных не является, он лишь позволяет ее воссоздать. Дело в том, что база данных может храниться в разных файлах в зависимости от версии субд, от типа операционной системы и других факторов. Т.е. найти в системе все файлы одной бд и перенести их в другую систему очень непросто. Для облегчения этой задачи как раз и служит дамп базы данных.

А для чего собственно необходимо переносить базу данных?

Во-первых для создания резервных копий, или точек восстановления перед внесением важных изменений в структуру - для того чтобы иметь возможность откатиться назад в случае возникновения каких-либо проблем. К примеру поставили Вы сторонний компонент, а сайт в результате оказался неработоспособным и нужно быстро восстановить его работу. Здесь и возникает необходимость использования дампа базы данных.

Во-вторых, при создании сайта его как правило сначала делают на локальной машине под виртуальным веб-сервером и только потом переносят на хостинг. И если с переносом файлов все более-менее понятно то перенос бд - задача не столь очевидно решаемая. Здесь тоже не обойтись без дампа базы данных.

Итак, что такое дамп базы данных разобрались. Остался вопрос как его использовать. Рассмотрим стандартную в веб-программировании задачу - перенос сайта, созданного на локальной машине на веб-хостинг. С переносом файлов описывать подробно не буду, остановлюсь на базах данных. Итак, имеем бд MySql и задачу перенести ее на веб-хостинг. Чтобы не изобретать велосипед будем использовать широко распространенную утилиту phpMyAdmin, которая как правило всегда установлена Вашим провайдером, да и в состав денвера она тоже входит. В конце-концов утилита еще и бесплатна и доступна для скачивания на официальном сайте. Работает она на веб-сервере, а написана на языке php, что позволяет пользоваться ею прямо в браузере. Т.е. тут проблем возникнуть не должно, если они все же возникли, пишите в комментарии - разберемся.

Приступаем к созданию дампа базы данных. Открываем phpMyAdmin, выбираем нужную нам базу и нажимаем на вкладку "Export ". В результате вы должны получить что-то вроде этого:

Здесь нужно выбрать все таблицы (ну или те в которых нужно откатить изменения) и поставить radio button в значение SQL. В разделе Structure можно пометить первое поле "Add DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT" для того чтобы перед импортом дампа в базе назначения удалились соответсвующие таблицы, если она переносится первый раз - признак можно не помечать. В том же окне ниже видим раздел "Save as file":

Собственно помечаем "Save as file" и пишем желаемое имя файла. Дамп базы данных можно заархивировать, но как правило он имеет не столь значительный размер, чтобы имело смысл сжимать файл. Нажимаем кнопку "GO", и получаем стандартное окно сохранения файла в браузере:
. Сохраненный файл и есть дамп базы данных. Если открыть его в том же блокноте - увидите в начале строки вида

PhpMyAdmin SQL Dump
-- version 3.2.3
-- http://www.phpmyadmin.net

Сам файл состоит из запросов на создание и вставку значений в таблицу, написанных на языке SQL. Тут абсолютно никакого шаманства, все очень даже очевидно. Теперь следующая задача - импорт дампа. С ней тоже ничего сложного. Заходите в панель управления хостингом, находите там phpMyAdmin, запускаете. Возможно придется указать логин/пароль - в зависимости от настроек хостера. Ну а дальше действия похожи - выбираем нужную бд, жмем вкладку "Import", видим такое окно:

В разделе "File to import" при помощи кнопки "Обзор" указываем файл дампа базы данных, ниже проставляем кодировку - в joomla по-умолчанию это utf-8. Ниже расположен раздел "Partial import" и поле "Number of records (queries) to skip from star" куда можно ввести числовое значение - количество строк, обрабатываемых за один проход, на тот случай если за время жизни скрипта вся база не успевает импортироваться. Значение по умолчанию "0" соответствует импорту всей базы за один запуск скрипта. Мне в моей практике не приходилось сталкиваться с тем что база не успевает залиться за один проход, хотя это не говорит что таких случаев не бывает. Значения остальных полей менять не требуется, просто нажимаем кнопку "GO". Вот собственно и все, дамп базы данных импортирован.

Ну и напоследок несколько уточнений.

1) Почему я описал способ импорта/экспорта всех таблиц а не бд целиком? Дело в том что наиболее часто приходится сталкиваться с процедурой импорта/экспорта при переносе данных с веб-сервера на локальную машину и наоборот. Но очень часто на локальной машине используется доступ по учетной записи "root" без пароля. На хостинге такого мы себе позволить не можем. А база данных как раз таки содержит в себе не только данные, но и "privileges" - права на доступ к ней определенных пользователей. Чтобы не приходилось каждый раз заводить/удалять пользователей и назначать им права доступа используется подход когда в дамп базы данных записывается только структура таблиц и данные в ней. В случае если создается просто бакап для того же сервера вполне можно сделать дамп с бд целиком.

2) Почему именно phpMyAdmin? Дело здесь совсем не в том что ему нет альтернативы - их как раз очень много, есть и более функциональные вещи и более простые. Просто phpMyAdmin входит в стандартный набор для большинства виртуальных хостингов, т.е. для его установки не придется делать абсолютно ничего. Т.е. мы просто открываем его и делаем дамп базы данных. Ну и конечно использование phpMyAdmin может быть полезным для массы задач - того же тестирования запросов, просмотра структуры таблиц, данных в них.

Ну вот собственно и все, что хотел поведать в этой статье. Комментарии как всегда приветствуются.

Данная утилита позволяет получить дамп (``моментальный снимок"") содержимого базы данных или совокупности баз для создания резервной копии или пересылки данных на другой SQL-сервер баз данных (не обязательно MySQL-сервер). Дамп будет содержать набор команд SQL для создания и/или заполнения таблиц.

Если же резервная копия создается на сервере, то вместо описываемой утилиты следует использовать mysqlhotcopy . См.раздел See section 4.8.6 mysqlhotcopy , Копирование баз данных и таблиц MySQL .

Shell> mysqldump database или mysqldump --databases DB1 или mysqldump --all-databases

Если не указывать имена таблиц или использовать параметры --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 -X, --xml Представляет дамп базы данных в виде XML. -x, --first-slave Блокирует все таблицы во всех базах данных. -O net_buffer_length=#, where # Чаще всего утилита mysqldump используется для получения резервной копии всех баз данных. See section 4.4.1 Резервное копирование баз данных . mysqldump --opt database > backup-file.sql

Mysql database

Mysql -e "source /patch-to-backup/backup-file.sql" database

Данная утилита достаточно часто используется и для переноса информации из базы данных на другой MySQL-сервер:

Mysqldump --opt database | mysql --host=remote-host -C database

Вполне возможно получить дамп нескольких баз данных с помощью одной команды:

Mysqldump --databases database1 > my_databases.sql

Если необходим дамп всех баз данных, можно использовать:

Mysqldump --all-databases > all_databases.sql

Лучшие статьи по теме