So installieren und konfigurieren Sie MariaDB unter Ubuntu und CentOS

Lassen Sie uns erkunden, wie man MariaDB, ein weit verbreitetes Open-Source-Datenbankmanagementsystem (RDBMS) für relationale Datenbanken, das als Alternative zu MySQL gilt, installiert und einrichtet.

MariaDB wird von einer aktiven Gemeinschaft gepflegt und bietet die Möglichkeit für kommerziellen Support. Ziel ist es, eine hohe Kompatibilität zu MySQL zu gewährleisten, obwohl es einige Unterschiede in der Funktionalität gibt.

Dieser Artikel führt Sie durch die Installations- und Konfigurationsprozesse von MariaDB auf Ubuntu 20.x und CentOS 7.x/8.x. Abschließend werden wir uns mit einigen bewährten Verfahren zur Sicherung und Leistungsoptimierung auseinandersetzen.

MariaDB unter Ubuntu

Unter Ubuntu 20.x ist MariaDB direkt aus den Standard-Repositories verfügbar. Für die Installation verwenden wir den Paketmanager `apt`.

Beginnen Sie mit der Aktualisierung der `apt`-Repository-Daten durch Ausführen des folgenden Befehls:

sudo apt update

Sobald die Repository-Daten aktuell sind, führen Sie diesen Befehl aus, um MariaDB zu installieren:

sudo apt install mariadb-server

Dieser Befehl installiert MariaDB und alle erforderlichen Abhängigkeiten. Bestätigen Sie alle Eingabeaufforderungen während der Installation mit `Y`.

Do you want to continue? [Y/n] Y

MariaDB unter CentOS 7.x

Für CentOS 7.x ist die verfügbare MariaDB-Version in den Standard-Repositories 5.x. Daher werden wir die neueste verfügbare Version von MariaDB installieren.

Dazu ist es notwendig, zuerst ein zusätzliches `yum`-Repository zu konfigurieren. MariaDB stellt mit `mariadb_repo_setup` ein Skript bereit, das den Vorgang vereinfacht. Führen Sie diese Befehle auf Ihrem CentOS 7.x System aus, um die Repository-Konfiguration zu starten:

sudo yum install wget
wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
chmod +x mariadb_repo_setup
sudo ./mariadb_repo_setup

Dieses Skript richtet das benötigte `yum`-Repository ein, um die aktuellste Version von MariaDB zu installieren. Zum Zeitpunkt des Verfassens dieses Artikels ist es Version 10.x.

Alternativ können Sie die Konfiguration auch manuell durchführen, indem Sie eine neue Repo-Datei erstellen:

sudo vi /etc/yum.repos.d/MariaDB.repo

Fügen Sie die folgenden Informationen in die Datei ein und speichern Sie sie:

[mariadb]
name = MariaDB
baseurl = https://yum.mariadb.org/10.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Installieren Sie MariaDB mit dem folgenden Befehl:

sudo yum install MariaDB-server

Bestätigen Sie die Installationshinweise mit der Eingabe von `y`:

Is this ok [y/d/N]: y

Damit ist die Installation des MariaDB-Servers und der zugehörigen Pakete abgeschlossen.

MariaDB unter CentOS 8.x

Auf CentOS 8.x ist die Standardversion aus den Repositories 10.3 oder neuer. MariaDB kann direkt mit dem `dnf`-Befehl installiert werden:

sudo dnf install mariadb-server

Um die aktuellste Version zu installieren, können Sie die manuelle Methode aus dem Abschnitt für CentOS 7.x anwenden.

MariaDB starten

Auf Ubuntu-Systemen wird der MariaDB-Dienst sofort nach der Installation gestartet. Auf CentOS müssen wir die Dienste manuell aktivieren und starten.

Unabhängig vom Betriebssystem (Ubuntu oder CentOS) verwenden Sie die folgenden Befehle zum Starten, Aktivieren beim Systemstart und zur Statusüberprüfung des MariaDB-Dienstes:

sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service
sudo systemctl status mariadb.service

Ausgabe:

sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
sudo systemctl status mariadb.service
● mariadb.service - MariaDB 10.5.8 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: active (running) since Thu 2020-12-31 13:20:04 IST; 13s ago
     Docs: man:mariadbd(8)
           https://mariadb.com/kb/en/library/systemd/
 Main PID: 13521 (mariadbd)
   Status: "Taking your SQL requests now..."
   CGroup: /system.slice/mariadb.service
           └─13521 /usr/sbin/mariadbd

Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] InnoDB: 10.5.8 started; log sequence number 45118; transaction id 20
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] Plugin 'FEEDBACK' is disabled.
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] InnoDB: Buffer pool(s) load completed at 201231 13:20:04
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] Server socket created on IP: '::'.
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] Reading of all Master_info entries succeeded
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] Added new Master_info '' to hash table
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] /usr/sbin/mariadbd: ready for connections.
Dec 31 13:20:04 centos7vm mariadbd[13521]: Version: '10.5.8-MariaDB'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MariaDB Server
Dec 31 13:20:04 centos7vm systemd[1]: Started MariaDB 10.5.8 database server.
$

MariaDB absichern

Als ersten Schritt nach der Installation sollte MariaDB abgesichert werden. Dazu gehört das Setzen eines Root-Passworts, die Deaktivierung des Remote-Root-Logins, das Entfernen der Testdatenbank und anonymer Benutzer sowie das Aktualisieren der Berechtigungen.

Führen Sie diesen Befehl aus, um MariaDB zu härten:

sudo mysql_secure_installation

Folgen Sie den Anweisungen und beantworten Sie die Fragen mit den vorgeschlagenen Aktionen, es sei denn, Sie haben spezielle Anforderungen.

Ausgabe:

sudo mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] n
 ... skipping.

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] n
 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
$

Hier verwenden wir die Systemauthentifizierung, d.h. es wird kein separates Root-Passwort für MariaDB eingerichtet, da es bereits sicher ist. Bei Bedarf können Sie jedoch jederzeit ein separates Root-Passwort setzen.

Einrichtung überprüfen

Um die MariaDB-Installation zu testen, führen Sie folgenden Befehl aus (geben Sie das Passwort ein, das während `mysql_secure_installation` festgelegt wurde, oder verwenden Sie die System-Root-Anmeldedaten, falls dieser Schritt übersprungen wurde):

sudo mysqladmin -u root -p version
Enter password:
mysqladmin  Ver 9.1 Distrib 10.5.8-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Server version          10.5.8-MariaDB
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/lib/mysql/mysql.sock
Uptime:                 53 min 17 sec

Threads: 2  Questions: 77  Slow queries: 0  Opens: 20  Open tables: 14  Queries per second avg: 0.024
$

Sie können ein neues Administratorkonto anstelle des Root-Kontos einrichten (ersetzen Sie ‚password‘ durch ein sicheres Passwort):

sudo mariadb
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 44
Server version: 10.5.8-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]> GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
Query OK, 0 rows affected (0.003 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> exit
Bye
$

Testen Sie den Zugang mit dem neuen Admin-Benutzer (geben Sie das zuvor festgelegte Passwort ein):

mysqladmin -u admin -p version
Enter password:
mysqladmin  Ver 9.1 Distrib 10.5.8-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Server version          10.5.8-MariaDB
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/lib/mysql/mysql.sock
Uptime:                 56 min 59 sec

Threads: 2  Questions: 83  Slow queries: 0  Opens: 20  Open tables: 14  Queries per second avg: 0.024
$

Betriebssystemoptimierung

Nach der Installation und Sicherung von MariaDB ist es ratsam, das Betriebssystem und die Datenbank für optimale Leistung zu konfigurieren. Diese Anpassungen hängen von Ihrer Systemkonfiguration, dem Nutzungsszenario und anderen Faktoren ab.

Aus Sicht des Betriebssystems können einige Systemparameter für MariaDB angepasst werden. Diese werden wir nun näher betrachten.

Linux-Kernel-Einstellungen – IO-Scheduler

Die empfohlenen IO-Scheduler für MariaDB sind „noop“ und „deadline“. Verwenden Sie den Befehl `cat /sys/block/${DEVICE}/queue/scheduler` zur Überprüfung:

sudo cat /sys/block/sda/queue/scheduler
[mq-deadline] kyber bfq none
$

Eine temporäre Änderung kann mit diesem Befehl erreicht werden:

sudo echo noop > /sys/block/sda/queue/scheduler

Um die Änderung dauerhaft zu machen, muss der Parameter in der GRUB-Konfigurationsdatei `/etc/default/grub` konfiguriert, GRUB aktualisiert und das System neu gestartet werden:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"

Ressourcenlimits – Limit für offene Dateien

Linux begrenzt standardmäßig die Anzahl der Dateideskriptoren, die jeder Prozess öffnen darf. Bei einem aktiv genutzten Datenbanksystem kann diese Grenze leicht erreicht werden, was die Leistung beeinträchtigt. Das Standardlimit ist auf vielen Systemen auf 1024 gesetzt. Es gibt jeweils eine Option für ein weiches und ein hartes Limit.

Um das Limit zu erhöhen, fügen Sie folgende Zeilen in `/etc/security/limits.conf` ein:

mysql soft nofile 65535
mysql hard nofile 65535

Ein Neustart des Systems ist erforderlich, damit der MySQL-Benutzer die neuen Limits verwenden kann. Die Limits können Sie mit folgenden Befehlen überprüfen:

ulimit -Sn
65535
ulimit -Hn
65535

Ressourcenlimits – Kerndateigröße

Linux begrenzt die Größe von Kerndateien, wie im vorherigen Fall. Auch hier gibt es ein weiches und ein hartes Limit. Standardmäßig ist das Soft-Limit auf 0 gesetzt, was die Generierung von Kerndateien deaktiviert. Um die Kerndatei-Generierung zu aktivieren (weitere Konfigurationen, die für Core-Dumps benötigt werden), können wir den Wert in `/etc/security/limits.conf` erhöhen:

mysql soft core unlimited
mysql hard core unlimited

Nach einem Neustart des Systems kann der MySQL-Benutzer die neuen Werte mit dem `ulimit`-Befehl einsehen:

ulimit -Sc
unlimited
ulimit -Hc
unlimited

Swapiness konfigurieren

Der Swapiness-Wert in Linux legt fest, wie wahrscheinlich es ist, dass das System eine Seite vom RAM in den Swap-Bereich auslagert. Der Standardwert ist 60, was mit folgendem Befehl überprüft werden kann:

sysctl vm.swappiness

Der Wert kann zwischen 0 und 100 liegen, wobei ein niedrigerer Wert eine geringere Auslagerungswahrscheinlichkeit bedeutet. Auf einem Datenbankserver, auf dem nur MariaDB läuft, ist es wünschenswert, diesen Wert auf 0 zu setzen, um die Nutzung des Swaps so weit wie möglich zu vermeiden. Beachten Sie, dass die Einstellung eines Swappiness-Werts von 0 mit Vorsicht erfolgen sollte, da bei hoher Speicherauslastung der Kernel Prozesse aufgrund von Out-of-Memory-Fehlern beenden kann.

Da für Datenbanken und somit auch für MariaDB-Datenbanken eine geringe Swapiness empfohlen wird, wird die Einstellung auf 1 empfohlen. Fügen Sie folgende Zeile in `/etc/sysctl.conf` hinzu, um die Änderung dauerhaft zu machen:

vm.swappiness = 1

Die Änderungen werden nach dem Neustart des Systems wirksam, können aber mit diesem Befehl auch sofort aktiviert werden:

sysctl -w vm.swappiness=1

Dateisystemoptimierung

Für MariaDB gelten ext4, XFS und Btrfs als die geeignetsten Dateisysteme unter Linux. Alle diese Dateisysteme sind in den Haupt-Linux-Kernel integriert und werden umfassend unterstützt. Jedes dieser Dateisysteme hat seine eigenen Charakteristika und kann nach einer sorgfältigen Bewertung der Anforderungen ausgewählt werden.

Außerdem ist die Aufzeichnung der Dateizugriffszeit auf einem Datenbankserver meist nicht notwendig. Dies kann deaktiviert werden, um die Leistung zu verbessern. Sie können das Dateisystem mit der Option `noatime` mounten oder die Mount-Option in der `/etc/fstab` Datei hinzufügen, um die Änderung dauerhaft zu machen.

Datenbankoptimierung

Es gibt mehrere Parameter innerhalb von MariaDB, die basierend auf den Anforderungen und Bedürfnissen angepasst werden können.

Hier werden wir einige davon erläutern.

MariaDB wird primär über die Datei `my.cnf` konfiguriert.

Unter Ubuntu finden Sie `my.cnf` unter:

/etc/mysql/my.cnf

Auf CentOS ist sie hier zu finden:

/etc/my.cnf

Eine ausführliche Dokumentation zu allen Variablen, die in der Konfigurationsdatei zur Leistungsoptimierung genutzt werden können, finden Sie hier.

Ein Großteil hängt auch von der verwendeten MariaDB Engine, wie beispielsweise MyISAM, InnoDB oder XtraDB ab. Alle haben ihre jeweiligen Vor- und Nachteile und die Auswahl hängt von den Datenbank- und Anwendungsanforderungen ab.

Die `innodb_buffer_pool_size` sollte auf etwa 80 % des verfügbaren Arbeitsspeichers gesetzt werden. So wird sichergestellt, dass 80 % des aktiven Datensatzes im RAM gehalten werden.

Weitere wichtige Parameter sind:

innodb_log_file_size
innodb_flush_method
innodb_thread_sleep_delay
innodb_adaptive_max_sleep_delay
innodb_buffer_pool_instances
innodb_buffer_pool_size
innodb_max_dirty_pages_pct_lwm
innodb_read_ahead_threshold
innodb_thread_concurrency

Detailliertere Informationen zur Optimierung von InnoDB- oder XtraDB-Variablen finden Sie hier. Eine vollständige Übersicht aller verfügbaren MariaDB-Tuning-Optionen finden Sie hier.

Wenn Sie sich dafür interessieren, finden Sie hier Ressourcen, um mehr über SQL und NoSQL zu lernen.

Fazit

MariaDB ist eine der beliebtesten Optionen für relationale Datenbankmanagementsysteme (RDBMS). Die Open-Source-Natur und eine engagierte Community tragen ebenfalls dazu bei.

Weitere Informationen finden Sie in der Dokumentation. Dort finden Sie auch Themen zu grundlegenden SQL, Migration, MariaDB-Administration, Hochverfügbarkeit, Leistungsoptimierung, Storage-Engines, Programmierung und Anpassung. Sie können die binäre Protokollierung auch deaktivieren, wenn Sie keinen Cluster verwenden.