Datenbank – MariaDB v10.0

Eine stabile Datenbank ist die Grundvoraussetzung für die meisten Web-Anwendungen. Es wird mittlerweile so viel Information in Datenbanken abgelegt…
MySQL hat sich im laufe der Jahre als Quasi-Standard etabliert. Nach einer unglücklichen Verkaufsaktion – erst an SUN und SUN dann an Oracle – ist die Meinung der Community sehr gespalten. Die „Enterprise“-Funktionen bekommt man nur gegen Geld. Und auch auf den Bug-Tracker haben nur zahlende Kunden Zugriff.
Da hat der ursprüngliche Erfinder von MySQL dann ein neues Projekt ins Leben gerufen: MariaDB. Das Knoff-Hoff ist also vorhanden. Darüber hinaus ist MariaDB vollständig kompatibel zu MySQL und echte, quelloffene Software. Darum möchte ich für die Datenbank auf dieses Projekt setzen.

Nicht nur ich setze auf MariaDB. Eine ganze Latte an großen Firmen und Organisationen benutzen es auch. Mozilla zum Beispiel.

MariaDB können wir uns momentan in drei Versionen besorgen
v5.5 – stable – basiert auf MySQL 5.3
v10.0 – stable – basiert auf MySQL 5.6 und eigenen Erweiterungen
v10.1 – development = unstable = Beta

Wenn schon, denn schon. Also nehme ich v10.0 :)
Hier gibt es für technisch interessierte noch weitere Informationen zum Projekt und den eigenen Entwicklungen:
https://mariadb.com/kb/en/mariadb/what-is-mariadb-100/

Voll kompatibel?

Von der MariaDB Foundation wird ihre Datenbank als „drop in replacement“ für MySQL bezeichnet. Die Anwendungen bekommen vom Wechsel auf MariaDB nichts mit. Alle Schnittstellen, Programme und Befehle sind 1:1 übernommen worden. Das funktioniert, weil die Datenbank intern wie eine „Black Box“ arbeitet. Die Webanwendung sagt zur Datenbank-Schnittstelle „hol mir von DB ‚xy‘ aus Zeile ‚1523‘ die Spalte ‚Content'“. Wie GENAU das die Datenbank macht, ist dem System dabei egal. Es bekommt seine Daten. Und darum kann MariaDB auch intern ganz andere Datenbankmotoren am Laufen haben als MySQL – so lange die Webanwendung eine gültige Antwort auf seine Anfrage erhält, ist das vollkommen wurscht, wie die Datenbank das INTERN regelt…

MariaDB installieren

Aber woher nehmen, wenn nicht stehlen?
Schauen wir mal, ob wir MariaDB herzaubern können:

apt-cache search maria
libmng1 – Bibliothek für Multiple-image Network Graphics (MGN, Mehrbild-Netzwerkgrafiken)
libmng-dev – M-N-G-Bibliothek (Entwicklungs-Header)
maria – Erreichbarkeitsanalyse für Netze algebraischer Systeme
maria-doc – Dokumentation zu Maria

NIX MariaDB :/
Sie ist leider nicht über Debian 7 Standard-Repositories zu bekommen.

Aber die Jungs von MariaDB haben eine klasse Internetseite. Über folgende Adresse kannst Du Dir die Befehle zum hinzufügen der MariaDB-Repositories ausgeben lassen:
https://downloads.mariadb.org/mariadb/repositories/

Ich hab mich bei der Auswahl für Debian | Version 7 | MariaDB v10.0 | Mirror: Deutschland / HostEurope entschieden…

Diese Befehle fügen ein Repository (einen Download-Server) für MariaDB v10.0 zu unserem System hinzu
apt-get install python-software-properties

apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db

add-apt-repository 'deb http://ftp.hosteurope.de/mirror/mariadb.org/repo/10.0/debian wheezy main'

Haben wir das Repository hinzugefügt, installieren wir MariaDB mit folgendem Kommando
apt-get update && apt-get install mariadb-server

Jetzt kommt eine Menge an zusätzlichen Paketen, die alle zu „mariadb-server“ gehören. Wir akzeptieren die Auswahl mit „Y“ und „Enter“. Die Pakete werden geladen und installiert.

Dabei kommt drei Mal (!) die Frage nach dem root-PW. Hier drücken wir jeweils „Enter“ und entscheiden uns damit für „kein Passwort“.
Das PW wird von uns gleich im Anschluss nachgereicht…
Grund: Bei einem komplizierten PW gab es Komplikationen mit dem Install-Script von Debian.

Ist das Script durchgelaufen, ist MariaDB installiert.

MariaDB konfigurieren

Wir schalten die Unterstützung für UTF-8 ein
mariadb-mariadb-cnf
nano /etc/mysql/conf.d/mariadb.cnf
### Alle fünf UTF-8 Variablen aktiv schalten! Sprich die Raute löschen…

Starten wir die Datenbank neu, um diese Änderung zu übernehmen…
service mysql restart

Installation ‚abdichten‘ und das MariaDB-root-PW vergeben
Wir führen ein Script aus, welches automatisch die Installation von MariaDB abhärtet. Folgende Änderungen werden durchgeführt, wenn wir alle Fragen mit „Y“ beantworten. Was wir natürlich machen sollten…

  • Wir vergeben ein „sicheres“ Passwort.
  • Die anonymen Test-Benutzer werden aus der Datenbank geschmissen.
  • Es wird versucht, die Test-Datenbank zu löschen. Diese wurde aber gar nicht mitinstalliert.
  • Die Verbindung nach „außen“ wird für den root-Benutzer unterbunden. Wir benötigen sowieso nur ‚lokale‘ Verbindungen.
  • Alle Rechte werden neu eingelesen, damit sie sofort Gültigkeit erlangen.

### Die FETT gedruckten Zeichen sind die Stellen, an denen wir mit dem Script interagieren.

mysql_secure_installation

[* * * * Bildschirmausgabe * * * *]

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
you haven’t set the root password yet, the password will be blank,
so you should just press enter here.

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

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

Set root password? [Y/n] Y
New password: [Copy/Paste]
Re-enter new password: [Copy/Paste]
Password updated successfully!
Reloading privilege tables..
… Success!

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…
ERROR 1008 (HY000) at line 1: Can’t drop database ‚test‘; database doesn’t exist
… Failed! Not critical, keep moving…
– 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!

[* * * * Bildschirmausgabe ENDE * * * *]

mysqltuner laden und einmal zum Test ausführen
wget http://mysqltuner.pl/ -O mysqltuner.pl

perl mysqltuner.pl

Sicherheitskopie der my.cnf anlegen
cp /etc/mysql/my.cnf /etc/mysql/my.backup

Konfiguration von MariaDB über my.cnf anpassen
nano /etc/mysql/my.cnf

MariaDB – Settings nach https://www.percona.com/blog/2014/01/28/10-mysql-settings-to-tune-after-installation/
————————————
max_connections = 75
query_cache_size = 8M
innodb_buffer_pool_size = 256M
innodb_log_buffer_size = 8M
innodb_flush_method = O_DIRECT

### Werte sollten – bis auf ‚max_connections‘ und ‚query_cache_size‘ – eigentlich passen…

Starten wir die Datenbank neu, um diese Änderungen zu übernehmen…
service mysql restart

Ausgeabe der MariaDB Statistik
mysqladmin -p version status
Enter password: [Copy/Paste]
mysqladmin Ver 9.1 Distrib 10.0.21-MariaDB, for debian-linux-gnu on x86_64
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Server version 10.0.21-MariaDB-1~wheezy-log
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 3 min 8 sec

Threads: 1 Questions: 111 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 78 Queries per second avg: 0.590
Uptime: 188 Threads: 1 Questions: 111 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 78 Queries per second avg: 0.590

Fertig, MariaDB ist eingerichtet und läuft. War auch gar nicht tragisch :)
In den kommenden Kapiteln legen wir in der DB ein paar Benutzer und Datenbanken für die jeweiligen Web-Anwendungen an.

Datenbank tunen

Ich möchte die Datenbank die ganze Zeit an den Server anpassen. Leider findet sich wenig bis gar keine Info dazu.
Wenn ich meine Admins frage „Wie soll ich die Datenbank anpassen, dass sie auf einem Ein-Kern Server mit 1GB RAM vernünftig läuft?“ Werde ich immer schief angesehen. Da kommt dann was im Stile von „Gar nicht! Für Deine paar Text-Dateien alles auf Default lassen“. Oder die Frage „Wie viele Terabyte ist Deine Datenbank denn groß?“

Halten wir also fest:
Es macht wohl wenig bis gar keinen Sinn, bei so einem ‚Serverchen‘ und unseren ‚Datenbänkchen‘ irgendwas tunen zu wollen. Im Netz findet man auch eine Menge, wie man die Config von einem Achtkerner mit 64 GB RAM anpasst, damit die Datenbank fluppt.

Bei Kleinstservern findet man dazu nicht viel. Und das Wenige, das man findet, widerspricht sich dann auch noch zum Teil. Also lasse ich hier mal die Finger weg, bis ich irgendwo eine Erleuchtung bekomme. Oder feststelle, dass eine Änderung der Config da wirklich nicht notwendig ist ;)

Haftungsausschluss!

Bitte lies Dir den Disclaimer durch, bevor Du eine Anleitung umsetzt...

Anzeige *

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.