Автор работы: Пользователь скрыл имя, 27 Апреля 2013 в 16:54, творческая работа
Здесь важно заметить, что недостаточно одного лишь резеврного копирования, нужно иногда проверять восстанавливаемость базы данных из резеверной копии, потому что бывают случаи, что база данных работает в режиме 24*7, то есть 24 часа в сутки и 7 дней в неделю, backup базы данных может происходит нормально, но в силу определенных причин база данных не восстанавливается, последствия могут быть плачевными для всех данных.
Резервное копирование данных
Выполнила: Чуева Яна, инф-4.
Резервное копирование – один из самых надежных способов сохранить и предохранить свои данные от потери или порчи.
Процесс резервного копирования также делается в профилактических целях, для увеличения производительности базы данных – это достигается за счет того, что в момент копирования происходит считывание последних версий всех записей, старые же версии в копию никогда не попадают.
Здесь важно заметить, что недостаточно одного лишь резеврного копирования, нужно иногда проверять восстанавливаемость базы данных из резеверной копии, потому что бывают случаи, что база данных работает в режиме 24*7, то есть 24 часа в сутки и 7 дней в неделю, backup базы данных может происходит нормально, но в силу определенных причин база данных не восстанавливается, последствия могут быть плачевными для всех данных.
1. Копирование файлов базы
Базу данных можно скопировать, если временно выключить сервер и просто скопировать файлы из папки/var/lib/mysql/db/. Если сервер не выключить, по очевидным причинам вероятна потеря и порча данных. Для больших нагруженных баз эта вероятность близка к 100%. Кроме того, при первом запуске с «грязной» копией базы данных сервер начнет процесс проверки всей базы, который может затянуться.
Копирование файлов
— самый быстрый способ перебросить базу
данных целиком с одного сервера на другой.
В большинстве «живых» проектов
регулярное выключение сервера БД на
длительное время неприемлемо. Для
решения этой проблемы применяется
трюк, основанный на снэпшотах файловой
системы. Снэпшот — это что-то вроде «фотографии»
файловой системы на определенный момент
времени, сделанный без реального копирования
данных (и потому быстро). Аналогичным
образом работает «ленивое копирование»
объектов во многих современных языках
программирования.
Общая схема действий такова: блокируются
все таблицы, сбрасывается файловый кэш
БД, делается снэпшот файловой системы,
разблокируются таблицы. После этого файлы
спокойно копируются из снэпшота, после
чего он уничтожается. «Блокирующая» часть
такого процесса занимает время порядка
секунд. В качестве расплаты на какое-то
время, пока «жив» снэпшот, снижается производительность
файловых операций, что в первую очередь
бьет по скорости операций записи в базу.
2. Копирование через текстовые файлы
Для того, чтобы считать в бэкап данные из production-базы, необязательно трогать файлы. Можно выбрать данные запросом и сохранить их в текстовый файл. Для этого используется SQL-команда SELECT INTO OUTFILE и парная ей LOAD DATA INFILE. Выгрузка производится построчно (можно отобрать для сохранения только нужные строки, как в обычном SELECT). Структура таблиц нигде не указывается. Включаем команд ы SELECT INTO OUTFILE в транзакцию, если это необходимо для обеспечения целостности данных. На практике SELECT INTO OUTFILE используется для частичного бэкапа очень больших таблиц, которые нельзя скопировать никаким другим образом.
Утилита mysqldump формирует файл, содержащий
все SQL-команды, необходимые для полного
восстановления БД на другом сервере.
Отдельными опциями можно добиться совместимости
этого файла с практически любой СУБД
, кроме того, существует возможность выгрузки
данных в форматах CSV и XML. Для восстановления
данных из таких форматов существует утилита mysqlimport.
Утилита mysqldump консольная. Существуют
её надстройки и аналоги, позволяющие
управлять бэкапом через веб-интерфейс.
Недостатки универсальных
утилит бэкапа в текстовые файлы — это
относительно невысокая скорость работы
и отсутствие возможности делать инкрементные
бэкапы.
3. Инкрементные бэкапы
Традиционно рекомендуют
держать 10 бэкапов: по одному на каждый
день недели, а также бэкапы двухнедельной,
месячной и квартальной давности — это
позволит достаточно глубоко откатиться
в случае порчи каких-либо данных.
Храниться бэкапы должны точно не на том
же диске, что и живая база, и не на том
же сервере.
Эти требования могут стать проблемой
для больших баз. Прокачка бэкапа 100-гигабайтной
базы по 100-мбитной сети займет часа три,
на которые полностью забьет канал.
Частично решить эту проблему позволяют
инкрементные бэкапы, когда полный бэкап
делается, скажем, только по воскресеньям,
а в остальные дни пишутся только данные,
добавленные или измененные за прошедшие
сутки. Сложность в том, как выявить эти
самые «данные, изменившиеся за сутки».
Общая проблема с любыми бэкапами в том, что они всегда отстают. В случае фатального сбоя основного сервера восстановить систему можно будет только с некоторым «откатом» по времени, что очень и очень разочарует её пользователей. Если в системе так или иначе были затронуты финансовые потоки, подобный «откат» может в прямом смысле влететь в копеечку.
4. Репликация
Репликация (от лат. replico -повторяю) — это
тиражирование изменений данных с главного
сервера БД на одном или нескольких зависимых
серверах. Главный сервер будем называть мастером, а зависимые — репликами.
Изменения данных, происходящие на мастере,
повторяются на репликах (но не наоборот).
Поэтому запросы на изменение данных (INSERT,
UPDATE, DELETE и т. д.) выполняются только на
мастере, а запросы на чтение данных (проще
говоря, SELECT) могут выполняться как на
репликах, так и на мастере. Процесс репликации
на одной из реплик не влияет на работу
других реплик, и практически не влияет
на работу мастера.
Репликация производится при помощи бинарных логов, ведущихся на мастере. В
них сохраняются все запросы, приводящие
(или потенциально приводящие) к изменениям
в БД (запросы сохраняются не в явном виде,
поэтому если захочется их посмотреть,
придется воспользоваться утилитой mysqlbinlog). Бинлоги передаются на
реплики (бинлог, скачанный с мастера,
называется "relay binlog ") и сохраненные
запросы выполняются, начиная с определенной
позиции. Важно понимать, что при репликации
передаются не сами измененные данные,
а только запросы, вызывающие изменения.
При репликации
содержимое БД дублируется на нескольких
серверах. Зачем необходимо прибегать
к дублированию? Есть несколько причин:
производительность
и масштабируемость. Один сервер может не справляться с
нагрузкой, вызываемой одновременными
операциями чтения и записи в БД. Выгода
от создания реплик будет тем больше, чем
больше операций чтения приходится на
одну операцию записи в вашей системе.
отказоустойчивость. В случае отказа реплики, все запросы чтения можно безопасно перевести на мастера. Если откажет мастер, запросы записи можно перевести на реплику (после того, как мастер будет восстановлен, он может принять на себя роль реплики).
резервирование данных. Реплику можно «тормознуть » на время, чтобы выполнить mysqldump, а мастер — нет.
отложенные вычисления. Тяжелые и медленные SQL-запросы можно выполнять на отдельной реплике, не боясь помешать нормальной работе всей системы.
Восстановление баз данных
Восстановление базы данных — это функция СУБД, которая в случае логических и физических сбоев приводит базу данных в актуальное и консистентное состояние.
В случае логического отказа или сигнала отката одной транзакции журнал изменений сканируется в обратном направлении, и все записи отменяемой транзакции извлекаются из журнала вплоть до отметки начала транзакции. Согласно извлеченной информации выполняются действия, отменяющие действия транзакции. Этот процесс называется откат (rollback).
В случае физического отказа, если ни журнал изменений, ни сама база данных не повреждены, то выполняется процесс прогонки (rollforward). Журнал сканируется в прямом направлении, начиная от предыдущей контрольной точки. Все записи извлекаются из журнала вплоть до конца журнала. Извлеченная из журнала информация вносится в блоки данных внешней памяти, у которых отметка номера изменений меньше, чем записанная в журнале. Если в процессе прогонки снова возникает сбой, то сканирование журнала вновь начнется сначала, но восстановление фактически продолжится с той точки, где оно прервалось.
В случае физического отказа, если журнал изменений доступен, но сама база данных повреждена, то должен быть выполнен процесс восстановления базы из резервной копии. После восстановления база будет находиться в состоянии на момент выполнения резервной копии. Для восстановления базы данных на момент отказа необходимо выполнить прогонку всех изменений, используя журнал изменений.
В случае физического отказа, если журнал изменений недоступен, но сама база данных не повреждена, восстановление возможно только на момент предыдущей контрольной точки.
В случае физического отказа, если повреждены как журнал изменений, так и сама база данных, то восстановление возможно только на момент выполнения резервной копии.