Ausführen von Microsoft SQL Server unter Linux

4. Oktober 2023

Lang: cs en de es

Wussten Sie, dass der Microsoft SQL Server auch unter Linux betrieben werden kann? Dank der Tatsache, dass dies möglich ist, kann sich derjenige, der unbedingt Microsoft SQL Server benutzen muss, kann sich nun vom Windows-Betriebssystem befreien. Wie macht man das? Wie man MS SQL Server einfach unter Linux laufen lässt und testet, werde ich in diesem Artikel beschreiben.

Die Möglichkeit, Microsoft SQL Server (MSSQL) auf dem Linux-Betriebssystem auszuführen, wurde erstmals im März 2016 angekündigt, als die Version 2016 von SQL Server veröffentlicht wurde. Diese Version von MS SQL Server brachte Linux-Unterstützung mit sich, wodurch es möglich wurde, MS SQL auf verschiedenen Linux-Distributionen zu installieren und auszuführen.

So können Sie nun problemlos Windows-Server durch Linux-Maschinen ersetzen.

Installation und Startup

Der einfachste Weg, Microsoft SQL Server zu testen, ist die Verwendung von Docker. Wenn Sie Docker installiert haben. Sie brauchen nichts weiter, und die Inbetriebnahme und das anschließende Löschen ist schnell und einfach.

Verwenden Sie den folgenden Befehl, um den MS SQL Server Version 2022 Docker-Container aus einem Docker-Image zu starten. Falls das Image noch nicht heruntergeladen wurde, wird es zuerst heruntergeladen.

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
Die Ausführung bestätigt auch die Lizenz und setzt das Passwort auf d0_n0t_be_l@zy_h3r3. Das Kennwort muss ausreichend komplex sein. Wenn es einfach ist, wird MS SQL Server nicht starten und Sie werden einen Fehler in der Konsole sehen:
FEHLER: Systemadministratorkennwort kann nicht festgelegt werden: Kennwortüberprüfung fehlgeschlagen. Das Kennwort entspricht nicht den Anforderungen der SQL Server-Kennwortrichtlinie, da es zu kurz ist. Das Kennwort muss mindestens 8 Zeichen lang sein.

Idealerweise erstellt man eine docker-compose Datei und führt den MS SQL Container damit aus.
Beispiel docker-compose.yml mit MS SQL Server Konfiguration zum ausprobieren:

version: '3.7'

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

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

      Volumes:
          - ./dump:/srv
      Ports:
          - 1433:1433

Mit dem Befehl docker-compose up wird die Container-Konfiguration gestartet.

In beiden Fällen ist der Microsoft SQL Server dann auf dem Standardport 1433 auf Ihrem Rechner verfügbar.

Der Umgebungsparameter SA_PASSWORD und MSSQL_SA_PASSWORD scheinen gleichwertig zu sein.

Eine andere Möglichkeit ist natürlich, einen VPS mit einer unterstützten Linux-Distribution vorzubereiten und MS SQL dort manuell zu installieren. Dieses Verfahren ist jedoch aufwändiger und nimmt auch mehr Speicherplatz in Anspruch.
Wie ich mir die Installationsprozedur angesehen habe, folgt sie außerdem nicht den Unix- und Distributionsstandards. Zum Beispiel werden nur ausgewählte Linux-Distributionen unterstützt. Statt einen solchen VPS zu unterhalten, ziehe ich also einen reinen VPS vor, bei dem die betreffende Anwendung in einem Container läuft, den ich jederzeit löschen oder wiederherstellen kann. Hier ist ein Wegweiser Installation von MS SQL Server auf Linux.

Verbinden und Verwenden der DB

Sie müssen sich nicht nur programmatisch mit der Datenbank verbinden, sondern auch als Datenbankadministrator. Hierfür können Sie einen Konsolen-Client oder einen grafischen Client verwenden. Jede Methode hat ihre Vorteile, daher werde ich Ihnen beide Möglichkeiten zeigen.

Grafischer Client

Ich verwende den DBeaver grafischen Client, um eine Verbindung zur Microsoft SQL Server Datenbank herzustellen. Dieses Programm ist in der Programmiersprache Java geschrieben, ist also multiplattformfähig und erlaubt Verbindungen zu vielen Arten von Datenbankservern.

dbeaver mssql

Konsolen-Client

Die Verwendung des Konsolenclients ist unerlässlich. Vor allem, wenn man Server effizient verwalten will. Unter Linux ist das Konsolenprogramm sqlcmd in der MS SQL Server-Installation enthalten. Wenn Sie es gewohnt sind, sich mit einer MySQL/MariaDB-Datenbank zu verbinden, ist die Verwendung ähnlich.

Mit diesem Befehl können wir uns mit der Datenbank verbinden:

/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'd0_n0t_be_l@zy_h3r3'
Wenn Sie Docker verwenden, müssen Sie zuerst zu Docker wechseln, siehe Wie man Docker richtig einsetzt. Oder geben Sie diesen Befehl ein, der den obigen Befehl direkt im Docker-Container mit dem Namen "app_mssql_1" ausführt:
docker exec -it app_mssql_1 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'd0_n0t_be_l@zy_h3r3'

Grundlegende Befehle

Befehle wie SELECT, INSERT, DELETE und UPDATE funktionieren ganz ähnlich wie bei anderen relationalen Datenbanken, die die Abfragesprache SQL verwenden.

Erstellen einer Tabelle:

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

Ein einziger laufender Server kann verschiedene Datenbanken (auch Schemata genannt) enthalten. Herausfinden, welche Datenbank wir gerade verwenden:

select DB_NAME()
go
Datenbank auflisten:
select name from sys.databases
go
Befehl zum Ändern der aktuell verwendeten Datenbank:
use tempdb
go
Datenbank erstellen: "test":
CREATE DATABASE test
go
Löschen Sie die Datenbank "test":
DROP DATABASE test
go
Dump aller Tabellen der ausgewählten Datenbank :
SELECT table_name FROM information_schema.tables WHERE table_type = 'BASE TABLE'
go

Sie können verschiedene SQL-Abfragen verwenden, um Benutzer in MS SQL Server aufzulisten, die Systemtabellen mit Benutzerinformationen abfragen. Eine gängige Methode ist die Verwendung der folgenden Abfrage:

SELECT name, type_desc, create_date FROM sys.server_principals WHERE type IN ('S', 'U')
go
Diese Abfrage listet die Benutzernamen, die Benutzertypen (S - SQL Login, U - Windows Login) und das Erstellungsdatum des Benutzers auf. Sie müssen über ausreichende Berechtigungen verfügen, um die Abfrage auszuführen.

Anwendungsverbindung aus PHP

Wie man sich von PHP aus mit MS SQL Server verbindet, ist in meinem Artikel Verbindung zu MS SQL mit PHP von Linux aus beschrieben.

Node.JS Anwendungsverbindung

Um eine in NodeJS geschriebene Anwendung mit einem MS-SQL-Sever-Datenbankserver zu verbinden, müssen Sie eine Unterstützung installieren. Der sogenannte Datenbanktreiber. Hier in der offiziellen Dokumentation ist eine ausführliche Anleitung, wie man MS SQL ODBC installiert, der die Kommunikation zwischen Ihrer NodeJS-Anwendung und dem MS SQL Server-Datenbankserver ermöglicht.

Datenbank sichern und wiederherstellen

Microsoft SQL Server, der auf Linux installiert ist, speichert Daten im /var/opt/mssql/data/ Verzeichnis. Wenn Sie also Docker verwenden, sollten Sie dieses Verzeichnis auf einem Volume haben, das persistent ist und nicht in einem Container. Denn wenn Sie einen Container löschen, wird auch sein gesamter Inhalt gelöscht. Sie können dieses Verzeichnis sichern. Aber besser als die Dateien zu kopieren ist es, die Datenbank zu dumpen.

Für Backups, bei denen Sie einen Datenbank-Dump erstellen, ist die Konsole hervorragend geeignet, und Sie können die Befehle anschließend automatisieren. Um die Datenbank "IhrDatenbankName" in die Datei "/pfad/zu/backupfile.bak" zu dumpen, verwenden Sie den folgenden Befehl:

BACKUP DATABASE test TO DISK='/pfad/zu/backupfile.bak'
Um eine Datenbank aus einer Dump-Datei in eine Datenbank mit dem Namen "test" wiederherzustellen, verwenden Sie den folgenden Befehl:
RESTORE DATABASE test FROM DISK = '/path/to/backupfile.bak' WITH REPLACE, RECOVERY
Stellen Sie die Datenbank wieder her, wenn Sie eine Kopie der Datenbankdateien von der Serverplatte erhalten haben. Verwenden Sie dazu den folgenden Befehl:
CREATE DATABASE [newdb] ON (FILENAME ='/srv/newdb.mdf'),(FILENAME = '/srv/newdb_log.ldf') FOR ATTACH

Alle Backups müssen dann automatisch durchgeführt und auf einem geografisch getrennten Speicher oder einer Backup-Lösung gespeichert werden. Nur so kann die Sicherheit der Daten gewährleistet werden. Beispiel Wie schreibe ich ein Skript zur Sicherung von MS SQL Server in einem Docker-Container

Videotutorial

Dies ist ein Demonstrationsvideo, in dem gezeigt wird, wie man Microsoft SQL Server mit Docker zum Laufen bringt und wie man mit der Konsole und dem grafischen Client eine Verbindung zu Datenbanken herstellt:

Lizenz

Wenn Sie freie Software verwenden, sind die Lizenzen einfach und Sie müssen sich nicht um die Lizenzierung kümmern. Bei proprietärer Software ist das komplizierter und manchmal sehr schwierig. Was ist mit Microsoft SQL Server?
Bei MS SQL Server handelt es sich um eine proprietäre Lösung, so dass Sie sich Gedanken über die Lizenzierung machen müssen, denn wenn Sie das vergessen, wird es ein Problem!

Microsoft bietet die folgenden Optionen für die Lizenzierung von MS SQL Server an:

  1. Evaluation (kostenlos, keine Produktionsnutzungsrechte, 180-Tage-Limit)
  2. Entwickler (kostenlos, keine Rechte für die produktive Nutzung)
  3. Express (kostenlos)
  4. Web (PAID)
  5. Standard (PAID)
  6. Enterprise (PAID)
  7. Enterprise Core (PAID)
  8. Ich habe eine Lizenz über einen Einzelhandelsvertriebskanal erworben und habe einen Produktschlüssel zur Eingabe.

Wenn Sie MS SQL Server mit Docker betreiben, können Sie mit dem Parameter MSSQL_PID angeben, welche Lizenz Sie verwenden möchten. Sie haben die folgenden Optionen:

  • Developer : Damit wird der Container mit der Developer Edition ausgeführt
  • Express : Damit wird der Container mit der Express Edition ausgeführt
  • Standard : Der Container wird mit der Standard Edition ausgeführt
  • Enterprise : Hiermit wird der Container mit der Enterprise Edition ausgeführt
  • EnterpriseCore : Der Container wird mit der Enterprise Edition Core ausgeführt
Wenn Sie keine Variable/Lizenz angeben, wird standardmäßig die Entwicklerlizenz verwendet.

Für operative Zwecke müssen Sie herausfinden, welche Version von MS SQL Server Sie verwenden und welche Lizenz Sie eingerichtet haben.
Um die MS SQL Server-Version herauszufinden, verwenden Sie den Befehl:

SELECT @@VERSION
Finden Sie heraus, welche Lizenz Sie verwenden:
SELECT SERVERPROPERTY('Edition');

Die Express-Lizenz ist zwar kostenlos, hat aber viele erhebliche Einschränkungen. Die wichtigsten Einschränkungen betreffen die Größe der Datenbank und die verwendeten Systemressourcen. Die spezifischen Grenzen sind:

  • Maximale Datenbankgröße von 10 GB
  • Maximal 1410 MB Arbeitsspeicher
  • Maximale Rechenleistung von 1 Sockel oder 4 Kernen
  • Einige Funktionen sind nicht deaktiviert...
  • eventuell.

Offizielle Microsoft SQL Server-Lizenzierungsseite.

Wenn Sie die Wahl haben, würde ich natürlich empfehlen, die MS SQL-Datenbank zu migrieren, zum Beispiel zu MySQL/MariaDB. Und wenn Sie ein anspruchsvoller Benutzer sind oder Oracle verwenden, migrieren Sie zu PotgreSQL. Damit sind Ihre Lizenzierungsprobleme und -sorgen gelöst.
Hier finden Sie weitere Informationen über MariaDB (Mysql) und PostgreSQL

Hauptdatenbank

Das Datenbanksystem Microsoft SQL Server enthält eine Datenbank (Schema) namens "Master". Dies ist eine spezielle Systemdatenbank. Diese Datenbank ist eine der Standarddatenbanken in MS SQL Server und enthält wichtige Informationen und Metadaten, die den gesamten MS SQL Server steuern.
In der Datenbank "master" werden folgende wichtige Informationen gespeichert:

  • Daten über alle anderen auf dem Server erstellten Datenbanken, einschließlich ihres Speicherorts, ihres Status und ihrer Konfiguration.
  • Informationen über Anmeldenamen und Benutzerberechtigungen für den gesamten MS SQL Server.
  • Konfigurationsoptionen und Einstellungen für MS SQL Server, wie z. B. Serverparameter, Authentifizierungsmethoden, Netzwerkkonfiguration usw.
  • Einige interne Tabellen und Systemansichten, die Zugang zu wichtigen Informationen über den Betrieb von MS SQL Server bieten.

Die "Master"-Datenbank ist entscheidend für das ordnungsgemäße Funktionieren von MS SQL Server. Sollte sie beschädigt werden oder ausfallen, könnte dies zu Problemen mit dem gesamten SQL Server führen. Daher ist es wichtig, sicherzustellen, dass diese Datenbank gesichert und vor unbefugtem Zugriff oder Datenverlust geschützt ist.

Betrieb unter Windows vs. Linux

Was ist der Unterschied zwischen der Windows-Version von MS SQL Server und der GNU/Linux-Version?

Die Kerndatenbank-Engine für SQL Server ist für Windows und Linux identisch. Allerdings unterstützt MS SQL Server unter Linux derzeit einige Features nicht. Wenn Sie an weiteren Details interessiert sind, lesen Sie die Dokumentation unter Nicht unterstützte Funktionen und Dienste. Wenn Sie Probleme haben, werfen Sie einen Blick auf den Abschnitt Bekannte Probleme.

Ist die Leistung von MS SQL Server unter Linux besser als unter Windows? Es wird gesagt, dass MS SQL Server unter Linux eine etwas bessere Leistung bietet, im Allgemeinen kann man dieser Aussage vertrauen, da zumindest Windows selbst erhebliche Anforderungen an die Systemressourcen hat. Ich habe die Leistung nicht persönlich getestet, weil ich nicht die Zeit und vor allem nicht die Nerven habe, mich mit dem Windows-Betriebssystem zu beschäftigen. Daher kann ich keine konkreten Angaben machen.

Mehr Informationen gibt es hier: MS SQL Server Linux FAQ

Links

Im Internet gibt es eine Fülle von Informationen und Dokumentationen zum Betrieb von MS SQL Server unter Linux. Hier füge ich einige wertvolle Links hinzu:

Lohnt sich der Umstieg auf Linux?

Ja, es lohnt sich!
Wenn Sie MS SQL Server unter Linux betreiben, sparen Sie die Kosten für eine Windows OS-Lizenz und Zeit (d.h. Geld) für die Wartung, denn die Verwaltung eines Servers mit Linux OS ist weniger zeitaufwendig und deutlich unproblematischer.

Vergessen Sie auch nicht, dass Anwendungen, die in C# alias .NET programmiert sind, auf Linux laufen können! Damit können Sie endlich Ihre Anwendungsinfrastruktur problemlos von Windows auf Linux migrieren, ohne Ihre Anwendung neu schreiben und die Datenbank-Engine ändern zu müssen. Schließlich hat Microsoft selbst bereits Cloud Azure zum größten Teil auf GNU/Linux migriert.

Články na podobné téma

VMware-Lizenzierungsänderung
Sicherung: der Proxmox Backup Server
Linux als Router und Firewall
Hochladen eines Docker-Images in die Docker-Registry
Linux: Verwaltung logischer Datenträger
Linux-Software-RAID
Ausführen einer Webanwendung hinter einem Proxy
Migration von Postfächern
Mehrstufige Docker-Erstellung
Sichern Ihrer Daten durch Einschalten des Computers
Podman
Importieren von Windows in die Proxmox-Virtualisierung
Docker und PHP-Mail
Proxmox-Virtualisierung
Docker und Cron
Lenovo ThinkPad X1 Carbon: Inbetriebnahme des LTE-Modems EM7544
Yocto-Projekt: Erstellen eines eigenen Betriebssystems für eingebettete Geräte
Vorbereiten eines Linux-Servers für die Ausführung einer Webanwendung in Python
Wie man eine schlechte Dateifreigabeleistung in Docker behebt
Wie man Docker richtig einsetzt
Installation von Linux auf einem dedizierten HPE ProLiant DL320e Server
Wie man eine Webanwendung einem Belastungstest unterzieht
Warum das JFS-Dateisystem verwenden
Booten von einer 4TB-Festplatte mit GTP unter UEFI
Btrfs-Dateisystem
Raspberry PI
WINE - Ausführen von Windous Programmen unter Linux
GNU/Linux-Betriebssystem

Newsletter

Wenn Sie daran interessiert sind, gelegentlich Neuigkeiten per E-Mail zu erhalten.
Sie können sich registrieren, indem Sie Ihre E-Mail-Adresse eingeben News-Abonnement.


+