Microsoft SQL Server od leta 2017 teče tudi v Linuxu, brezplačno izdajo Express pa je mogoče tudi v Linuxu uporabljati v produkcijskem sistemu. Če aplikacija potrebuje podatkovno bazo MSSQL, za to ni nujno potreben Windows Server: zadošča KVM VPS z Linuxom, na katerem SQL Server teče kot sistemska storitev ali v vsebniku Docker.
Ta članek prikazuje obe poti in primerja Express v Linuxu s tistim v Windows: kaj je enako, kaj v Linuxu manjka in kdaj je Windows vseeno boljši. O izdajah SQL Serverja in njegovem upravljanju na splošno beri v našem vodniku za MSSQL.
Korake smo novembra 2026 preizkusili na navideznem računalniku x86_64 s sistemom AlmaLinux 10.2, z različico SQL Server 2025 RTM-CU10 (17.0.5035.5), izvorno in pod Docker CE 29.9. Ukaze zaganjaj s sudo ali kot uporabnik root.
Preden začneš
- Teče le na procesorju x86_64 (Intel, AMD). Za procesorje ARM (na primer Ampere ali Apple Silicon) ni ne paketa ne slike vsebnika, Microsoft pa ne podpira niti emulacije (Rosetta, QEMU).
-
Potrebna sta vsaj 2 GB pomnilnika. Z manj se sploh ne zažene. V preizkusu se je storitev z 1 GB pomnilnika takoj ustavila s tem sporočilom:
sqlservr: This program requires a machine with at least 2000 megabytes of memory.Z 2 GB se je zagnal, a sistemu in SQL Serverju ostane malo prostora. Za izdajo Express so priporočeni vsaj 4 GB pomnilnika.
- Podprti sistemi. SQL Server 2025 je uradno podprt v Red Hat Enterprise Linux 9 in 10 ter Ubuntu 22.04 in 24.04, na datotečnem sistemu XFS ali ext4. SUSE različica 2025 ne podpira več. AlmaLinux in Rocky Linux sta z RHEL binarno združljiva, paketi za RHEL se v njiju brez težav namestijo in tečejo, vendar ju Microsoft uradno ne navaja. Če je uradna podpora pomembna, izberi Ubuntu 24.04 ali SQL Server poganjaj v Dockerju, ki je podprt v katerem koli Linuxu x86_64.
- Katera različica kam? V AlmaLinux 10 je mogoče namestiti le SQL Server 2025 (za 2022 ni repozitorija za RHEL 10), v AlmaLinux 9 pa 2022 in 2025.
Izvorno ali Docker?
| Izvorna namestitev | Vsebnik Docker | |
|---|---|---|
| Namestitev | Repozitorij Microsoft, dnf install |
En ukaz docker run |
| Posodabljanje | dnf update mssql-server |
Prenos nove slike, ponovno ustvarjanje vsebnika |
| Zagon, ustavitev | Storitev systemd (mssql-server) |
Docker, s pravilom za ponovni zagon |
| SELinux | Lasten paket pravilnika (mssql-server-selinux) |
Upravlja ga Docker |
| Požarni zid | Veljajo pravila firewalld | Objavljena vrata obidejo firewalld (glej spodaj) |
| Zasedenost prostora | Pribl. 2,5 GB (/opt/mssql) |
Slika na disku zasede 2,4 GB |
| Za kaj je dober | En strežnik podatkovnih baz za dolgo obdobje | Več različic vzporedno, razvoj, hitra zamenjava |
Če na strežniku teče le SQL Server, je izvorna namestitev preprostejša: zažene se kot sistemska storitev, posodablja jo dnf, požarni zid pa deluje, kot pričakuješ. Docker je boljši, če na računalniku aplikacije že tečejo v vsebnikih ali če želiš več različic SQL Serverja vzporedno.
A) Izvorna namestitev v AlmaLinux 10
1. Repozitorij in paket
curl -fsSL https://packages.microsoft.com/config/rhel/10/mssql-server-2025.repo | sudo tee /etc/yum.repos.d/mssql-server-2025.repo
sudo dnf install -y mssql-server
Pri AlmaLinux 9 naj bo v naslovu namesto rhel/10 rhel/9. Za SQL Server 2022 je potrebna datoteka mssql-server-2022.repo; najdeš jo le pod potjo rhel/9.
dnf ob prvi namestitvi vpraša za Microsoftov ključ za podpisovanje paketov; sprejmi ga. Paket se namesti v mapo /opt/mssql, podatkovne baze pa pridejo pod /var/opt/mssql.
2. Izdaja in geslo sa
sudo /opt/mssql/bin/mssql-conf setup
Program najprej vpraša za izdajo:
Choose an edition of SQL Server:
1) Evaluation (free, no production use rights, 180-day limit)
2) Enterprise Developer (free, no production use rights)
3) Standard Developer (free, no production use rights)
4) Express (free)
5) Standard (PAID)
...
Enter your edition(1-10):
Za Express vpiši 4, sprejmi licenčne pogoje, nato dvakrat vnesi geslo skrbnika sistema (sa). Geslo naj ima vsaj 8 znakov in vsebuje vsaj tri vrste znakov od malih črk, velikih črk, številk in ločil. Če tem pogojem ne ustreza, se nastavitev ustavi z napako.
Iz skripta ga je mogoče nastaviti tudi brez vprašanj:
sudo MSSQL_PID=Express ACCEPT_EULA=Y MSSQL_SA_PASSWORD='Hosszu-Egyedi-Jelszo-1' /opt/mssql/bin/mssql-conf -n setup
Geslo tako pride v zgodovino ukazov; po nastavitvi ga od tam izbriši ali uporabi interaktivno različico.
Na koncu nastavitve se storitev zažene, zažene pa se tudi ob zagonu sistema:
systemctl status mssql-server --no-pager
3. Orodja ukazne vrstice
sqlcmd in bcp prideta v ločenem paketu, iz Microsoftovega splošnega repozitorija:
curl -fsSL https://packages.microsoft.com/config/rhel/10/prod.repo | sudo tee /etc/yum.repos.d/mssql-release.repo
sudo ACCEPT_EULA=Y dnf install -y mssql-tools18 unixODBC-devel
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc
source ~/.bashrc
Preizkusi povezavo:
sqlcmd -S localhost -U sa -C -Q "SELECT @@VERSION"
Stikalo -C je obvezno: mssql-tools18 zahteva šifrirano povezavo, SQL Server pa po namestitvi uporablja samopodpisano potrdilo. Brez njega pride ta napaka:
SSL Provider: [error:0A000086:SSL routines::certificate verify failed:self-signed certificate]
V preizkusu je bil odgovor:
Microsoft SQL Server 2025 (RTM-CU10) (KB5125471) - 17.0.5035.5 (X64)
Express Edition (64-bit) on Linux (AlmaLinux 10.2 (Lavender Lion)) <X64>
sqlcmd geslo zahteva (Password:) ali ga vzame iz okoljske spremenljivke SQLCMDPASSWORD. Deluje tudi stikalo -P jelszo, vendar je geslo tako vidno tudi na seznamu procesov.
4. SELinux
V AlmaLinux SQL Server privzeto teče kot neomejen proces (unconfined_service_t). Microsoft ponuja ločen pravilnik SELinux, ki ga zapre v lastno, ožjo domeno (mssql_server_t):
sudo dnf install -y mssql-server-selinux
sudo systemctl restart mssql-server
ps -eZ | grep sqlservr
V preizkusu je s pravilnikom brez napak delovalo vse, tudi spodaj prikazano varnostno kopiranje. Zunaj mape /var/opt/mssql pa pravilnik pisanja ne dovoli: varnostna kopija v mapo /srv/mssql-backup se je ustavila z napako „Operating system error 5(Access is denied.)”, čeprav je bil lastnik mape uporabnik mssql. Taki mapi dodeli oznako SELinux za SQL Server:
sudo semanage fcontext -a -t mssql_var_t "/srv/mssql-backup(/.*)?"
sudo restorecon -Rv /srv/mssql-backup
5. Omejitev pomnilnika
V Linuxu SQL Server privzeto 80 % fizičnega pomnilnika šteje za svojega. Če na strežniku teče še kaj drugega (na primer spletna aplikacija), nastavi nižjo omejitev:
sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 3072
sudo systemctl restart mssql-server
Izdaja Express za predpomnilnik podatkov (buffer pool) tako ali tako uporabi največ 1410 MB, vendar proces skupaj zasede več, zato omejitve ne nastavljaj pod 2 GB. Če zmanjka pomnilnika, jedro ustavi največji proces, kar je večinoma prav SQL Server (glej: Zmanjkalo je pomnilnika: OOM killer in datoteka swap).
Nastavitve mssql-conf pridejo v datoteko /var/opt/mssql/mssql.conf in veljajo po ponovnem zagonu.
6. Iskanje po celotnem besedilu
Izdaja Express od različice 2025 vsebuje tudi funkcije nekdanje „Express with Advanced Services”, med njimi iskanje po celotnem besedilu (Full-Text Search). V Linuxu je to ločen paket:
sudo dnf install -y mssql-server-fts
sudo systemctl restart mssql-server
V preizkusu je iskanje CONTAINS delovalo tudi v izdaji Express.
B) SQL Server Express v vsebniku Docker
Za to potrebuješ Docker na strežniku. V AlmaLinux se Docker CE namesti iz Dockerjevega lastnega repozitorija (https://download.docker.com/linux/rhel/docker-ce.repo, paketi: docker-ce, docker-ce-cli, containerd.io).
Zagon
docker volume create mssql-data
docker run -d --name sql1 --hostname sql1 \
-e ACCEPT_EULA=Y \
-e MSSQL_PID=Express \
-e MSSQL_SA_PASSWORD='Hosszu-Egyedi-Jelszo-1' \
-p 127.0.0.1:1433:1433 \
-v mssql-data:/var/opt/mssql \
--restart unless-stopped \
mcr.microsoft.com/mssql/server:2025-latest
MSSQL_PID=Express: brez tega se vsebnik zažene z izdajo Developer, ki za produkcijsko uporabo ni licencirana.-v mssql-data:/var/opt/mssql: podatkovne baze so v nosilcu Docker, zato ostanejo tudi po brisanju in ponovnem ustvarjanju vsebnika. Brez nosilca se z vsebnikom izgubijo tudi podatki.-p 127.0.0.1:1433:1433: vrata so dosegljiva le znotraj strežnika. Razlog je opisan v naslednjem razdelku.--restart unless-stopped: vsebnik se zažene tudi po ponovnem zagonu strežnika.
Vsebnik se je v preizkusu zagnal v 10 sekundah. Izdajo lahko preveriš v dnevniku:
docker logs sql1 2>&1 | grep -A1 "Microsoft SQL Server 2025"
Microsoft SQL Server 2025 (RTM-CU10) (KB5125471) - 17.0.5035.5 (X64)
Express Edition (64-bit) on Linux (Ubuntu 24.04.5 LTS) <X64>
Slika temelji na Ubuntuju in vsebuje tudi sqlcmd:
docker exec -it sql1 /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -C
Docker obide požarni zid
Docker objavljena vrata vsebnikov odpre z lastnimi pravili, ki imajo prednost pred pravili firewalld. V preizkusu je bil vsebnik, zagnan s stikalom -p 1433:1433, dosegljiv tudi od zunaj, čeprav v firewalld ni bilo pravila za vrata 1433. Zato vrata vedno veži na lokalni naslov (-p 127.0.0.1:1433:1433), dostop na daljavo pa reši s tunelom SSH (glej spodaj). Če mora drug strežnik do podatkovne baze dostopati neposredno, raje izberi izvorno namestitev, kjer velja pravilo firewalld.
Lastna mapa namesto nosilca
Če namesto nosilca Docker priklopiš mapo (-v /srv/mssql:/var/opt/mssql), naj bo lastnik mape uporabnik 10001, ker SQL Server v vsebniku teče s tem identifikatorjem (mssql), ne kot root. Z mapo v lasti uporabnika root se vsebnik takoj ustavi:
/opt/mssql/bin/sqlservr: Error: The system directory [/.system] could not be created. ... Permission denied
Rešitev:
sudo mkdir -p /srv/mssql
sudo chown 10001:10001 /srv/mssql
Omejitev pomnilnika v vsebniku
Pomnilnik vsebnika lahko omejiš s stikalom Docker --memory ali s spremenljivko SQL Serverja MSSQL_MEMORY_LIMIT_MB. V preizkusu je SQL Server ob --memory 2g zaznal 1639 MB (80 % od 2 GB), ob -e MSSQL_MEMORY_LIMIT_MB=2048 pa natanko 2048 MB.
Ustavitev: docker stop ga ne ustavi pravilno
Proces 1 v vsebniku je zagonski skript (launch_sqlservr.sh), ki signala za ustavitev ne posreduje SQL Serverju. docker stop zato počaka čas odloga (privzeto 10 sekund), nato proces ubije (izhodna koda: 137). V preizkusu to podatkom ni škodovalo: ob ponovnem zagonu je SQL Server podatkovne baze obnovil iz dnevnika transakcij in vse zaključene transakcije so ostale. Pravilna ustavitev pa da hitrejši ponovni zagon in obnova ni potrebna.
Če želiš pravilno ustavitev, vsebnik zaženi neposredno s SQL Serverjem, s stikalom --entrypoint /opt/mssql/bin/sqlservr (v zgornji ukaz docker run, pred ime slike). V preizkusu je tako docker stop strežnik ustavil takoj in pravilno. Zagonski skript slike se takrat ne izvede, s tem pa tudi ne preverjanje dovoljenj mape: pri mapi z napačnim lastnikom dobiš le lastno sporočilo o napaki SQL Serverja.
Posodabljanje
Pri vsebniku je posodobitev zamenjava slike: prenesi novo sliko, izbriši vsebnik in ga znova zaženi z istim nosilcem.
docker pull mcr.microsoft.com/mssql/server:2025-latest
docker stop sql1
docker rm sql1
# nato zgornji ukaz docker run, z istim nosilcem
V preizkusu je slika 2025 nosilec vsebnika SQL Server 2022 prevzela brez težav, podatkovne baze so ostale dosegljive. V obratni smeri to ne deluje: podatkovne baze, odprte z različico 2025, z različico 2022 ni več mogoče odpreti. Pred posodobitvijo vedno naredi varnostno kopijo.
Dostop na daljavo
Izvorna namestitev posluša na vratih 1433 na vseh omrežnih naslovih. Vrat podatkovne baze nikoli ne odpri proti celotnemu internetu: SQL Server nenehno doživlja napade z ugibanjem gesel.
Tunel SSH (priporočeno): na svojem računalniku odpri tunel do strežnika in se s SQL Server Management Studio (SSMS) ali drugim odjemalcem poveži na naslov localhost,1433:
ssh -L 1433:127.0.0.1:1433 felhasznalo@szerver-ip
Za to na strežniku poleg SSH ni treba odpreti nobenih vrat. Več o SSH beri v našem članku Linux Secure Shell (SSH).
Dovoljenje za en naslov IP: če do podatkovne baze dostopa drug strežnik (pri izvorni namestitvi), v firewalld dovoli le njegov naslov:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.10/32" port port="1433" protocol="tcp" accept'
sudo firewall-cmd --reload
O nastavitvi požarnega zidu na splošno govori članek nastavitev požarnega zidu na VPS. Če povezava ne poteka po lokalnem omrežju, v odjemalcu vklopi šifriranje in samopodpisano potrdilo zamenjaj s pravim ali uporabi tunel SSH.
Varnostno kopiranje in obnovitev
Načrtovano varnostno kopiranje s časovnikom systemd
Izdaja Express po Microsoftu nima SQL Server Agenta, zato načrtovano varnostno kopiranje opravi razporejevalnik Linuxa. V preizkusu se je Agent v Linuxu zagnal tudi v izdaji Express (mssql-conf set sqlagent.enabled true) in z njim se je izvedlo opravilo varnostnega kopiranja, a ker ga Express po Microsoftovi primerjavi izdaj ne vsebuje, v produkcijskem sistemu nanj ne računaj.
Spodnji skript naredi celotno varnostno kopijo vseh uporabniških podatkovnih baz, starejše od 7 dni pa izbriše. Pripravljen je za izvorno namestitev; v Dockerju je treba vrstico sqlcmd zagnati v vsebniku (docker exec sql1 /opt/mssql-tools18/bin/sqlcmd ...), kopije pa pridejo v nosilec.
Geslo pride v datoteko, ki jo lahko bere le root:
echo 'SQLCMDPASSWORD=Hosszu-Egyedi-Jelszo-1' | sudo tee /etc/mssql-backup.env
sudo chmod 600 /etc/mssql-backup.env
sudo mkdir -p /var/opt/mssql/backup
sudo chown mssql:mssql /var/opt/mssql/backup
Skript: /usr/local/bin/mssql-backup
#!/bin/bash
# Celotna varnostna kopija vseh uporabniških podatkovnih baz
set -euo pipefail
SQLCMD="/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -C -b -h -1 -W"
NAP=$(date +%F)
for DB in $($SQLCMD -Q "SET NOCOUNT ON; SELECT name FROM sys.databases WHERE database_id > 4 AND state_desc = 'ONLINE'"); do
$SQLCMD -Q "BACKUP DATABASE [$DB] TO DISK = N'/var/opt/mssql/backup/${DB}_${NAP}.bak' WITH INIT, CHECKSUM"
done
find /var/opt/mssql/backup -name "*.bak" -mtime +7 -delete
Skript ne deluje z imenom podatkovne baze, ki vsebuje presledek. Naredi ga izvedljivega: sudo chmod 755 /usr/local/bin/mssql-backup.
Storitev: /etc/systemd/system/mssql-backup.service
[Unit]
Description=Varnostno kopiranje podatkovnih baz SQL Server
After=mssql-server.service
[Service]
Type=oneshot
EnvironmentFile=/etc/mssql-backup.env
ExecStart=/usr/local/bin/mssql-backup
Časovnik: /etc/systemd/system/mssql-backup.timer
[Unit]
Description=Varnostna kopija SQL Server vsako noč ob 2.00
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
[Install]
WantedBy=timers.target
Vklop in poskusna varnostna kopija:
sudo systemctl daemon-reload
sudo systemctl enable --now mssql-backup.timer
sudo systemctl start mssql-backup.service
journalctl -u mssql-backup.service -n 5
Zaradi Persistent=true se zamujena varnostna kopija (na primer ker strežnik ravno ni tekel) izvede ob naslednjem zagonu. Če bi raje uporabil cron, lahko skript zaženeš tudi od tam (glej: Sintaksa crontab in načrtovana opravila v Linuxu).
Kopije redno prenašaj tudi na drug računalnik, na primer z rsync (glej: Kopiranje datotek med strežniki): varnostna kopija, ki se izgubi skupaj s strežnikom, ne varuje pred ničemer.
Izdaja Express ne zna narediti stisnjene varnostne kopije. S stikalom WITH COMPRESSION dobiš to napako:
Msg 1844, Level 16, State 1
BACKUP DATABASE WITH COMPRESSION is not supported on Express Edition (64-bit).
Končane datoteke .bak stisni naknadno, na primer z zstd ali gzip.
Obnovitev varnostne kopije iz Windows v Linuxu
Oblika datotek varnostnih kopij je v Windows in Linuxu enaka, zato je datoteko .bak, narejeno na SQL Serverju v Windows, mogoče obnoviti tudi v Linuxu, če je različica v Linuxu enaka ali novejša. V varnostni kopiji pa so poti iz Windows (C:\Program Files\...), zato je treba datoteke s stikalom WITH MOVE premakniti. Najprej izpiši logična imena datotek v varnostni kopiji:
RESTORE FILELISTONLY FROM DISK = N'/var/opt/mssql/backup/AdventureWorksLT2022.bak';
Nato obnovi z logičnimi imeni:
RESTORE DATABASE AdventureWorksLT
FROM DISK = N'/var/opt/mssql/backup/AdventureWorksLT2022.bak'
WITH MOVE 'AdventureWorksLT2022_Data' TO '/var/opt/mssql/data/AdventureWorksLT.mdf',
MOVE 'AdventureWorksLT2022_Log' TO '/var/opt/mssql/data/AdventureWorksLT_log.ldf';
V preizkusu se je Microsoftova vzorčna podatkovna baza AdventureWorksLT2022, narejena v Windows, tako obnovila brez napak. Brez WITH MOVE pride ta napaka:
Directory lookup for the file "C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorksLT2022.mdf" failed with the operating system error 2(The system cannot find the file specified.).
Datoteko varnostne kopije mora uporabnik mssql lahko brati. Pri izvorni namestitvi jo prekopiraj v mapo /var/opt/mssql/backup in lastništvo predaj uporabniku mssql (sudo chown mssql:mssql fajl.bak). Pri Dockerju docker cp datoteko v vsebnik prekopira z lastnikom root, obnovitev pa se takrat ustavi z napako „Operating system error 5(Access is denied.)”. Po kopiranju datoteko predaj:
docker cp AdventureWorksLT2022.bak sql1:/var/opt/mssql/backup/
docker exec -u 0 sql1 chown mssql:mssql /var/opt/mssql/backup/AdventureWorksLT2022.bak
Enako deluje tudi v obratni smeri: varnostno kopijo, narejeno v Linuxu, lahko obnoviš tudi v Windows, na enako ali novejšo različico.
Omejitve izdaje Express v Linuxu in Windows
Omejitve izdaje Express so neodvisne od sistema, v Linuxu so enake kot v Windows (SQL Server 2025):
| Omejitev | Express |
|---|---|
| Procesor | 1 podnožje ali 4 jedra, kar je manj |
| Predpomnilnik podatkov (buffer pool) | 1410 MB |
| Columnstore in pomnilniško optimizirani podatki | 352 MB na podatkovno bazo |
| Velikost podatkovne baze | 50 GB na podatkovno bazo (pri različici 2022 in starejših 10 GB) |
| SQL Server Agent | Ne |
| Stisnjena varnostna kopija | Ne |
| Database Mail | Ne |
50 GB velja za podatkovne datoteke, dnevnika transakcij ne šteje. V preizkusu se je ustvarjanje podatkovne baze velikosti 51 201 MB ustavilo s to napako:
Msg 1827, Level 16, State 4
CREATE DATABASE or ALTER DATABASE failed because the resulting cumulative database size would exceed your licensed limit of 51200 MB per database.
V praksi je ozko grlo večinoma pomnilnik: če pogosto uporabljeni podatki ne gredo v predpomnilnik velikosti 1410 MB, Express bere z diska in se upočasni, ne glede na velikost strežnika. Zato za Express ni smiselno najeti strežnika z več kot 8 GB pomnilnika, če na njem teče le podatkovna baza.
Česa v Linuxu ni
Pogon SQL Serverja je v Linuxu enak kot v Windows: T-SQL, shranjene procedure, prožilci, pogledi, iskanje po celotnem besedilu in oblika varnostnih kopij se ujemajo. Večina aplikacij .NET, PHP, Python ali Node.js sploh ne opazi, da podatkovna baza teče v Linuxu. Nekaj funkcij, vezanih predvsem na Windows, pa manjka (po Microsoftovem seznamu, SQL Server 2025):
- FILESTREAM in FileTable: shranjevanje datotek ob podatkovni bazi, v datotečnem sistemu Windows.
- Sklopi CLR s pravico
EXTERNAL_ACCESSaliUNSAFE: sklopiSAFEtečejo, koda .NET, ki dostopa do datotečnega sistema ali omrežja, pa ne. - Razširjene shranjene procedure na ravni sistema, na primer
xp_cmdshell. - Povezani strežnik (linked server) za vir podatkov, ki ni SQL Server, na primer proti Accessu, Excelu ali drugemu viru ODBC. Proti SQL Serverju deluje.
- Replikacija spajanja (merge).
- Analysis Services in Reporting Services: v Linuxu ne tečeta (namesto Reporting Services Microsoft priporoča Power BI Report Server, ki teče le v Windows).
- Preverjanje Windows z lokalnimi računi Windows: v Linuxu se je privzeto mogoče prijaviti le z uporabniki SQL Serverja. Preverjanje Active Directory je mogoče nastaviti (strežnik je treba pridružiti domeni, s ključem Kerberos), vendar je to dodatno delo.
- LocalDB: razvijalska različica izdaje Express obstaja le za Windows.
- SQL Server Management Studio (SSMS) na strežniku: SSMS teče le v Windows. Z računalnika z Windows se z njim na strežnik z Linuxom povežeš enako kot na strežnik z Windows; v Linuxu in macOS lahko uporabiš razširitev MSSQL za Visual Studio Code ali
sqlcmd.
Če tvoja aplikacija ne uporablja nobene od teh funkcij, SQL Server v Linuxu deluje enako.
Prednosti in slabosti v primerjavi z izdajo Express v Windows
Za Linux govori:
- Brez licence Windows Server. Express je v obeh sistemih brezplačen, v Windows pa licenca operacijskega sistema stane. KVM VPS s 4 GB (AMD VPS 4) stane 13,06 € na mesec, najmanjši Windows VPS (Win VPS Start, 8 GB) pa 22,85 € na mesec.
- Manj virov. Linux brez grafičnega vmesnika porabi precej manj pomnilnika in prostora kot Windows Server, zato od virov strežnika več ostane za podatkovno bazo.
- Preprosta posodobitev in avtomatizacija. Posodobitev SQL Serverja je en
dnf updateali zamenjava slike, nastavitve je mogoče skriptirati, vsebnik pa v nekaj minutah premakneš na drug strežnik. - Skupen strežnik z aplikacijami za Linux. Če tudi spletna aplikacija (PHP, Python, Node.js, .NET) teče v Linuxu, je lahko podatkovna baza na istem računalniku in je od zunaj sploh ni treba doseči.
Za Windows govori:
- Aplikacije in funkcije za Windows. Če program uporablja preverjanje Windows, FILESTREAM,
xp_cmdshell, povezani strežnik proti viru Access ali Excel, Reporting Services ali lastno komponento, ki teče kot storitev Windows, naj ostane v Windows. - Grafično upravljanje na strežniku. SSMS in orodja Windows tečejo neposredno na strežniku, prek oddaljenega namizja; v Linuxu gre vse iz ukazne vrstice ali z drugega računalnika.
- Znano okolje. Če se ekipa spozna na skrbništvo Windows, uvedba Linuxa pomeni učenje.
- Podpora proizvajalca. V vseh izdajah Windows Server je uradno podprt, v Linuxu le v navedenih distribucijah (v AlmaLinux in Rocky Linux ne).
Odpravljanje težav
Storitev se ne zažene, „Start request repeated too quickly”. Storitev mssql-server se lahko v 2 minutah zažene največ trikrat. Če si jo med preizkušanjem nastavitev večkrat znova zagnal, systemd zagon blokira. Odblokiraj ga, nato znova zaženi:
sudo systemctl reset-failed mssql-server
sudo systemctl start mssql-server
Zakaj se ne zažene? Dnevnik storitve je journalctl -u mssql-server, lastni dnevnik SQL Serverja pa /var/opt/mssql/log/errorlog (beresta ga lahko le root in uporabnik mssql). V Dockerju sta oba vidna v izpisu ukaza docker logs sql1.
Express ne dovoli namenske skrbniške povezave (DAC). V izdaji Express je privzeto izklopljena; po dnevniku jo je mogoče vklopiti z zastavico za sledenje 7806.
Kateri paket izbrati?
SQL Server Express v Linuxu udobno teče na KVM VPS z vsaj 4 GB pomnilnika (AMD VPS 4: 2 vCPU, 4 GB). Če želiš izkoristiti vsa 4 procesorska jedra izdaje Express ali če na računalniku poleg podatkovne baze teče še spletna aplikacija, je AMD VPS 8 (4 vCPU, 8 GB) boljša izbira. Za aplikacije, odvisne od Windows, so primerni naši paketi Windows VPS z licenciranim Windows Server. Če nisi prepričan, kateri ustreza tvoji aplikaciji, nam piši, pomagali ti bomo izbrati.