Бэкап базы данных firebird

«все люди делятся на две категории — одни делают бэкапы, другие будут их делать».

Как бэкапить БД, которая находится внутри виртуальной машины. И так чтобы все было по-хорошему? Особенно, если это файрберд виндовый а хостовая машина с Линухом.

Запустить скрипт в винде торкая его из-под линухи конечно возможно, только вот нахрен надо так мучаться?

пусть внутри винды гоняет а сам бэкап вываливает наружу

в общем-то все у нас для этого есть. Можно использовать «общие папки», можно сетевую папку — по-любому работает.

пишем скрипт на виндовозовском языке

rem ======================================================
rem РАБОТАТ
rem скрипт бекапа базы данных FIREBIRD
rem помимо файрбердовского комплекта нужно установить 7z
rem ======================================================

rem стартовые настройки

echo on
chcp 1251

set GDB="C:\DATA\base.gdb"
set HOST=192.168.1.1

set BACKUP_DIR=\\Network_folder\backup
set backupflash=%BACKUP_DIR%flash
set arcName=archiv

set FB_DIR=C:\Program Files\Firebird_2_5
set UID=sysdba
set PWD=masterkey

rem временная директория должна быть локальной
rem и должна существовать до запуска скрипта
set TMP=C:\tmp\tmp.gdb
set GBK=C:\tmp\tmp.gbk

set GDB_CONNECT=%HOST%:%GDB%
set TMP_CONNECT=%HOST%:%TMP%

set GFIX="%FB_DIR%\bin\gfix.exe"
set GBAK="%FB_DIR%\bin\gbak.exe"
set INSTSVC="%FB_DIR%\bin\instsvc.exe"

set BACKUP_LOG="%BACKUP_DIR%backup.log"

set arcCmd=7z a -tzip -p%PWD%

set ERR=ok

rem --------------------------------------------------------
rem сборка мусора по базе

%GFIX% -sweep -user %UID% -password %PWD% %GDB_CONNECT%

rem --------------------------------------------------------



rem Перевод основной базы в режим оффлайн.
%GFIX% -shut -force 0 -user %UID% -password %PWD% %GDB_CONNECT%
if errorlevel 1 goto err_shut


rem Перевод основной базы в режим онлайн
%GFIX% -online -user %UID% -password %PWD% %GDB_CONNECT%
if errorlevel 1 goto err_online


rem Остановка сервера БД:
%INSTSVC% stop


rem скопировать файл настроек пользователей
rem файл теперь назвается security2.fdb

if not exist "%backupflash%" md "%backupflash%"
copy "%FB_DIR%\security2.fdb" "%backupflash%"


rem переделываем папки с бэкапами

if not exist "%BACKUP_DIR%1" md "%BACKUP_DIR%1"
del "%BACKUP_DIR%1"\*.* /q

rem архивирование БД
%arcCmd% %BACKUP_DIR%1\%arcName% %GDB%


IF ERRORLEVEL 1 GOTO endArc

IF EXIST %BACKUP_DIR%4 rd %BACKUP_DIR%4 /s /q

IF EXIST %BACKUP_DIR%2 ren %BACKUP_DIR%3 4

IF EXIST %BACKUP_DIR%2 ren %BACKUP_DIR%2 3

IF EXIST %BACKUP_DIR%1 ren %BACKUP_DIR%1 2

copy "%BACKUP_DIR%2\*.*" "%backupflash%"

:endArc

rem !! Пуск Сервера:
%INSTSVC% start



rem перевод основной базы в режим оффлайн

%GFIX% -shut -force 0 -user %UID% -password %PWD% %GDB_CONNECT%
if errorlevel 1 goto err_shut


rem Архивация Базы данных посредством gbak

%GBAK% -b -user %UID% -password %PWD% -v -g %GDB_CONNECT% %GBK%
if errorlevel 1 goto err_bak



del %tmp%

rem Восстановление Базы данных посредством gbak
%GBAK% -c -user %UID% -password %PWD% %gbk% %TMP_CONNECT%
if errorlevel 1 goto err_rest

REM ---------------------------------------------------------------
REM                               КОПИЯ БАЗЫ
REM ---------------------------------------------------------------

rem перевод копии базы в режим оффлайн
%GFIX% -shut -force 0 -user %UID% -password %PWD% %TMP_CONNECT%
if errorlevel 1 goto err_shut


rem перевод копии базы в режим онлайн
%GFIX% -online -user %UID% -password %PWD% %TMP_CONNECT%
REM if errorlevel 1 goto err_online


rem замена БД файлом, с которым проводили операции по backup/restore
copy %TMP% %GDB%
if errorlevel 1 goto err_copy


goto end

:err_shut
set ERR=database shutdown failed
goto end

:err_bak
set ERR=database backup failed
goto end

:err_rest
set ERR=database restore failed
goto end

:err_copy
set ERR=copy database error
goto end

:err_online
set ERR=оnline database failed
goto end

:end

%INSTSVC% start
%GFIX% -online -user %UID% -password %PWD% %GDB_CONNECT%


if "%ERR%" == "ok" echo BACKUP: Ok >> %BACKUP_LOG%

if not "%ERR%" == "ok" echo ERROR: %ERR% >> %BACKUP_LOG%

date /T >> %BACKUP_LOG%
time /T >> %BACKUP_LOG%

результат — получили обновляемый ежедневно бэкап на внешнем сетевом диске

 

 

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