zametki

В социальном аспекте:

Лисья Нора » Notes » Technology » Code » Резервное копировани с помощью .bat файла

Резервное копировани с помощью .bat файла

9 сентября 2007


Надевно у меня появилась необходимость иметь резервную копию одной базы данных за последние несколько дней. Одним из условий было реализовать это всё без использования сторонних или самописных программ. После недолгих размышлений было решено реализовать это с помощью стандартный dos-овских команд описанных в .bat файле. Те, кто умеет писать BAT файлы, могу дальше не читать в принципе. Для остальных поясню, что все строчки начинабщиеся с rem являются комментариями, следовательно они не выполняются и вы можете копировать код целиком.


Алгоритм очень простой. У нас есть две папки archive_new, где хранится архив за вчера и archive_old, где хранится архив за позавчера. Таким образом получаем следующее:


rem Удаляем папку archive_old
rmdir /s /q \\server\archive\archive_old
rem Переименовываем папку archive_new в archive_old
ren \\server\archive\archive_new archive_old
rem Создаём директорию archive_new
mkdir \\server\archive\archive_new
rem Копируем файлы с базой данных в папку archive_new
copy /y *.base \\server\archive\archive_new


Всё. При таком алгоритме, выполняющемся раз в день мы будем иметь две резервных копии за вчера и позавчера.


Этот простейший алгоритм идеально подходит, когда нужно просто копировать файлы в другое место. У него есть два минуса. Во-первых базы могут быть большими. Во-вторых тут прописаны абсолютные пути и при изменении настроек или структуры сервера, прийдётся исправлять в файле все пути. Два этих минуса легко решаются путём архивирования баз данных и задания переменных, для относительных пйтей.


rem Объявляем переменные для названия архива и пути архивной папки на сервере
rem Вместо названия архива будет использована текущая дата
SET archive_name=%date%.rar
SET server_dir=\\server\archive\
rem Удаляем папку archive_old
rmdir /s /q %server_dir%\archive_old
rem Переименовываем папку archive_new в archive_old
ren %server_dir%\archive_new archive_old
rem Создаём директорию archive_new
mkdir %server_dir%\archive_new
rem Архивируем все файлы кроме *.exe и *.bat
rar a -r -m5 -x*.bat -x*.exe %archive_name%
rem Копируем архив с базой данных в папку archive_new
copy /y %archive_name% %server_dir%\archive_new\
rem Перемещаем архив
move %archive_name% %serev_dir%\archive_new\


NB: Для того, что бы работала строчка с архивированием, вам понадобиться файл "rar.exe" из стандартной поставки WinRar'а.


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


rem Объявляем переменные для названия архива и пути архивной папки на сервере
SET archive_name=%date%.rar
SET server_dir=\\server\archive\
SET temp_dir=\\temp\
rem Удаляем папку archive_old
rmdir /s /q %server_dir%\archive_old
rem Переименовываем папку archive_new в archive_old
ren %server_dir%\archive_new archive_old
rem Создаём директорию archive_new
mkdir %server_dir%\archive_new
rem Копируем файлы с базой данных в папку temp
copy /y *.base %temp_dir%
rem Архивируем все файлы в папке temp, кроме *.exe и *.bat
rar a -r -m5 -ep1 -x*.bat -x*.exe %archive_name% %temp_dir%
rem Перемещаем архив в папку archive_new
move %archive_name% %server_dir%\archive_new\
rem Очищаем содержимое папки temp
del /q %temp_dir%*.*


Вот в общем то и всё. Теперь только осталось сделать расписание для выполнение этого .BAT файла и можно не беспокоиться о сохранности базы данных.


P.S. Для тех кто хочется поизвращаться, большинство описанных здесь вещей можно сделать через ключи в RAR'е.


Комментарии

Nov 30th 2007, by Guest
Все гениальное просто!!! Сенкс!

Feb 28th 2008, by Guest
Зачет ;) Спасиб

Feb 28th 2008, by Lis
Хорошо, если пригодилось:)
--

Jul 24th 2008, by Guest
Это все понятно тут у меня проблем не было ! Просто один мой отдел попросил файлы копируемые в рез папку еще и переименововать по дате и часу ! Как реализовать батьничком не знаю.

Jul 24th 2008, by Lisovsky
Батничком по часу. Это замороченно довольно таки. Есть реализация такой вещи на VB, что тоже на большинстве машин будет работать. Если очень нужно - стукнись в аську, она есть в контактах.
--

Mar 24th 2009, by Guest
спасибо

Добавить комментарий


Введите код с изображения

Visual CAPTCHA


Меню "Заметок":

Вместо кофе:

Текущие проекты:

Статистика:

  • Слов: 438
  • Просмотров: 4864

Что дальше?

Золотые руки:

Содержание: Хитрый Лис
Оформление: Странный Чегр