[[Vorlage(Getestet, bionic, jammy)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Programme_starten: Starten von Programmen] [:Terminal: Ein Terminal öffnen] [:sudo: Root-Rechte] [:Dienste: Dienste steuern] [:Logdateien: Logdateien lesen] [:Editor:einen Editor öffnen] }}} [[Inhaltsverzeichnis()]] [[Bild(./MariaDB_Logo.png, 115, align=left)]] [wikipedia:MariaDB:] ist eine Abspaltung (Fork) von [:MySQL:]. Diese wurde entwickelt, nachdem [wikipedia:Oracle:] [wikipedia:Sun Microsystems:] im Jahre 2010 übernommen hatte. MariaDB ist größtenteils kompatibel mit MySQL und kann MySQL meist ohne Probleme ersetzen (API-kompatibel). Es werden die Prozessorarchitekturen [wikipedia:x86:] und [wikipedia:AMD64:] unterstützt. Unterschiede zwischen MySQL und MariaDB: * MariaDB verwendet die "Storage-Engine" XtraDB als Ersatz für InnoDB. * Es gibt weitere "Storage-Engines": OQGRAPH, SphinxSE, IBMDB2I, Cassandra und Aria (Ersatz für MyISAM). * Alphanumerische Felder in Heap-Tabellen können eine Größe von 256 Zeichen übersteigen. * Unterstützung von [https://kb.askmonty.org/en/pool-of-threads/ Pool of Threads] {en}, um auch mit 200000+ Verbindungen noch hohe Geschwindigkeit zu garantieren * "sub queries" sind nun benutzbar. * Es gibt nun [https://kb.askmonty.org/en/group-commit-for-the-binary-log/ Group commits] {en}. = Installation = {{{#!vorlage Hinweis Man kann nicht gleichzeitig MariaDB und [:MySQL:] installiert haben, es sei denn, man installiert die Datenbank manuell. Wer es ausprobieren möchte, sollte sich [https://kb.askmonty.org/en/mariadb-coexist-with-mysql/ MariaDB coexist with MySQL] {en} ansehen. Es ist allerdings anzumerken, dass es nicht zu empfehlen ist, diese Konstellation produktiv einzusetzen, da sie ungetestet ist. }}} MariaDB ist in der Standard-Version (ohne Galera-Cluster) seit [:Trusty:Ubuntu 14.04] in den offiziellen Paketquellen enthalten. == Einzelinstallation == Installation ohne Interaktionen mit anderen MariaDB-Installationen: {{{#!vorlage Paketinstallation mariadb-server, universe }}} = Konfiguration = == Root-Passwort setzen == Bei der Installation wird kein Root-Passwort vergeben und man kann sich einfach mit der Konsoleneingabe {{{#!vorlage Befehl sudo mysql -u root }}} als `root` einloggen (statt `mysql` funktioniert auch `mariadb`). Ohne Root-Passwort kann man sich aber nur lokal oder per SSH-Shell auf das DBMS aufschalten. Sinnvoll ist es daher, ein Root-Passwort vorzugeben. Dazu meldet man sich lokal oder per SSH-Shell als `root` an dem DBMS an und setzt dann ein Passwort: {{{#!vorlage Befehl sudo mysql -u root MariaDB [(none)]> update mysql.user set password=password('geheim') where user='root'; MariaDB [(none)]> flush privileges; }}} In neueren Versionen der MariaDB (>= 10.4, eventuell auch schon vorher) funktioniert der obige Befehl nicht mehr, dann ist der folgende Befehl zu verwenden: {{{#!vorlage Befehl sudo mysql -u root MariaDB [(none)]> SET PASSWORD FOR root@localhost = PASSWORD('geheim'); MariaDB [(none)]> flush privileges; }}} In einigen Konstellationen ist es erforderlich, ein Login-Plugin von MariaDB zu entfernen, damit die Anmeldung tatsächlich funktioniert. Sollte die Meldung {{{ ERROR 1698 (28000): Access denied for user 'root'@'localhost' }}} trotz Setzen eines Passworts erscheinen, so ist zumeist ein unix-socket-Plugin aktiv, das deaktiviert werden muss. {{{ MariaDB [(none)]> use mysql MariaDB [mysql]> SELECT user, plugin FROM user; +------+-------------+ | user | plugin | +------+-------------+ | root | unix_socket | +------+-------------+ }}} Das Standardauthentifizierungsverfahren ist "mysql_native_password". Es erfordert keine zusätzliche Installation und kann wie folgt genutzt werden: {{{#!vorlage Befehl MariaDB [(none)]> UPDATE mysql.user SET plugin='mysql_native_password' WHERE user='root'; }}} == Passwortloses Arbeiten == Um SQL-Befehle auszuführen, ohne sich jedes Mal bei MariaDB anmelden zu müssen, kann man im [:Homeverzeichnis:] die Datei '''~/.my.cnf''' mit folgenden Inhalt anlegen: {{{ [client] host = localhost user = BENUTZERNAME password = PASSWORT socket = /var/run/mysqld/mysqld.sock [mysql_upgrade] host = localhost user = BENUTZERNAME password = PASSWORT socket = /var/run/mysqld/mysqld.sock basedir = /usr }}} Danach sollte man noch die Zugriffsrechte auf den Benutzer beschränken: {{{#!vorlage Befehl chmod 600 ~/.my.cnf }}} == Remote-Zugriffe erlauben == Standardmäßig erlaubt das DBMS nur lokale Zugriffe. Möchte man auch von anderen Rechnern im Netzwerk darauf zugreifen, dann muss man die Datei '''/etc/mysql/mariadb.conf.d/50-server.cnf''' mit Root-Rechten [4][7] bearbeiten. Hier ist anstelle von {{{ bind-address = 127.0.0.1 }}} die lokale Adresse des Servers eingetragen werden; z.B.: {{{ bind-address = 192.168.0.89 }}} Um auf allen (zukünftigen) IP-Adresses zu lauschen, kann die Adresse 0.0.0.0 eingetragen werden. ___Achtung:___ Dies sollte nur in vertrauenswürdigen Netzwerk(segmenten) gemacht werden, nachdem ein sicheres Passwort eingerichtet wurde. {{{ bind-address = 0.0.0.0 }}} Danach muss der Dienst noch neu gestartet werden: {{{#!vorlage Befehl sudo service mariadb restart }}} Nun kann das DBMS über das Netzwerk angesprochen und z.B. das Web-Tool [:MySQL/Werkzeuge/#phpMyAdmin:phpMyAdmin] genutzt werden. == Ändern des Datenbank-Verzeichnisses == Das Standardverzeichnis für Datenbanken ist '''/var/lib/mysql'''. Möchte man dieses abändern, sind die folgenden Schritte notwendig. Zuerst muss die Datei '''/etc/mysql/my.cnf''' mit einem Editor mit Root-Rechten [4][7] geöffnet werden. Dort sucht man die Zeile `datadir` und ändert hier den Wert auf das neue Verzeichnis, in dem MariaDB die Datenbank-Dateien ablegen soll. Anschließend müssen die Systemdatenbanken, welche bei der Installation immer automatisch angelegt werden, vom Verzeichnis '''/var/lib/mysql''' in das neue Datenbankverzeichnis kopiert werden. Dabei ist zu beachten, dass Eigentümer und Gruppe der Dateien nicht verändert werden. Beim Wechsel von MySQL ist zusätzlich die Anpassung von '''/etc/apparmor.d/usr.sbin.mysqld''' erforderlich, da AppArmor den Zugriff auf andere Verzeichnisse unterbindet. Siehe hierfür den Artikel von [:MySQL#Datenpfad:] im Wiki. Zu beachten ist, dass per Voreinstellung die Datenbank nicht in den Verzeichnissen '''/home''', '''/root''' und '''/run/user''' angelegt werden kann. Ist dies gewünscht, muss dieses in der [:systemd/Unit:systemd Unit], die MariaDB startet, explizit erlaubt werden. Das Vorgehen ist in der [https://mariadb.com/kb/en/systemd/#configuring-access-to-home-directories Knowledgebase von MariaDB] {en} beschrieben. = Nutzung = MariaDB kann man für die verschiedensten Dinge gebrauchen. * Als Backend für diverse Webanwendungen * Um Benutzerdatenbanken zu verwalten * Abgleich von Datenmengen Einen Zugriff auf die Datenbanken kann man mit fast jeder Programmiersprache realisieren. Oftmals gibt es schon vorgefertigte Lösungen. Dank [wikipedia:SQL:] ist das Hantieren mit den Daten leicht und bequem. = Links = * [https://mariadb.org/ Projektseite] {en} * [https://kb.askmonty.org/en/ Dokumentation] {en} * [wikipedia:MariaDB:] - Wikipedia #tag: Netzwerk, Internet, Sicherheit, Server, Programmierung, Datenbank