MySQL und MariaDB sind die beliebtesten relationalen Datenbanken für Webprojekte. MariaDB ist ein Fork von MySQL und weitgehend kompatibel. In dieser Anleitung zeigen wir Installation und Absicherung.

MySQL vs. MariaDB

MariaDB wurde 2009 als Fork von MySQL gegründet, nachdem Oracle MySQL übernommen hatte. Für die meisten Anwendungsfälle sind beide austauschbar.

| Aspekt | MySQL | MariaDB | |--------|-------|---------| | Lizenz | Dual (GPL + proprietär) | GPL | | Entwicklung | Oracle | Community | | Performance | Sehr gut | Sehr gut (teils besser) | | Kompatibilität | - | MySQL-kompatibel |

Empfehlung: Für neue Projekte empfehlen wir MariaDB - vollständig Open Source und aktive Entwicklung.

Installation unter Ubuntu/Debian

MariaDB installieren

apt update
apt install mariadb-server mariadb-client

MySQL installieren

apt update
apt install mysql-server mysql-client

Dienst prüfen

systemctl status mariadb
# oder
systemctl status mysql

Grundlegende Absicherung

Nach der Installation sollten Sie unbedingt das Sicherheitsskript ausführen:

mysql_secure_installation

Das Skript fragt mehrere Sicherheitsoptionen ab:

1. Root-Passwort setzen: Unbedingt ein starkes Passwort vergeben 2. Anonyme Benutzer entfernen: Ja (empfohlen) 3. Root-Login nur lokal: Ja (empfohlen) 4. Test-Datenbank entfernen: Ja (empfohlen) 5. Rechte-Tabelle neu laden: Ja

Mit MySQL/MariaDB verbinden

Als Root-Benutzer

mysql -u root -p

Unter neueren Ubuntu/Debian-Versionen mit MariaDB:

sudo mysql

MySQL-Prompt

Nach erfolgreicher Anmeldung sehen Sie:

MariaDB [(none)]>

Beenden mit:

EXIT;

Benutzer und Datenbanken anlegen

Datenbank erstellen

CREATE DATABASE meine_app CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Benutzer erstellen

CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'sicheres_passwort';

Rechte vergeben

GRANT ALL PRIVILEGES ON meine_app.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;

Alles in einem Schritt

CREATE DATABASE meine_app CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'sicheres_passwort';
GRANT ALL PRIVILEGES ON meine_app.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;

Wichtige SQL-Befehle

Datenbanken anzeigen

SHOW DATABASES;

Benutzer anzeigen

SELECT user, host FROM mysql.user;

Datenbank auswählen

USE meine_app;

Tabellen anzeigen

SHOW TABLES;

Benutzer-Rechte anzeigen

SHOW GRANTS FOR 'appuser'@'localhost';

Backup erstellen

Einzelne Datenbank sichern

mysqldump -u root -p meine_app > meine_app_backup.sql

Alle Datenbanken sichern

mysqldump -u root -p --all-databases > alle_datenbanken.sql

Backup wiederherstellen

mysql -u root -p meine_app < meine_app_backup.sql

Remote-Zugriff einrichten

Warnung: Remote-Zugriff ist ein Sicherheitsrisiko. Nur aktivieren wenn wirklich nötig.

1. Konfiguration anpassen

Bearbeiten Sie /etc/mysql/mariadb.conf.d/50-server.cnf:

# bind-address = 127.0.0.1
bind-address = 0.0.0.0

2. Benutzer für Remote-Zugriff anlegen

CREATE USER 'remoteuser'@'%' IDENTIFIED BY 'sicheres_passwort';
GRANT ALL PRIVILEGES ON meine_app.* TO 'remoteuser'@'%';
FLUSH PRIVILEGES;

3. Firewall anpassen

ufw allow 3306/tcp

4. Dienst neustarten

systemctl restart mariadb

Besser: Statt Remote-Zugriff einen SSH-Tunnel nutzen:

ssh -L 3306:localhost:3306 user@server

Performance-Tuning Basics

Die Datei /etc/mysql/mariadb.conf.d/50-server.cnf enthält wichtige Einstellungen:

[mysqld]
# InnoDB Buffer Pool - ca. 70% des verfügbaren RAMs
innodb_buffer_pool_size = 1G

# Größere Logdateien für mehr Performance
innodb_log_file_size = 256M

# Query Cache (MariaDB < 10.1)
query_cache_size = 64M
query_cache_type = 1

Nach Änderungen:

systemctl restart mariadb

Häufige Probleme

"Access denied for user 'root'@'localhost'"

Unter neueren Systemen nutzt root oft unix_socket-Authentifizierung:

sudo mysql

Oder Passwort-Authentifizierung aktivieren:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'neues_passwort';
FLUSH PRIVILEGES;

Datenbank-Dienst startet nicht

Logdateien prüfen:

journalctl -u mariadb
tail -100 /var/log/mysql/error.log

Fazit

MySQL/MariaDB ist schnell installiert, aber die Absicherung ist wichtig. Führen Sie immer mysql_secure_installation aus, verwenden Sie separate Benutzer für jede Anwendung mit minimalen Rechten, und richten Sie regelmäßige Backups ein.