URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 79909
[ Назад ]

Исходное сообщение
"Резервная копия сайта"

Отправлено Wave_is , 21-Апр-08 00:57 
Перевел сайт с Винды на ФРИБСД
на винде имел привычку раз в неделю ночью делать резервную копию сайта
резервация делалась элементарно при помощи Планировщика задач и батника:
"Z:\Stop.exe
ping 127.0.0.1 -n 5
"C:\Program Files (x86)\winrar\rar.exe" a -m1 -rr "c:\зte%.rar" "C:\Topserver"
Z:\Run.exe
copy "c:\зte%.rar" D:\WEB_Rescue\
del c:\зte%.rar -p"

стоплю апач и mysql
делаю задержку на закрытие задач
даю команду на архивирование веб сервера и базы данных (название архива соответствует дате)
копирую архив в специальную папку,
зачищаю временные файлы

-----------------------------
как наварнякать что-нибуть подобное для Фри?
или может у Гуру есть лучшие методы резервирования, все таки ось не мастдай?


Содержание

Сообщения в этом обсуждении
"Резервная копия сайта"
Отправлено konst , 21-Апр-08 01:21 
>[оверквотинг удален]
>делаю задержку на закрытие задач
>даю команду на архивирование веб сервера и базы данных (название архива соответствует
>дате)
>копирую архив в специальную папку,
>зачищаю временные файлы
>
>-----------------------------
>как наварнякать что-нибуть подобное для Фри?
>или может у Гуру есть лучшие методы резервирования, все таки ось не
>мастдай?

1. crontab
2. mysqldump



"Резервная копия сайта"
Отправлено vg , 21-Апр-08 10:41 
>
>1. crontab
>2. mysqldump

+ rsync, tar, gzip (bzip2)

А зачем сервисы останавливать?



"Резервная копия сайта"
Отправлено angra , 21-Апр-08 13:07 
Если не ошибаюсь, для freebsd есть снапшоты, поищи в хендбуке.
Ну а если традиционно, то вместо остановки мускула отдаем запрос flush tables with read lock, копируем при помощи rsync(если нужна всего одна копия) или tar(если нужны копии по датам) и отдаем запрос unlock tables. Если делается копия только сайта, а не БД, то никаких операций с мускулом не нужно, апач в любом случае останавливать не надо.

"Резервная копия сайта"
Отправлено rayne , 21-Апр-08 13:14 
Импорт/экспорт данных из MySQL

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

Для того, чтобы создать дамп базы, можно использовать такую команду:

mysqldump -u<логин1> -p -h<хост1> -P<порт1> <база1> > database.sql

После выполнения этой команды в файле database.sql и будет дамп базы данных. Этот файл Вы можете копировать и переносить на другие серверы, где восстановить структуру и содержание базы.

Восстановить базу из дампа можно вот так:

mysql -u<логин2> -p -h<хост2> -P<порт2> <база2> < database.sql


© host.ru


"Резервная копия сайта"
Отправлено angra , 21-Апр-08 14:00 
Это лишь один из способов, причем самый медленный.

"Резервная копия сайта"
Отправлено Wave_is , 21-Апр-08 15:33 
>[оверквотинг удален]
>После выполнения этой команды в файле database.sql и будет дамп базы данных.
>Этот файл Вы можете копировать и переносить на другие серверы, где
>восстановить структуру и содержание базы.
>
>Восстановить базу из дампа можно вот так:
>
>mysql -u<логин2> -p -h<хост2> -P<порт2> <база2> < database.sql
>
>
>© host.ru

автоматизировать этот процесс можно?
пароль к базе в строке же не задаеться, видать, система попросит его ввести вручную?


"Резервная копия сайта"
Отправлено rayne , 21-Апр-08 15:44 
>автоматизировать этот процесс можно?
>пароль к базе в строке же не задаеться, видать, система попросит его
>ввести вручную?

Нужно маны посмотреть. Наверняка можно с каким нибуть ключем и пароль вписать
или сохранить его в конфиге или авторизовывться через login:pass@host ...


"Резервная копия сайта"
Отправлено angra , 21-Апр-08 19:37 
Можно и в строке указать.
Вот только подумайте нужен ли вам именно sql дамп или все таки копия бинарных файлов. Последнее получается в разы быстрее, но если используется Innodb, то восстанавливать можно будет только целиком, а не по-таблично.

"Резервная копия сайта"
Отправлено rayne , 22-Апр-08 07:17 
>Можно и в строке указать.
>Вот только подумайте нужен ли вам именно sql дамп или все таки
>копия бинарных файлов.

из бинарных файлов можно както восстановить базу данных сайта ?


"Резервная копия сайта"
Отправлено angra , 22-Апр-08 17:05 
Естественно. Никакой особой магии в хранении данных в мускуле на MyISAM таблицах нет. Для каждой базы создается отдельный каталог, для каждой таблицы в этой базе три файла:
имя_таблицы.FRM - это описание структуры таблицы
имя_таблицы.MYD - это собственно данные
имя_таблицы.MYI - это индексы, потеря данного файла не так критична как двух других, так как индексы можно перестроить.
Соответственно если нужно восстановить какую либо таблицу просто перезаписываем соответствующие ей три файлы из бэкапа. Если базу целиком, то копируем всю папку. При желании можно вообще таблицу из одной базы перенести в другую простым копированием файлов.
Для InnoDB это однако не работает, там все данные из всех таблиц хранятся в одном файле(при желании его можно разбить на несколько, но сути это не меняет). Так что восстановление этого файла означает откат всех InnoDB таблиц во всех базах.

Не забывайте что бинарные данные можно копировать только после FLUSH TABLES WITH READ LOCK ну или останова сервера, без этого высокий шанс получить некорректную копию. Также для ускорения копирования можно задуматься об использовании снапшотов LVM, в таком случае время простоя даже очень большой базы минимально.


"Резервная копия сайта"
Отправлено Gennadi , 22-Апр-08 18:09 

Автоматизировать?...

===================================================================
#!/bin/bash
#
DATE=`date +.%m.%d.%H`
BACKUP_DIR='/media/backup'
HOST=`hostname`
ADMIN="root"
PASWSWORD="my_password"
DATABASES="mysql nuke bb"
OPTION="--single-transaction --databases $DATABASES"
#OPTION="--all-databases"

mkdir -p ${BACKUP_DIR}/mysql
mysqldump -R -q $OPTION -p$PASWSWORD > ${BACKUP_DIR}/mysql/$HOST$DATE.sql
rm ${BACKUP_DIR}mysql/$HOST$DATE.sql.gz > /dev/null 2>&1
gzip -9 ${BACKUP_DIR}/mysql/$HOST$DATE.sql > /dev/null 2>&1
exit 1
===================================================================