Резервное копирование баз MySQL

Вы работаете над веб-проектом, в котором используется СУБД MySQL. Конечно, каждый серьезный проект предполагает, что периодически будет создаваться резервная копия всех данных, используемых в работе. Это де факто стандартный подход. Более того, без этого невозможно гарантировать посетителям сайта бесперебойность работы Вашего ресурса. В случае, если сайт предоставляет коммерческие услуги, наличие резервного копирования является просто-таки жизненной необходимостью. .
Вообще, почти все хостинг-провайдеры производят резервное копирование всех файлов пользователей. Однако, не стоит забывать о том, что провайдеры делают backup, в основном, для себя, на случай аварии у себя. Именно по этой причине пользователи в условиях хостинга могут, конечно, рассчитывать на восстановление в случае удаления каких-то данных по вине самого пользователя, но вовсе не факт, что провайдер сделает восстановление MySQL-базы сразу по получению запроса. Лучше делать для себя копию и в случае чего ее использовать. Можно даже периодически копировать этот свой backup на другую, не провайдерскую машину – так надежнее, на всякий случай.

Сделать копию всех статических HTML- и прочих документов просто. Так же несложно периодически «откладывать в сторонку» и копии скриптов. Гораздо более сложной представляется задача создания копии (далее backup) такой динамичной структуры, как база данных MySQL. Основные трудности, которые возникают перед администратором размещенного на хостинге сайта, обычно бывают такие:

1. Отсутствие физического доступа к файлам базы данных. Как правило, провайдеры хостинга предоставляют возможность работы с базой данных только через скрипты или специальный mysql-клиент, но не дают прав на доступ непосредственно к файлам, в которых содержатся данные из MySQL-базы.

2. Отсутствие у администратора знаний о том, как вообще надо делать backup. Обычно такая задача возникает только, когда «клюнул жареный петух». То есть, в случае аварии, вторжения хакеров или в других внештатных ситуациях. Веб-мастеры просто не готовы к немедленному backup и начинают судорожно изучать документацию по MySQL, а время идет…

3. В случае, если веб-мастер не владеет в достаточной мере навыками работы со специализированными утилитами из пакета MySQL, могут возникать трудности, связанные с ограничениями, налагаемыми хостинг-провайдером на пользовательские аккаунты. Например, если база очень большая и ее размер превышает лимит на доступную пользователю память (RAM), backup сделать будет сложно. Нужно пользоваться тонкими настройками утилит резервного копирования, что иногда тоже вызывает трудности на практике.

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

Как сделать копию базы MySQL

Существует программа mysqldump, позволяющая быстро и просто производить операции по созданию резервных копий баз MySQL. Также mysqldump дает возможность делать очень тонкие настройки для управления процессом создания резервных копий баз данных или отдельных таблиц. Можно сказать, что mysqldump – это основной инструмент, которым Вам придется пользоваться в том случае, если Вы будете делать backup MySQL.

Сразу возьмем простую задачу, которую будем решать с помощью mysqldump, и разберемся, что к чему. Есть хостинг, есть база данных DBNAME, которую выделил Вам хостинг-провайдер. Есть хост HOST, на котором размещен сервер MySQL, логин LOGIN к нему, порт PORT, на котором работает сервер, а также пароль PASS. Имея все эти данные, можно сделать dump (дамп, копию) базы DBNAME так (выполняем в unix shell):

> mysqldump -uLOGIN -PPORT -hHOST -pPASS DBNAME > dump.txt

После выполнения данной команды в файле dump.txt у нас будет копия MySQL-базы DBNAME. Это произойдет только в том случае, конечно, если все параметры Вы зададите верно, в соответствии с настройками своего хостинга. Сразу нужно сказать, что программа mysqldump производит вывод результатов прямо Вам на STDIN, то есть, на экран. Нужно перенаправлять вывод в какой-либо файл. Например, как в данном случае – » > dump.txt «. Если этого не сделать, а база большая, Вы получите на экран все те мегабайты информации, которые в ней содержатся.

Немного расскажем о том, что же делает mysqldump. Эта программа создает сценарий восстановления Ваших данных. То есть, вывод mysqldump – это не какие-то абстрактные и нечитаемые двоичные данные, а осмысленный текст сценария. Например, если в Вашей базе была таблица test, в которой было поле test2 с типом данных integer и одна-единственная запись «1111″, то mysqldump создаст примерно такой сценарий:

# MySQL dump 8.14
#
# Host: HOST Database: DBNAME
#——————————————————–
# Server version 3.23.39-log

#
# Table structure for table ‘test’
#

CREATE TABLE test (
test2 int(11) default NULL
) TYPE=MyISAM;

#
# Dumping data for table ‘test2′
#

INSERT INTO test2 VALUES (’1111′);

Таким образом, mysqldump «опишет» все Ваши таблицы и создаст INSERT-команды для восстановления данных в таблицах. Итак, мы перенаправляем вывод mysqldump в текстовый файл, который потом будем использовать для восстановления. Рассмотрим и этот процесс – воссоздание базы из резервной копии.

Для восстановления будем пользоваться стандартной программой mysql, которая входит в комплект поставки MySQL наряду с mysqldump. Допустим, у нас имеется backup в файле dump.txt. Нам нужно восстановить его в рабочую базу. Например, мы случайно удалили нашу базу данных, а теперь пытаемся исправить эту незадачу. Делаем так :

> mysql -uLOGIN -PPORT -hHOST -pPASS DBNAME < dump.txt

То есть, заставляем mysql-клиент соединиться с сервером и выполнить сценарий, который у нас имеется. После выполнения этой команды в Вашей базе появятся таблицы и данные из резервной копии. Учитывайте то, что данные будут просто восстанавливаться по сценарию из dump.txt. То есть, если таблицы, которые упоминаются в дампе базы, уже существуют и имеют другую структуру, тут явно возникнет ошибка. Просто посмотрите на сценарий и на рабочую базу и представьте, что Вы вручную выполняете команды из сценария. Если уверены, что все будет хорошо – смело восстанавливайте.

Рассмотрим более тонкие настройки 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 имеет и еще некоторое количество очень полезных возможностей, которые Вы можете применять по обстоятельствам. Полная документация по mysqldump доступна на странице http://www.mysql.com/doc/m/y/mysqldump.html.

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

Автоматизация резервного копирования

Теперь подумаем, как бы нам автоматизировать процесс создания резервных копий базы данных. Итак, существует программа – cron. Она позволяет запускать процессы в указанное пользователем время или с определенной периодичностью. Сразу оговоримся – cron в общем случае существует только под Unix, так что, если Вы используете для хостинга ОС Windows, проконсультируйтесь со своим хостинг-провайдером о том, как лучше запускать процессы в нужное время. Да и вообще, пожалуй, этот пункт будет интересен только unix-пользователям.

В unix shell запускаем crontab -e и создаем такое правило запуска процесса создания копий базы:

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

Эта команда, запускаясь из cron в полночь (00:00) каждых суток, делает дамп Вашей базы DBNAME и архивирует его архиватором gzip в файл-архив с именем, соответствующим текущей дате. Например, если мы делаем dump 3 января 2002 года, имя файла с архивом будет 2002-01-03.gz. Для того, чтобы получить файлы, по именам которых можно удобно узнать дату их создания, мы используем команду date, которая является стандартной для всех unix-систем. Эта команда позволяет задавать произвольный формат вывода даты, что мы и использовали – date «+%Y-%m-%d». Мы поместили эту команду в обратные одинарные кавычки (backticks), что в unix shell заставляет вставить в команду (утрируя) результат выполнения другой команды.

Сохраняем правило для cron и ждем результатов. Итак, каждый день мы будем иметь на диске заархивированную копию нашей базы данных. Можно быстро найти нужный архив по его названию и восстановить то, что испортилось, например. Кстати, если Вы хотите автоматизировать удаление старых архивов, попробуйте воспользоваться cron и командой find, которая обычно есть в unix. Запуская периодически find ~/каталог-с-архивами -name «*.gz» -mtime +7, Вы будете удалять архивы, которые «старше» семи дней. Прочитайте документацию по find – она доступна по команде man find в unix shell.

Если у Вас есть машина, постоянно подключенная к интернет, можно так же по cron копировать созданный Вами backup на нее. Конечно, провайдерская хостинг-машина – это очень надежная штука. Однако, как говорится, «береженого Бог бережет». Старая как мир истина в определенных условиях может и Вам помочь. Используйте для копирования на другую машину команды ftp и scp. Добавьте их запуск в cron. Если Ваша машина поддерживает соединение по протоколу ssh, используйте secure copy клиент для копирования файлов – scp. Читайте документацию по этой команде в man-странице man scp. Примерный запуск: scp 2002-01-03.gz login@your.host.ru: – закачиваем файл 2002-01-03.gz на машину your.host.ru авторизовавшись там под логином login.

Скрипт mysqlhotcopy, написанный на языке Perl, поможет Вам упростить создание копий баз данных и отдельных таблиц. Использование этого скрипта позволяет производить резервное копирование еще более гибко.

Поделиться в соц. сетях

mailru Резервное копирование баз MySQL
facebook Резервное копирование баз MySQL
odnoklassniki Резервное копирование баз MySQL
livejournal Резервное копирование баз MySQL
googlebuzz Резервное копирование баз MySQL

Также рекомендуем:

  1. Построение дерева иерархии с помощью PHP / MySQL Рассмотрим пример построения дерева иерархии (в развернутом виде) на основе информации из базы данных с помощью PHP и MySQL. Ключ к решению данной задачи – использование рекурсивной функции. Иерархия разделов будет храниться в таблице базы данных MySQL. . Ниже на скриншоте показана данная таблица (catalogue): id – первичный ключ таблицы pid – id родительского раздела [...]...
  2. Переполнение буфера и раскрытие данных в MySQL Программа: MySQL 4.1.18, и более ранние версии.MySQL 5.0.20 . Опасность: Средняя Наличие эксплоита: Да Описание: Уязвимость позволяет удаленному авторизованному пользователю получить доступ к важным данным и скомпрометировать уязвимую систему. 1. Уязвимость существует из-за недостаточной обработки данных в команде COM_TABLE_DUMP. Удаленный пользователь может с помощью специально сформированного пакета получить доступ к важным данным на системе (к [...]...
  3. Вышел MySQL 5.1.30, первый стабильный релиз серии 5.1 После публикации 29 тестовых версий анонсирован первый стабильный релиз MySQL 5.1, пригодный для промышленной эксплуатации и обеспечивающий увеличение производительности для «тяжелых» SQL запросов, по сравнению с MySQL 5.0, примерно на 15-20%. Главные новшества появившиеся в MySQL 5.1: . Сегментирование – возможность разбить одну большую таблицу на несколько частей, размещенных в разных файловых системах, основываясь на [...]...
  4. Сравнение хранилищ данных для MySQL с поддержкой транзакций В 48-страничной презентации «Landscape of Transactional Storage Engines» представлены результаты исследования производительности доступных для MySQL хранилищ данных, имеющих поддержку транзакций. Раскрыты особенности работы и устройство Innodb, Falcon, PBXT и SolidDB....
  5. Оптимальное использование MySQL Введение В процессе предоставления услуг хостинга мы обращаем внимание на наиболее часто встречающиеся ошибки, которые совершают пользователи при разработке своих виртуальных серверов. Одним из «тяжелых» мест для типичного веб-мастера является работа с MySQL-сервером. Обычно изучение принципов функционирования SQL и методов работы с базами данных ведется по литературе, из которой выбираются только актуальные на момент чтения [...]...
  6. MySQL – это просто! Сначала ответим на вопрос – что такое MySQL? Это База Данных (БД), в которой структурировано хранятся данные. Следует второй вопрос – зачем отказываться от простых и удобных файлов к сложной БД? Потому что файлы, генерируемые каким либо скриптом на основе файловой БД (гостевые книги, CMS, форумы), постепенно начинают увеличиваться в размере, а так же их [...]...
  7. Проверка хостинг провайдера Начнем с того, что обязательно должно быть учтено при составлении хостинг пакета (с учетом интереса клиента) или, проще говоря, что обязательно включено в каждом действительно качественном хостинг провайдере:. Технические характеристики сервера и его канал подключения должны соответствовать реальности. Обязательно указывать количество и тип проектов, размещенных на одном сервере, поскольку тогда будет приблизительно видно клиенту его [...]...
  8. Обзор платных хостингов Для начала разберёмся, что такое хостинг. Хостинг – это услуги размещение Вашего сайта в интернете. В 2002 году появилось очень много новых компаний предоставляющие хостинг. Так вот, в этой статье я опишу подробно новые и старые хостинги.. 100GIG (http://www.100gig.com/) Русский хостинг, на котором нужно платить только за трафик, 1000 MB. Трафика стоит 1$. На каждый [...]...
  9. Выход phpMyAdmin 2.11.0 Вышел phpMyAdmin 2.11, который, вероятно, будет последней серией поддерживающей PHP 4. Данная версия отличается поддержкой представлиений (VIEW) созданных запросом, управлением триггеров, процедур и функций. Также добавлена функция профилирования запросов, поддерживаемая MySQL 5.0.37, и улучшена интерфейсная часть позволяющая работать с серверами поддерживающими тысячи баз данных и таблиц....
  10. Для тех, кто хочет больше,чем HTML Для тех, кто хочет самостоятельно научиться локально делать сайты, программировать, используя языки: php, sgi, да еще с поддержкой базы данных (mysql). Все это Вы сможете, если установите локальный сервер на своим компъютере. . В этой статье я не даю подробных инструкций и комментариев, так как это получится целый талмуд. Я сам не супер-мупер пользователь, да [...]...
  11. Один из вариантов соглашения об именах объектов MS SQL Server Помните, что имена объектов sql сервера не могут превышать 30 символов. Не используйте зарезервированные слова, специальные символы, и не начинайте имена объектов с цифры. Избегайте использование сокращений.. database devices: устройства базы данных должны называться по задаче и цели, которую они решают. Если это – log device, суффикс «log» должен добавляться в конец имени. Имя устройства [...]...
  12. Работа с SQLite Введение SQLite – это реляционная база данных, запросы к которой можно осуществлять при помощи языка запросов SQL. База данных не поддерживает все особенности SQL и уступает в функциональности другим развитым СУБД, но вполне подходит для хранения и извлечения информации.. Отличие SQLite от MySQL и аналогичных СУБД Классические СУБД, такие как MySQL (а так же MS [...]...
  13. Некоторые критерии выбора хостинга Какие вещи вы должны знать при выборе веб-хостинга? Критерии для выбора веб-различного хостинга несколько отличаются. Будем рассматривать каждый из них в отдельности.. Надежность и скорость доступа Это чрезвычайно важно. Сайт, у которого нет доступа потеряет много посетителей. Если кто-то читает ваш сайт в поисковой системе и он стремится попасть на него, но это будет не [...]...
  14. Раскрутился, жди проблем! Выбор хостинга и решение проблем Теперь я постараюсь объяснить ещё одну важную проблему которая может вас затронуть в самый неподходящий момент, когда вы будете на пике раскрутки и славы Если конечно это случится…. Хостингов в России и за рубежом привеликое множество, и как правило они все отличаются только ценой и возможностями. На сегодняшний день уже [...]...
  15. Раскрутился, жди проблем! Выбор хостинга и решение проблем Теперь я постараюсь объяснить ещё одну важную проблему которая может вас затронуть в самый неподходящий момент, когда вы будете на пике раскрутки и славы Если конечно это случится…. Хостингов в России и за рубежом привеликое множество, и как правило они все отличаются только ценой и возможностями. На сегодняшний день уже [...]...

Комментарии запрещены.