«все люди делятся на две категории — одни делают бэкапы, другие будут их делать».
Как бэкапить БД, которая находится внутри виртуальной машины. И так чтобы все было по-хорошему? Особенно, если это файрберд виндовый а хостовая машина с Линухом.
Запустить скрипт в винде торкая его из-под линухи конечно возможно, только вот нахрен надо так мучаться?
пусть внутри винды гоняет а сам бэкап вываливает наружу
в общем-то все у нас для этого есть. Можно использовать «общие папки», можно сетевую папку — по-любому работает.
пишем скрипт на виндовозовском языке
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%
результат — получили обновляемый ежедневно бэкап на внешнем сетевом диске