Automatyczna kopia bazy dla Microsoft SQL Express

backup dla Microsoft SQL Express

Z tego wpisu dowiecie się jak wykonać automatyczną kopię bazy dla Microsoft SQL Express.
Jest to skrypt który można zapisać jako plik z rozszerzeniem .bat. Skonfigurować harmonogram zadań, aby go wykonywał regularnie.
Skrypt ten ustawia ścieżkę folderu, w którym zostanie utworzona kopia zapasowa. Nazwę pliku kopii zapasowej oraz ścieżkę do narzędzia do zarządzania bazą danych SQL Server Express. Następnie łączy się z lokalnym serwerem SQL Express i wykonuje polecenie BACKUP DATABASE. Aby utworzyć kopię zapasową bazy danych i zapisać ją we wskazanym folderze. Na końcu wyświetla informację o zakończeniu kopii zapasowej.
Po prawidłowym wykonaniu backupu wykonuje sekcję usuwającą kopie zapasowe starsze niż np. 7 dni. Do tego celu używa polecenia „FORFILES”, które jest dostępne w systemie Windows.
Jak wykonać kopię SQL Express? Wystarczy poniższy kod zapisać w pliku .bat lub .cmd, podmienić ścieżki oraz nazwę serwera i bazy na swoje.

@echo off
REM Skrypt pochodzi z https://www.robinit.eu/

setlocal

REM Ścieżka do folderu, w którym ma zostać utworzona kopia zapasowa
set BACKUP_DIR=C:\Backup

REM Nazwa pliku kopii zapasowej
set BACKUP_FILE_NAME=sql_backup_%date:~10,4%%date:~7,2%%date:~4,2%_%time:~0,2%%time:~3,2%%time:~6,2%.bak

REM Ścieżka do narzędzia do zarządzania bazą danych SQL Server Express
set SQLCMD_EXE="C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\SQLCMD.exe"

REM Połączenie z lokalnym serwerem SQL Express (zmień "SQLEXPRESS" na odpowiednią nazwę instancji)
set SQL_CONNECTION=-S .\SQLEXPRESS -E

REM Polecenie wykonujące kopię zapasową (zmień "SAGE" na odpowiednią nazwę bazy)
set BACKUP_COMMAND="BACKUP DATABASE SAGE TO DISK='%BACKUP_DIR%\%BACKUP_FILE_NAME%'"

REM Polecenie "forfiles", które usuwa pliki z rozszerzeniem ".bak" z folderu określonego w zmiennej "BACKUP_DIR", które są starsze niż 7 dni. Parametr "/d -7" określa, że pliki starsze niż 7 dni powinny zostać usunięte. 
set DELETE_COMMAND=forfiles /p %BACKUP_DIR% /m *.bak /d -7 /c "cmd /c del @path"

REM Wykonanie kopii zapasowej
%SQLCMD_EXE% %SQL_CONNECTION% -Q %BACKUP_COMMAND%


if %ERRORLEVEL% EQU 0 (
  echo Kopiowanie bazy danych SQL Server Express zakończone.
  %DELETE_COMMAND%
) else (
  echo Błąd wykonania kopii.
)

W przykładowym skrypcie nie ma parametrów do podania hasła. Korzysta z autoryzacji Windows (parametr „-E”), która nie wymaga podawania hasła. Jeśli korzystasz z autoryzacji SQL, musisz dodać parametry do połączenia z bazą danych, takie jak nazwa użytkownika i hasło, do zmiennej SQL_CONNECTION. Na przykład, jeśli używasz autoryzacji SQL z nazwą użytkownika „user” i hasłem „password”, zmodyfikuj zmienną SQL_CONNECTION w ten sposób:

set SQL_CONNECTION=-S .\SQLEXPRESS -U user -P password

W tym przypadku połączenie z serwerem SQL Server Express wymaga podania nazwy użytkownika i hasła. Możesz również użyć zmiennej środowiskowej, aby ukryć hasło i zabezpieczyć skrypt. W tym celu zmodyfikuj zmienną SQL_CONNECTION w ten sposób:

set SQL_CONNECTION=-S .\SQLEXPRESS -U user -P %SQL_PASSWORD%

Następnie ustaw wartość zmiennej środowiskowej SQL_PASSWORD za pomocą polecenia „setx”:

setx SQL_PASSWORD "password" /m
Uwaga: Pamiętaj, że używanie zmiennej środowiskowej z hasłem jest NIEBEZPIECZNE, jeśli skrypt jest udostępniany innym użytkownikom. Upewnij się, że go ODPOWIEDNIO zabezpieczyłeś i jest dostępny tylko dla uprawnionych użytkowników.

Backup na serwerze FTP

Jak utworzyć backup na serwerze FTP

W tym poradniku omówię jak samemu wykonać automatyczny backup na serwerze FTP ważnych danych. Przy pomocy darmowych programów które możemy wykorzystać komercyjnie we własnej firmie.

Prowadząc własną działalność musimy się liczyć z tym że w przypadku, awarii komputera, pożaru lub kradzieży stracimy wszystkie nasze cenne dane. W wyniku tego narażeni jesteśmy na straty, przywracanie danych z dokumentów, poczty itp. Może okazać się bardzo czasochłonne bądź też niemożliwe.
Aby się zabezpieczyć i zminimalizować straty oraz czas potrzebny do odtworzenia utraconych danych. Musimy zabezpieczyć to co dla nas jest ważne.

Możemy to zrobić na kilka sposobów:

  1.  Kopiować dane na dysk zewnętrzny, pamięć flash itp… . Jest uciążliwe, musimy pamiętać o wykonywaniu kopii, najlepiej trzymać dysk w ognioodpornym sejfie albo poza miejscem gdzie znajdują się nasze dane.
  2.  Kopiować dane na kasety. Musimy zakupić nagrywarkę, software do wykonywania backupu i nośniki.
  3. Kopia będzie się wykonywała automatyczne ale musimy pamiętać o zmianie kaset, przy bardziej zaawansowanych systemach kasety mogą być zmieniane automatycznie. Mimo wszystko trzeba je zabezpieczyć przed uszkodzeniem np. w przypadku pożaru, kradzieżą itp…
  4. Utworzyć backup na serwerze FTP poza firmą u dostawcy usług hostingowych.
    Ten właśnie sposób wykonywania kopii zapasowej zostanie omówiony w tym poradniku.

Przyjmijmy założenie że mamy kilka komputerów w firmie. Firma posiada stronę internetową. Jeżeli mamy wykupiony hosting na stronę internetową, konto pocztowe to zapewne też mamy jakieś konto FTP które możemy wykorzystać do przechowywania kopii w chmurze. Dane przechowujemy poza firmą i mamy do nich dostęp wszędzie gdzie mamy dostęp do Internetu.

Ustalamy algorytm według którego będzie wykonywany backup na serwerze FTP, poniżej przykład:

  1. Na jednym z komputerów lub serwerów tworzymy miejsce gdzie będzie składowana kopia lokalna. (w przypadku awarii któregoś z komputera mamy szybki dostęp do backupu). Zbieramy dane w jednym miejscu aby potem wysłać je do chmury czyli na naszym serwerze FTP.
  2. Definiujemy zadanie które będzie codziennie po godzinach pracy archiwizowało dane które będziemy chcieli zabezpieczyć.
  3. Definiujemy zadanie które będzie po wykonaniu kopii lokalnej, umieszczało backup na serwerze FTP.
  4. Tworzymy zadanie uruchamiane okresowo i usuwające stare kopie z archiwum lokalnego, aby zapobiec zapełnieniu się dysku.
  5. Opcjonalnie tworzymy zadanie które będzie wysyłało raport mailem o naszej kopii.

Darmowe programy przydatne do tworzenia kopii. Programy można używać komercyjnie.

  1. 7zip – archiwizator który spakuje nam kopiowane pliki aby zajmowały mniej miejsca oraz stworzy np. 1 plik archiwum zamiast kilkunastu.
    Program można pobrać ze strony http://www.7-zip.org/
  2. WinSCP – klient FTP który możemy uruchomić z linii poleceń lub za pomocą pliku wsadowego. Program można pobrać ze strony https://winscp.net/eng/download.php
  3. SwithMail – program do wysyłania maili, można go uruchomić z linii poleceń.
    Program do pobrania z https://sourceforge.net/projects/swithmail/
    Jako że program można używać bez instalacji, uruchamiając z pliku .bat niektóre skanery antywirusowe mogą kwalifikować jako zainfekowany.

Tworzenie archiwum lokalnego:

Do utworzenia archiwum lokalnego możemy użyć darmowego archiwizera 7zip. Za pomocą notatnika tworzymy plik z rozszerzeniem .cmd
poniżej przykład gdzie kopiujemy wszystkie pliki z dysku F:\ z rozszerzeniem doc czyli dokumenty word. archiwum zostanie utworzone na dysku E:\ i będzie miało w nazwie datę kiedy zostało utworzone i będzie wyglądało np.:
2018-02-09_dokumenty.zip

cd C:\Program Files\7-Zip
7z.exe a E:\"%Date%_dokumeny".zip F:\*.doc

Następnie tworzymy z harmonogramie zadań Windows, zadanie które będzie uruchamiało się codziennie po godzinach pracy np.: o godzinie 20:00 i uruchamiało nasz utworzony skrypt

Harmonogram zadań krok pierwsy
Harmonogram zadań krok 2
Harmonogram zadań krok 3



Wysyłanie kopii archiwum na serwer FTP

Do wysłania archiwum na serwer ftp użyjemy programu WinSCP
Tworzymy plik wsadowy który uruchomi WinSCP, oraz plik tekstowy z komendami do wykonania przez WinSCP. Połączy się z serwerem FTP, usunie z serwera stare kopie i zrobi synchronizację wskazanych katalogów.
Poniżej przykładowe skrypty:

  • Następnie przykładowa zawartość pliku cmd, którym uruchamiamy WinSCP z parametrem wskazującym plik zwierający polecenia do wykonania przez program.

cd C:\Program Files (x86)\WinSCP
WinSCP.com /script=C:\backupscripts\backup.txt

  • Dlej przykładowa zawartość pliku backup.txt zawierający polecenia dla WinSCP. Zamiast user wpisujemy nazwę swojego użytkownika, password zastępujemy hasłem do zalogowania, nazwahosta.pl zastępujemy adresem swojego serwera ftp.

open ftp://user:password@nazwahosta.pl/
cd /backup/
rm *.zip<7D
synchronize -filemask="*.zip*>1D" remote E:\ /wapro
close
exit

open ftp://user:password@nazwahosta.pl/ – otwieramy sesję i łączymy się z serwerem.
cd /backup/ – przechodzimy do folderu do którego będziemy wgrywać pliki, w tym przypadku folder nazywa się backup
rm *.zip<7d – usuwamy pliki z rozszerzeniem zip, starsze niż 7 dni
synchronize -filemask=”*.zip*>1D” remote E:\ /wapro – synchronizujemy foldery, dla plików z rozszerzeniem .zip, nowsze niż 1 dzień z folderem w którym znajduje się kopia, w tym przykładzie jest to zawartość folderu zmapowanego pod literą E:\ z folderem /wapro na serwerze FTP
close – zamykamy sesję
exit kończymy działanie programu WinSCP

Tworzymy harmonogram zadań Windows uruchamiany po utworzeniu kopii lokalnej. Harmonogram inicjuje skrypt cmd. Zadanie jest uruchamiane od poniedziałku do piątku, dzięki temu zmniejszamy miesięczny transfer plików wysyłanych na serwer FTP.

Wysyłanie raportu mailem

Jeżeli chcemy mieć kontrolę naszej kopii na serwerze FTP w internecie, tworzymy zadanie w harmonogramie zadań które uruchamiamy np. raz w tygodniu.
Do tworzenia raportu korzystamy z programu WinSCP przy pomocy którego łączymy się tak jak poprzednio do naszego serwera i sprawdzamy zawartość katalogu z plikami naszej kopii. Podczas łączenia tworzony jest log z przeprowadzonej operacji.

  • Aby tworzyły się logi  po uruchomieniu WinSCP wchodzimy w Narzędzia->Preferencje, wybieramy z listy Dziennik, zaznaczamy Włącz dziennik na poziomie, ustawiamy ścieżkę i nazwę pliku w którym log będzie zapisywany.
    Wybieramy opcję nadpisz, dzięki temu za każdym razem będzie powstawał nowy plik o tej samej nazwie, a poprzedni będzie nadpisywany.
Konfiguracja WinSCP, backup na serwerze FTP
  • Analogicznie jak poprzednio tworzymy plik txt z poleceniami dla WinSCP.
    Wykonujemy modyfikację aby program się łączył do naszego serwera i sprawdzał zawartość folderu z kopią.

open ftp://user:password@nazwahosta.pl/
cd /backup/
ls
close
exit

  • Utworzony log wysyłamy mailem przy pomocy programu SwithMail.
    Program można uruchomić z linii poleceń jako parametry podać wszystkie dane do logowania i wysłania maila lub przy pomocy kreatora utworzyć plik z zapisanym wszystkimi parametrami.
SwithMail opcje
SwithMail konfiguracja krok 1
SwithMail konfiguracja krok 2
SwithMail konfiguracja krok 3

Do skryptu uruchamiającego WinSCP i sprawdzającego zawartość serwera FTP dodajemy wpis (jedną linię poleceń):

C:\backupscripts\SwithMail.exe /s /x "C:\backupscripts\SwithMailSettings.xml"

gdzie wpisujemy własną ścieżkę do lokalizacji programu i pliku z konfiguracją.