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.