Статья: "Резервное копирование баз данных"

Автор: Гость

Поскольку таблицы MySQL хранятся в виде файлов, то резервное копирование выполняется легко. Чтобы резервная копия была согласованной, выполните на выбранных таблицах LOCK TABLES, а затем FLUSH TABLES для этих таблиц. При этом требуется блокировка только на чтение; поэтому другие потоки смогут продолжать запросы на таблицах в то время, пока будут создаваться копии файлов из каталога базы данных. Команда FLUSH TABLE обеспечивает гарантию того, что все активные индексные страницы будут записаны на диск прежде, чем начнется резервное копирование.

Если есть необходимость провести резервное копирование на уровне SQL, то можно воспользоваться SELECT INTO OUTFILE или BACKUP TABLE.

Существует еще один способ создать резервную копию базы данных - использовать программу MYSQLDUMP или сценарий MYSQLHOSTCOPY. Для этого нужно выполнить следующие действия:

 

1. Сделать полное резервное копирование баз данных:

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

или

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

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


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

Если дело дошло до восстановления, сначала надо попробовать восстановить таблицы с помощью REPAIR TABLE или myisamchk -r - это должно сработать в 99,9% случаев. Если myisamchk не даст результата, попробуйте применить следующую процедуру (эти действия применимы только в случае, если MySQL запускался с --log-update (see section 4.9.3 Журнал обновлений (update))):

1. Восстановите исходный вариант по копии, сделанной в mysqldump.
2. Выполните следующую команду, чтобы повторить обновления из бинарного журнала:

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 задает замену старых записей новыми в случае, когда новая запись в значении уникального ключа повторяет старую.

Если в системе, где выполняется резервное копирование, возникают проблемы с производительностью, то решить их можно, установив репликацию и выполняя резервное копирование на подчиненном сервере вместо головного (see section 4.10.1 Введение).

Пользователи файловой системы Veritas могут поступить следующим образом:

1. Из клиента (или Perl) выполнить: FLUSH TABLES WITH READ LOCK.
2. Из другого shell выполнить: mount vxfs snapshot.
3. Из первого клиента выполнить: UNLOCK TABLES.
4. Скопировать файлы из образа.
5. Демонтировать образ.

Импорт данных можно также проводить несколькими способами:

1. Используя утилиту mysqlimport

2. Использовать оператор LOAD DATA INFILE

2. mysql -uимя_пользователя -p имя_базы < dump.sql
При указанном использовании утилиты будут запрашивать пароль указанного в командах пользователя базы данных.

3. Использовать другие скрипты, например популярный и много функциональный phpmyadmin или менее известный Sypex Dumper Lit, созданный специально для этих целей.

4. Использовать программы управления базами данны, например, MySQL-Front

 


Коментарии [1]:

Алекс Доа00:27:47 22.12.2008 

Я импорт делаю так:

Создаю dat файл, например restore.bat, в него пишу команду:

mysql -u логин_пользователя -p -D имя_базы<backup.sql

В папку с бинарным  mysql.exe ложу этих два файла (backup.sql и restore.bat), просто запускаю restore.bat файл.

Пробовал проводить импорт через команду:

DATA LOCAL INFILE "backup.sql" -  mysql завершает работу с ошибкой, не пойму ч то не так .., а вот первый вариант работает классно. Да, а по поводу импорта спомощью phpmyamin или mysql-front -  то они годятся только для не больших БД, я бы даже сказал крохотных, проблемы возникают (тупеж, вываливание с ошибкой, привышение  допустимого времени выполнения скрипта) начинается даже с 2 мб базами.


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

Введите код:
Сохранить