Для того чтобы резервная копия была согласованной, необходимо выполнить для выбранных таблиц команду LOCK TABLES, а затем FLUSH TABLES.

Команда LOCK TABLES блокирует указанные в ней таблицы для данного потока. Команда UNLOCK TABLES снимает любые блокировки, удерживаемые данным потоком. Все таблицы, заблокированные текущим потоком, автоматически разблокируются при появлении в потоке иной команды LOCK TABLES или при прекращении соединения с сервером.
Команда FLUSH TABLE обеспечивает гарантию того, что все активные индексные страницы будут записаны на диск прежде, чем начнется резервное копирование. Команда FLUSH применяется для очистки части кэша, используемого MySQL. Для запуска FLUSH необходимо обладать привилегиями RELOAD.

 

Для того чтобы провести резервное копирование на уровне SQL, следует воспользоваться командами SELECT INTO OUTFILE или BACKUP TABLE. SELECT применяется для извлечения строк, выбранных из одной или нескольких таблиц.
BACKUP TABLE копирует в каталог резервного копирования тот минимум табличных файлов, который достаточен для восстановления таблицы после сброса на диск всех изменений. На данный момент работает только для таблиц MyISAM. Для таблиц MyISAM копирует файлы .frm (определений) и .MYD (данных). Индексные файлы могут быть реконструированы по этим двум.
Существует еще один способ создать резервную копию базы данных - использовать программу mysqldump или сценарий mysqlhotcopy.
mysqldump позволяет получить дамп содержимого базы данных или совокупности баз для создания резервной копии или пересылки данных на другой SQL-сервер баз данных. Дамп будет содержать набор команд SQL для создания и/или заполнения таблиц.
Утилита mysqlhotcopy представляет собой Perl-сценарий, использующий SQL-команды LOCK TABLES, FLUSH TABLES и Unix-утилиты cp или scp для быстрого получения резервной копии базы данных. Пожалуй, это наиболее быстрый способ копирования баз данных или таблиц, но он может работать только на том же компьютере, где расположены каталоги копируемой базы данных.

 

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

 

shell> mysqldump --tab=/path/to/some/dir --opt --all

либо

 

shell> mysqlhotcopy database /path/to/some/dir

Также можно скопировать табличные файлы (файлы *.frm, *.MYD и *.MYI) в тот момент, когда сервер не проводит никаких обновлений. Этот метод используется в сценарии mysqlhotcopy.

 

Если mysqld выполняется, необходимо остановить его, а затем запустить с опцией --log-update[=file_name]. В файлах журнала обновлений находится информация, необходимая для того, чтобы повторить в базе данных последовательность изменений, внесенных с момента выполнения mysqldump.

 

Чтобы восстановить данные, сначала нужно попытаться восстановить таблицы с помощью REPAIR TABLE или myisamchk -r. В том случае если myisamchk не даст результата, попробуйте применить следующую процедуру:
Восстановите исходный вариант по копии, сделанной в mysqldump.
Выполните следующую команду, чтобы повторить обновления из бинарного журнала:

 

shell> mysqlbinlog hostname-bin.[0-9]* | mysql

Если используется журнал обновлений, то можно применить:

 

shell> ls -1 -t -r hostname.[0-9]* | xargs cat | mysql

ls используется для того, чтобы расположить все файлы журнала обновлений в правильном порядке.

 

Также допустимо проводить избирательное резервное копирование посредством SELECT * INTO OUTFILE 'file_name' FROM tbl_name, а восстановление - при помощи LOAD DATA INFILE 'file_name' REPLACE ... Чтобы избежать повторения записей, в таблице должен быть первичный или уникальный ключ. Ключевое слово REPLACE задает замену старых записей новыми в случае, когда новая запись в значении уникального ключа повторяет старую.

Tags: ,
Share  

Оставить комментарий