SQL Server na Linuksie

Data: 2019-04-14, autor: Michał Misztal

Od kilku lat zastanawiałem się jak zmigrować serwer MSSQL na Linuksa. I oto cud się stał. Kilka lat temu Microsoft wydał swój serwer również i na Linuksa.

Te wszystkie życzliwe gesty ze strony Microsoftu wzbudzają pewną nieufność, ale wydaje się, że Microsoft bez Linuksa sobie rady nie da. Stąd Windows Subsystem for Linux, NET, SQL Server czy wizerunkowy gest jako firma oficjalnie wspierająca Linuksa również finansowo.

Zadziwiająco zbiegło się to w czasie z pojawieniem się Dockera. Konteneryzacja to zbyt łakomy kąsek, żeby odpuścić. I właśnie również jako obraz Dockera MS udostępnia swój serwer SQL.

Kilka słów jak działa Docker. Otóż Docker to system obrazów, z których budowane są kontenery. Kontener Dockera to gotowe środowisko by uruchomić określoną aplikację. Kontener współdzieli jądro systemu operacyjnego (czyli jądro Linuksa). Działa do czasu wykonania aplikacji. Można współdzielić system plików między kontenerem a hostem i łatwo przełączać się między oprogramowaniem. Np aktualizacja serwera SQL wymaga tylko wyłączenia starego kontenera i włączenia nowego - całość w czasie krótszym niż 5 sekund. Można również łatwo przetestować serwer przed wdrożeniem. Plusów jest bardzo dużo, ale trzeba pamiętać żeby te plusy nie przysłoniły minusów (cytując klasyka). Otóż, jeśli kontener się wyłączy to automatycznie się nie włączy. Także na wypadek zdarzeń losowych należy się zabezpieczyć.

OK. No to stwórzmy sobie serwer SQL na potrzeby programu np. Subiekt GT.

[user@komputer]$ sudo docker run \\
	-v /mnt/data:/var/opt/mssql/data \\		#bindujemy folder na bazy danych
	-v /mnt/archiwizacja:/mnt/archiwizacja \\	#bindujemy folder archiwizacji
	-p 1433:1433 \\					#mapujemy port serwera SQL
	-e "MSSQL_PID=Express" \\			#wybieramy wersję
	-e "ACCEPT_EULA=Y" \\				#akceptujemy umowę licencyjną
	-e "SA_PASSWORD=hasło" \\			#ustawiamy hasło
	--hostname subiektgt				#ustawiamy nazwę hosta
	--name mssql \\					#ustawiamy nazwę kontenera
	-d mcr.microsoft,com/mssql/server:2017-latest

I to wszystko. Serwer już działa. Teraz możemy przegrać sobie bazy danych do /mnt/data i podłączyć z poziomu SSMS. Jeśli coś pójdzie nie tak lub będzie potrzeba wgrania innej wersji to wystarczy w ostatniej linijce zmienić wersję serwera na odpowiednią. I już. Teraz jeszcze tylko skrypt uruchamiający archiwizację

[root@komputer]# /opt/mssql-tools/bin/sqlcmd -S localhost -U {user} -P {pass} -Q "BACKUP DATABASE [{db}] TO DISK=N'/mnt/archiwizacja/{output}.bak' WITH NOFORMAT, NOINIT, NAME = '{}', SKIP, NOREWIND, NOUNLOAD, STATS = 10"

Dodajemy to do crona i działamy. Wypadałoby również udostępnić foldery archiwizacji,

No i na razie tyle. Całość uruchomiłem na testowej bazie. Przygotowałem skrypt w Pythonie który automatyzuje te wszystkie czynności włącznie z harmonogramem archiwizacji. Wszystko działa na jakimś przedpotopowych EeePC (czy ile tam tych "e" było). Na razie oczywiście. Do sprawdzenia zostały jeszcze takie rzeczy jak dearchiwizacja, cuda związane z aktualizacją programu. No i systemowa archiwizacja nie da rady - kwestia ścieżki do folderu archiwizacji - a jak wiemy budowa tych ścieżek jest różna.

Skomentuj lub zgłoś błąd

© Michał Misztal 2023

Czytasz właśnie

SQL Server na Linuksie
Autor: Michał Misztal
Data: 2019-04-14

Podobne wpisy