Nächste: , Vorige: , Nach oben: Dienste   [Inhalt][Index]


10.8.10 Datenbankdienste

Das Modul (gnu services databases) stellt die folgenden Dienste zur Verfügung.

PostgreSQL

Das folgende Beispiel zeigt einen PostgreSQL-Dienst in seiner Vorgabekonfiguration.

(service postgresql-service-type
         (postgresql-configuration
          (postgresql postgresql-10)))

Wenn diese Dienste nicht starten können, ist vielleicht bereits ein inkompatibler Datenbankverbund („Cluster“) in data-directory vorhanden. Ändern Sie dann den Wert dafür (oder falls Sie den Verbund nicht mehr brauchen, löschen Sie data-directory einfach) und starten Sie den Dienst neu.

Nach Voreinstellung müssen sich normale Benutzerkonten des Guix-Systems, die mit PostgreSQL kommunizieren, sogenannte „Peers“, zunächst authentifizieren. Allerdings ist für das postgres-Benutzerkonto keine Shell eingestellt, wodurch keine psql-Befehle durch diesen Benutzer ausgeführt werden können. Um psql benutzen zu können, können Sie sich vorläufig als der postgres-Nutzer unter Angabe einer Shell anmelden, ein Konto für einen PostgreSQL-Administrator (einen „Superuser“) mit demselben Namen wie einer der Benutzer des Systems einrichten und dann die zugehörige Datenbank erstellen.

sudo -u postgres -s /bin/sh
createuser --interactive
createdb $BENUTZER_ANMELDENAME  # muss angepasst werden
Datentyp: postgresql-configuration

Der Datentyp repräsentiert die Konfiguration für den postgresql-service-type.

postgresql

Das PostgreSQL-Paket, was für diesen Dienst benutzt werden soll.

port (Vorgabe: 5432)

Der Port, auf dem PostgreSQL lauschen soll.

locale (Vorgabe: "en_US.utf8")

Welche Regions- und Spracheinstellung („Locale“) beim Erstellen des Datenbankverbunds voreingestellt werden soll.

config-file (Vorgabe: (postgresql-config-file))

Aus welcher Konfigurationsdatei die Laufzeitkonfiguration von PostgreSQL geladen werden soll. Vorgegeben ist, die Einstellungen aus einem postgresql-config-file-Verbundsobjekt mit Vorgabewerten zu nehmen.

log-directory (Vorgabe: "/var/log/postgresql")

In welchem Verzeichnis die Ausgabe von pg_ctl in eine Datei namens "pg_ctl.log" geschrieben wird. Diese Datei kann zum Beispiel dabei helfen, Fehler in der Konfiguration von PostgreSQL zu finden.

data-directory (Vorgabe: "/var/lib/postgresql/data")

Das Verzeichnis, in dem die Daten gespeichert werden sollen.

extension-packages (Vorgabe: '())

Zusätzliche Erweiterungen werden aus den unter extension-packages aufgeführten Paketen geladen. Erweiterungen sind zur Laufzeit verfügbar. Zum Beispiel kann ein Nutzer den postgresql-service-Dienst wie in diesem Beispiel konfigurieren, um eine geografische Datenbank mit Hilfe der postgis-Erweiterung zu erzeugen:

(use-package-modules databases geo)

(operating-system
  
  ;; postgresql wird benötigt, um „psql“ auszuführen, aber postgis ist
  ;; für den Betrieb nicht unbedingt notwendig.
  (packages (cons* postgresql %base-packages))
  (services
    (cons*
      (service postgresql-service-type
               (postgresql-configuration
                (postgresql postgresql-10)
                (extension-packages (list postgis))))
      %base-services)))

Dann wird die Erweiterung sichtbar und Sie können eine leere geografische Datenbak auf diese Weise initialisieren:

psql -U postgres
> create database postgistest;
> \connect postgistest;
> create extension postgis;
> create extension postgis_topology;

Es ist nicht notwendig, dieses Feld für contrib-Erweiterungen wie hstore oder dblink hinzuzufügen, weil sie bereits durch postgresql geladen werden können. Dieses Feld wird nur benötigt, um Erweiterungen hinzuzufügen, die von anderen Paketen zur Verfügung gestellt werden.

Datentyp: postgresql-config-file

Der Datentyp, der die Konfigurationsdatei von PostgreSQL repräsentiert. Wie im folgenden Beispiel gezeigt, kann er benutzt werden, um die Konfiguration von PostgreSQL anzupassen. Es sei darauf hingewiesen, dass Sie jeden beliebigen G-Ausdruck oder Dateinamen anstelle dieses Verbunds angeben können, etwa wenn Sie lieber eine bestehende Konfigurationsdatei benutzen möchten.

(service postgresql-service-type
         (postgresql-configuration
          (config-file
           (postgresql-config-file
            (log-destination "stderr")
            (hba-file
             (plain-file "pg_hba.conf"
                         "
local	all	all			trust
host	all	all	127.0.0.1/32 	md5
host	all	all	::1/128 	md5"))
            (extra-config
             '(("session_preload_libraries"     "auto_explain")
               ("random_page_cost"              2)
               ("auto_explain.log_min_duration" "100 ms")
               ("work_mem"                      "500 MB")
               ("logging_collector"             #t)
               ("log_directory"                 "/var/log/postgresql")))))))
log-destination (Vorgabe: "syslog")

Welche Protokollierungsmethode für PostgreSQL benutzt werden soll. Hier können mehrere Werte kommagetrennt angegeben werden.

hba-file (Vorgabe: %default-postgres-hba)

Ein Dateiname oder G-Ausdruck für die Konfiguration der Authentifizierung durch den Server („Host-based Authentication“).

ident-file (Vorgabe: %default-postgres-ident)

Ein Dateiname oder G-Ausdruck für die Konfiguration der Benutzernamensabbildung („User name mapping“).

socket-directory (Vorgabe: #false)

Gibt an, in welchem Verzeichnis der oder die Unix-Socket(s) zu finden sind, auf denen PostgreSQL auf Verbindungen von Client-Anwendungen lauscht. Ist dies auf "" gesetzt, so lauscht PostgreSQL auf gar keinem Unix-Socket, so dass Verbindungen zum Server nur mit TCP/IP-Sockets aufgebaut werden können.

Der Vorgabewert #false bedeutet, dass der voreingestellte Wert von PostgreSQL benutzt wird. Derzeit ist die Voreinstellung ‘/tmp’.

extra-config (Vorgabe: '())

Eine Liste zusätzlicher Schlüssel-Wert-Kombinationen, die in die PostgreSQL-Konfigurationsdatei aufgenommen werden sollen. Jeder Eintrag in der Liste muss eine Liste von Listen sein, deren erstes Element dem Schlüssel entspricht und deren übrige Elemente die Werte angeben.

Als Werte können Zahlen, Boolesche Ausdrücke oder Zeichenketten dienen. Sie werden auf die Parametertypen von PostgreSQL, Boolean, String, Numeric, Numeric with Unit und Enumerated, abgebildet, die hier beschrieben werden.

Scheme-Variable: postgresql-role-service-type

Mit diesem Dienst können PostgreSQL-Rollen und -Datenbanken erzeugt werden, nachdem der PostgreSQL-Dienst gestartet worden ist. Hier ist ein Beispiel, wie man ihn benutzt.

(service postgresql-role-service-type
            (postgresql-role-configuration
             (roles
              (list (postgresql-role
                     (name "test")
                     (create-database? #t))))))

Dieser Dienst kann mit weiteren Rollen erweitert werden, wie in diesem Beispiel:

(service-extension postgresql-role-service-type
                   (const (postgresql-role
                           (name "alice")
                           (create-database? #t))))
Datentyp: postgresql-role

PostgreSQL verwaltet Zugriffsrechte auf Datenbanken mit dem Rollenkonzept. Eine Rolle kann als entweder ein Datenbanknutzer oder eine Gruppe von Datenbanknutzern verstanden werden, je nachdem, wie die Rolle eingerichtet wurde. Rollen können Eigentümer von Datenbankobjekten sein (zum Beispiel von Tabellen) und sie können anderen Rollen Berechtigungen auf diese Objekte zuweisen oder steuern, wer auf welche Objekte Zugriff hat.

name

Der Rollenname.

permissions (Vorgabe: '(createdb login))

Die Liste der Berechtigungen der Rolle. Unterstützte Berechtigungen sind bypassrls, createdb, createrole, login, replication und superuser.

create-database? (Vorgabe: #f)

Ob eine Datenbank mit demselben Namen wie die Rolle erzeugt werden soll.

Datentyp: postgresql-role-configuration

Der Datentyp, der die Konfiguration des postgresql-role-service-type repräsentiert.

host (Vorgabe: "/var/run/postgresql")

Mit welchem PostgreSQL-Host eine Verbindung hergestellt werden soll.

log (Vorgabe: "/var/log/postgresql_roles.log")

Der Dateiname der Protokolldatei.

roles (Vorgabe: '())

Welche PostgreSQL-Rollen von Anfang an erzeugt werden sollen.

MariaDB/MySQL

Scheme-Variable: mysql-service-type

Dies ist der Diensttyp für einen Datenbankserver zu MySQL oder MariaDB. Sein Wert ist ein mysql-configuration-Objekt, das das zu nutzende Paket sowie verschiedene Einstellungen für den mysqld-Daemon festlegt.

Datentyp: mysql-configuration

Der Datentyp, der die Konfiguration des mysql-service-type repräsentiert.

mysql (Vorgabe: mariadb)

Das Paketobjekt des MySQL-Datenbankservers; es kann entweder mariadb oder mysql sein.

Für MySQL wird bei der Aktivierung des Dienstes ein temporäres Administratorpasswort („root“-Passwort) angezeigt. Für MariaDB ist das „root“-Passwort leer.

bind-address (Vorgabe: "127.0.0.1")

Auf welcher IP-Adresse auf Verbindungen gelauscht wird. Benutzen Sie "0.0.0.0", wenn sich der Server an alle verfügbaren Netzwerkschnittstellen binden soll.

port (Vorgabe: 3306)

Der TCP-Port, auf dem der Datenbankserver auf eingehende Verbindungen lauscht.

socket (Vorgabe: "/run/mysqld/mysqld.sock")

Welche Socket-Datei für lokale Verbindungen (die also nicht über ein Netzwerk laufen) benutzt wird.

extra-content (Vorgabe: "")

Weitere Einstellungen für die Konfigurationsdatei my.cnf.

auto-upgrade? (Vorgabe: #t)

Ob nach dem Starten des Dienstes mysql_upgrade automatisch ausgeführt werden soll. Das ist nötig, um das Systemschema nach „großen“ Aktualisierungen auf den neuen Stand zu bringen (etwa beim Umstieg von MariaDB 10.4 auf 10.5), aber Sie können es abschalten, wenn Sie das lieber manuell vornehmen.

Memcached

Scheme-Variable: memcached-service-type

Dies ist der Diensttyp für den Memcached-Dienst, der einen verteilten Zwischenspeicher im Arbeitsspeicher (einen „In-Memory-Cache“) zur Verfügung stellt. Der Wert dieses Dienstes ist ein memcached-configuration-Objekt.

(service memcached-service-type)
Datentyp: memcached-configuration

Der Datentyp, der die Konfiguration von memcached repräsentiert.

memcached (Vorgabe: memcached)

Das Memcached-Paket, das benutzt werden soll.

interfaces (Vorgabe: '("0.0.0.0"))

Auf welchen Netzwerkschnittstellen gelauscht werden soll.

tcp-port (Vorgabe: 11211)

Der Port, auf dem Verbindungen akzeptiert werden.

udp-port (Vorgabe: 11211)

Der Port, auf dem UDP-Verbindungen akzeptiert werden. Ist der Wert 0, wird nicht auf einem UDP-Socket gelauscht.

additional-options (Vorgabe: '())

Zusätzliche Befehlszeilenoptionen, die an memcached übergeben werden.

Redis

Scheme-Variable: redis-service-type

Dies ist der Diensttyp für den Schlüssel-/Wert-Speicher Redis, dessen Wert ein redis-configuration-Objekt ist.

Datentyp: redis-configuration

Der Datentyp, der die Konfiguration von redis repräsentiert.

redis (Vorgabe: redis)

Das zu benutzende Redis-Paket.

bind (Vorgabe: "127.0.0.1")

Die Netzwerkschnittstelle, auf der gelauscht wird.

port (Vorgabe: 6379)

Der Port, auf dem Verbindungen akzeptiert werden. Ist der Wert 0, wird das Lauschen auf einem TCP-Socket deaktiviert.

working-directory (Vorgabe: "/var/lib/redis")

Das Verzeichnis, in dem die Datenbank und damit zu tun habende Dateien gespeichert werden.


Nächste: , Vorige: , Nach oben: Dienste   [Inhalt][Index]