Provoz Microsoft SQL serveru na Linuxu

4. října 2023

Lang: cs en de es

Víte o tom, že Microsoft SQL server jde provozovat na i Linuxu? Díky tomu, že je to možné, ten kdo potřebuje používat nutně Microsoft SQL Server, se nyní může zbavit operačního sytému Windows. Jak na to? Jak zprovoznit a vyzkoušet MS SQL server jednoduše na Linuxu, vám popíši v tomto článku.

Možnost provozovat Microsoft SQL Server (MSSQL) na operačním systému Linux byla poprvé zveřejněna v březnu 2016, kdy byla uvedena verze SQL Server 2016. Tato verze MS SQL Serveru přinesla Linuxovou podporu, což umožnilo instalaci a provozování MS SQL na různých distribucích Linuxu.

Nyní tedy můžete jednoduše nahradit servery s Windows Linuxovými stroji.

Instalace a spuštění

Nejjednodušší způsob jak vyzkoušet Microsoft SQL server je použít Docker. Pokud máte nainstalován Docker. Již nebudete potřebovat nic dalšího a zprovoznění i následné smazaní provedete jednoduše a rychle.

Následujícím příkazem spustíte docker kontejner MS SQL Serveru verze 2022 z docker image. Pokud image nebyl ještě stažen tak se nejdříve stáhne.

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=d0_n0t_be_l@zy_h3r3" -p 1433:1433 -d mcr.microsoft.com/mssql/server:2022-latest
Spuštěním zároveň potvrzujete licenci a nastavujete heslo na d0_n0t_be_l@zy_h3r3. Heslo musí být dostatečně složité. Pokud bude jednoduché MS SQL server se nespustí a v konzoli uvidíte error:
ERROR: Unable to set system administrator password: Password validation failed. The password does not meet SQL Server password policy requirements because it is too short. The password must be at least 8 characters..

Ideálně si rovnou vytvořte docker-compose file a kontejner s MS SQL spouštějte pomocí něho.
Příklad docker-compose.yml s konfigurací MS SQL serveru pro vyzkoušení:

version: '3.7'

services:
  
    mssql:
      image: mcr.microsoft.com/mssql/server:2022-latest

      environment:
          - ACCEPT_EULA=Y
          - SA_PASSWORD=d0_n0t_be_l@zy_h3r3

      volumes:
          - ./dump:/srv
      ports:
          - 1433:1433

Příkazem docker-compose up konfiguraci kontejnerů spustíte.

V obou případech pak je Microsoft SQL server dostupný na standardní portu 1433 na vašem počítači.

Parametr prostředí SA_PASSWORD a MSSQL_SA_PASSWORD jsou zdá se ekvivalentní.

Samozřejmě jinou možností je připravit si VPS s podporovanou linuxovou distribucí a tam MS SQL ručně doinstalovat. Tento postup je však pracnější a bude vám zabírat i více místa na disku.
Navíc jak jsem koukal na postup instalace, tak se nedrží unixových a distribučních standardů. Například jsou podporované jen vybrané linuxové distribuce. Takže já radši než udržovat takovou VPSku, tak mám radši čistou VPS, kde daná aplikace běží v kontejneru, který můžu kdykoli smazat nebo obnovit. Zde je rozcestník instalace MS SQL Serveru na Linuxu.

Připojení a používaní DB

K databázi se bude potřebovat připojovat nejen programově, ale také jako správce databáze. K tomu se dá použít konzolový klient a nebo grafický. Každý způsob má své výhody a tak vám ukáži obě možnosti.

Grafický klient

Grafického klienta pro připojení k databázi Microsoft SQL server používám DBeaver. Tento program je napsán v programovacím jazyce Java, takže je multiplatformní a umožňuje připojení k mnoha typům databázových serverů.

dbeaver mssql

Konzolový klient

Používání konzolového klienta je základ. Obzvlášť pokud chcete servery efektivně spravovat. Na linuxu je součástí instalace MS SQL Serveru i konzolová utilita sqlcmd. Kdo je zvyklí se připojovat k databázi MySQL/MariaDB tak použití je obdobné.

Připojit se k databázi můžeme tímto příkazem:

/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'd0_n0t_be_l@zy_h3r3'
Pokud používáte docker, tak je potřeba se nejdřive přepnout do dockeru viz Jak začít správně používat Docker. Nebo zadejte tento příkaz, který výše zmínění příkaz spustí rovnou v docker kontejneru, ktrá se jmenuje "app_mssql_1":
docker exec -it app_mssql_1  /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'd0_n0t_be_l@zy_h3r3'

Základní příkazy

Příkazy jako SELECT, INSERT, DELETE a UPDATE funguji velice podobně jako u jiných relačních databází, které používají dotazovací jazyk SQL.

Vytvoření tabulky:

CREATE TABLE table1 ( ID INT PRIMARY KEY,   name NVARCHAR(50),   surname NVARCHAR(50),   age INT );

Jeden běžící server může obsahovat víz databází (také se nazývají schémata). Zjištění jakou databázi právě používáme:

select DB_NAME()
go
Výpis seznamu databázi:
select name from sys.databases
go
Příkaz pro změnu aktuálně používané databáze:
use tempdb
go
Vytvoření databáze:"test":
CREATE DATABASE test
go
Smazání databáze "test":
DROP DATABASE test
go
Vypsání všech tabulek vybrané databáze :
SELECT table_name FROM information_schema.tables WHERE table_type = 'BASE TABLE'
go

Pro vypsání uživatelů v MS SQL Serveru můžete použít několik SQL dotazů, které se dotazují na systémové tabulky obsahující informace o uživatelích. Jedním z běžných způsobů je použití následujícího dotazu:

SELECT name, type_desc, create_date  FROM sys.server_principals WHERE type IN ('S', 'U')
go
Tento dotaz vypíše názvy uživatelů, typy uživatelů (S - SQL Login, U - Windows Login) a datum vytvoření uživatele. Pro spuštění dotazu je potřeba mít dostatečná práva.

Aplikační připojení z PHP

Jak se připojit k MS SQL Serveru z PHP viz můj článek připojení k MS SQL pomocí PHP z Linuxu.

Aplikační připojení Node.JS

Pro připojeni aplikace napsané v NodeJS k databázovému serveru MS SQL Sever budete potřebovat doinstalovat podporu. Takzvaný driver pro databázi. Zde v oficiální dokumentaci je podrobný návod jak nainstalovat MS SQL ODBC, který umožní komunikaci mezi vaší NodeJS aplikaci a databázovým serverem MS SQL Server.

Zálohování a obnova databáze

Microsoft SQL Server instalovaný na Linuxu ukládá data do adresáře /var/opt/mssql/data/. Pokud používáte docker, měli by jste tedy tento adresář mít umístěn na volume, která je perzistentní a nikoli v kontejneru. Protože při smazání kontejneru se celý jeho obsah smaže. Tento adresář můžete zálohovat. Ale lepší než kopírovat soubory je udělat dump databáze.

Pro zálohování, kdy vytvoříte dump databáze se výborně hodí konzole a příkazy následně můžete automatizovat. Dump databáze "YourDatabaseName" do souboru '/path/to/backupfile.bak' provedete následujícím příkazem :

BACKUP DATABASE test TO DISK='/path/to/backupfile.bak'
Obnovení databáze z dump souboru do databáze jménem "test" provedete příkazem:
RESTORE DATABASE test  FROM DISK = '/path/to/backupfile.bak' WITH REPLACE, RECOVERY
Obnovení databáze pokud jste dostali kopii databázových souboru z disku serveru. Provedete následujícím příkazem:
CREATE DATABASE [newdb] ON (FILENAME ='/srv/newdb.mdf'),(FILENAME = '/srv/newdb_log.ldf') FOR ATTACH

Veškeré zálohování pak je třeba provádět automaticky a ukládat na nějaké geograficky odděleného úložiště nebo do nějakého zálohovací řešení. Jedině takto zarušíte bezpečí vašich dat. Příklad Jak napsat skript pro zálohování MS SQL Serveru, který běží v Docker kontejneru

Video návod

Toto je názorné video jak si Microsoft SQL Server spustit pomocí Dockeru a jak se k databází připojit pomocí konzolového a grafického klienta:

Licence

Pokud používáte svobodný software, tak licence jsou jednoduché a nemáte řádné starosti s licencováním. V případě proprietárního software to je složitější a někdy velmi složité. Jak je to s Microsoft SQL Serverem?
MS SQL Server je proprietární řešení, takže je potřeba nezapomenout zamyslet se nad licencí, protože pokud na to zapomenete, tak to bude problém!

Microsoft nabízí následující možnosti pokud jde o licenci pro MS SQL Server:

  1. Evaluation (free, no production use rights, 180-day limit)
  2. Developer (free, no production use rights)
  3. Express (free)
  4. Web (PAID)
  5. Standard (PAID)
  6. Enterprise (PAID)
  7. Enterprise Core (PAID)
  8. I bought a license through a retail sales channel and have a product key to enter.

Pokud spouštíte MS SQL Server pomocí dockeru, tak parametrem MSSQL_PID můžete určit jakou licenci chce použít. Máte následující možnosti:

  • Developer : This will run the container using the Developer Edition
  • Express : This will run the container using the Express Edition
  • Standard : This will run the container using the Standard Edition
  • Enterprise : This will run the container using the Enterprise Edition
  • EnterpriseCore : This will run the container using the Enterprise Edition Core
Pokud proměnnou/licenci neurčíte defaultně se nastaví licence Developer.

Pro provozní účely budete potřebovat zjistit, jakou verzi MS SQL Serveru používáte a jakou máte nastavenu licenci.
Zjištění verze MS SQL Serveru provede příkazem:

SELECT @@VERSION
Zjištění jakou licenci používáte:
SELECT SERVERPROPERTY('Edition');

Licence Express je sice zdarma, ale má mnoho zásadních omezení. Hlavní omezení jsou z pohledu velikosti databáze a použitých systémových prostředků. Konkrétní limity jsou:

  • Maximum database size of 10 GB
  • Maximum 1410 MB of memory
  • Maximum compute of 1 socket or 4 cores
  • Také nemá vypnuté některé funkce...
  • ect.

Oficiální stránka s popisem licencí pro Microsoft SQL Server.

Samozřejmě pokud máte možnost volby doporučoval bych databázi MS SQL migrovat na například MySQL/MariaDB. A pokud jste náročnější uživatel nebo používáte Oracle, tak migrovat na PotgreSQL. Vyřešíte tak problémy a starosti s licencemi.
Zde je více informací o MariaDB (Mysql) a PostgreSQL

Master databáze

Databázový systém Microsoft SQL Server obsahuje databázi (schéma) s názvem "master". To je zvláštní systémová databáze. Tato databáze je jednou z výchozích databází v MS SQL Serveru a obsahuje důležité informace a metadata, která řídí celý MS SQL Server.
V databázi "master" jsou uloženy následující důležité informace:

  • Údaje o všech ostatních databázích vytvořených na serveru, včetně jejich umístění na disku, stavu a konfigurace.
  • Informace o přihlašovacích jménech a oprávněních uživatelů pro celý MS SQL Server.
  • Konfigurační možnosti a nastavení MS SQL Serveru, jako jsou parametry serveru, metody autentizace, konfigurace sítě atd.
  • Některé interní tabulky a systémové pohledy, které poskytují přístup k důležitým informacím o provozu MS SQL Serveru.

Databáze "master" je klíčová pro správné fungování MS SQL Serveru. Pokud by došlo k jejímu poškození nebo selhání, mohlo by to vést k problémům s celým SQL Serverem. Proto je důležité dbát na zálohování této databáze a chránit ji před neautorizovaným přístupem nebo riziky ztráty dat.

Provoz na Windows vs. na Linuxu

Jaký je rozdíl mezi verzí MS SQL serveru pro Windows a pro GNU/Linux?

Jádro databázového enginu pro SQL Server je stejné jak pro Windows, tak pro Linux. Nicméně MS SQL Server ve verzi pro Linux aktuálně nepodporuje některé funkce . Pokud vás to zajímá podrobněji podívejte se do dokumentace do části Unsupported features & services. Pokud máte nějaké problémy, tak nahlédněte do sekce: Known issues.

Je výkon MS SQL Serveru na Linuxu lepší než na Windows? Říká se, že MS SQL Serveru na Linuxu poskytuje mírně větší výkon, obecně se tomuto tvrzení dá věřit, protože minimálně samotný Windows má nemalé nároky na systémové prostředky. Výkon jsem já osobně netestoval, protože nemám čas a hlavně nervi se zabývat operačním systémem Windows. Proto konkrétní záběry sdělit nedokáži.

Více informací zde: MS SQL server Linux FAQ

Odkazy

Na Internetu je dostatek informací a dokumentace k provozu MS SQL Serveru na Linuxu. Zde přidávám několik hodnotných odkazů:

Vyplatí se přechod na Linux?

Ano vyplatí!
Provozem MS SQL Serveru na Linuxu ušetříte náklady za Licenci OS Windows a čas (tedy finance) za údržbu, protože spravovat server s OS Linux je méně časově náročné a výrazně méně problematické.

Nezapomeňte ani, že aplikace naprogramované v jazyce C# alias .NET jdou provozovat na Linuxu! Díky tomu můžete konečně jednoduše migrovat svoji aplikační infrastrukturu z Windows na Linux aniž by jste museli přepisovat aplikaci a měnit databázový engine. Ostatně i sám Microsoft svůj cloud Azure z větší části již migroval na GNU/Linux.

Články na podobné téma

GitLab CI/CD: automatizace testů a nasazení aplikace
Migrace VPS z VMware na Proxmox
Změna licencování VMware
Zálohování: Proxmox backup server
Linux jako router a firewall
Jak náhrát docker image do Docker Registry
Linux: Logical Volume Management
Linuxový softwarový RAID
Provoz webové aplikace za proxy
Migrace mail schránek
Docker multistage build
Zálohování dat zapnutím počítače
Podman
Import Windows do virtualizace Proxmox
Docker a PHP mail
Virtualizace Proxmox
Docker a Cron
Lenovo ThinkPad X1 Carbon: zprovoznění LTE modemu EM7544
Yocto Project: Build vlastního operačního sytému pro embedded zařízení
Příprava linuxového serveru pro běh webové aplikace v jazyce Python
Jak řešit špatný výkon sdílených souborů u Dockeru
Jak začít správně používat Docker
Instalace Linuxu na dedikovaný server HPE ProLiant DL320e
Jak provést zátěžový test webové aplikace
Proč používat filesystém JFS
Jak bootovat z 4TB disku s GTP pomocí UEFI
Jak nainstalovat operační systém Mageia Linux bez DVD mechaniky
Souborový systém Btrfs
Raspberry PI
Jak zprovoznit vzdálené přehrávání přes síť na televizi s DLNA
Upgrade Mandriva Linuxu za běhu
Poznámky ke GNU/Linux
WINE - spouštíme programy pro Windous pod Linuxem
Operační systém GNU/Linux

Odběr novinek

Pokud máte zájem dostávat příležitostně na email novinky.
Můžete se vyplněním emailu registrovat k odběru novinek.


+