PostgreSQL Installation und Grundlegende Verwaltung
PostgreSQL auf Ubuntu/Debian und RHEL/CentOS installieren: Benutzer und Datenbanken anlegen, SQL-Grundbefehle, Remote-Verbindungen und Backup-Strategien.
MySQL und MariaDB Schritt für Schritt: mysql_secure_installation, Datenbanken und Benutzer, SQL-Grundbefehle, Remote-Zugriff und Performance-Tuning.
MySQL und MariaDB sind die weltweit am häufigsten verwendeten relationalen Datenbankverwaltungssysteme. Die große Mehrheit der Webanwendungen, E-Commerce-Websites und Unternehmenssysteme verwendet eines dieser Datenbanksysteme. Dieser Leitfaden behandelt die Installation, grundlegende Konfiguration und Verwaltung beider Systeme.
MariaDB ist ein Community-Fork, der von den ursprünglichen MySQL-Entwicklern erstellt wurde. Wesentliche Unterschiede:
| Merkmal | MySQL | MariaDB |
|---|---|---|
| Lizenz | GPL + Kommerziell | GPL (vollständig offen) |
| Entwickler | Oracle | MariaDB Foundation |
| Performance | Gut | Generell schneller |
| Kompatibilität | Referenz | MySQL-kompatibel |
| Neue Features | Langsamer | Schnellerer Release-Zyklus |
MariaDB wird für neue Projekte empfohlen. Es ist vollständig MySQL-kompatibel und bietet generell bessere Performance. Die Migration von MySQL zu MariaDB ist unkompliziert.
# Paketliste aktualisieren
apt update
# MySQL Server installieren
apt install -y mysql-server
# Dienststatus prüfen
systemctl status mysql
# Autostart aktivieren
systemctl enable mysql
mysql --version
# Ausgabe: mysql Ver 8.0.xx Distrib 8.0.xx, for Linux (x86_64)
# Paketliste aktualisieren
apt update
# MariaDB Server installieren
apt install -y mariadb-server mariadb-client
# Dienststatus prüfen
systemctl status mariadb
# Autostart aktivieren
systemctl enable mariadb
# Version prüfen
mysql --version
# MariaDB-Repository hinzufügen
curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash
# MariaDB installieren
dnf install -y MariaDB-server MariaDB-client
# Dienst starten und aktivieren
systemctl start mariadb
systemctl enable mariadb
Führen Sie nach der Installation immer den Sicherheitsassistenten aus:
mysql_secure_installation
Der Assistent stellt folgende Fragen:
Enter current password for root (enter for none): [Enter]
Switch to unix_socket authentication [Y/n]: n
Change the root password? [Y/n]: Y
New password: [Starkes Passwort eingeben]
Re-enter new password: [Passwort wiederholen]
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y
Deaktivieren Sie den Remote-Root-Zugriff. Erstellen Sie separate Benutzer für Remote-Verbindungen. Verwenden Sie starke Passwörter (mindestens 12 Zeichen mit Groß-/Kleinbuchstaben, Zahlen und Sonderzeichen).
# Als Root verbinden
mysql -u root -p
# Mit bestimmter Datenbank verbinden
mysql -u benutzer -p datenbankname
# Mit Remote-Server verbinden
mysql -h 192.168.1.100 -u benutzer -p datenbankname
# Mit bestimmtem Port verbinden
mysql -h server -P 3306 -u benutzer -p
-- Datenbank erstellen
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- Alle Datenbanken auflisten
SHOW DATABASES;
-- Datenbank auswählen
USE myapp;
-- Datenbank löschen (Vorsicht!)
DROP DATABASE alte_datenbank;
-- Datenbankgröße prüfen
SELECT table_schema AS 'Datenbank',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Größe (MB)'
FROM information_schema.tables
GROUP BY table_schema;
-- Benutzer erstellen (nur localhost)
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StarkesPW123!';
-- Benutzer erstellen (Remote-Zugriff)
CREATE USER 'appuser'@'%' IDENTIFIED BY 'StarkesPW123!';
-- Zugriff von bestimmter IP
CREATE USER 'appuser'@'192.168.1.50' IDENTIFIED BY 'StarkesPW123!';
-- Vollzugriff auf Datenbank gewähren
GRANT ALL PRIVILEGES ON myapp.* TO 'appuser'@'localhost';
-- Nur Lesezugriff gewähren
GRANT SELECT ON myapp.* TO 'readonly'@'localhost';
-- Berechtigungen auf bestimmte Tabelle
GRANT SELECT, INSERT, UPDATE ON myapp.users TO 'appuser'@'localhost';
-- Berechtigungen anwenden
FLUSH PRIVILEGES;
-- Benutzerberechtigungen anzeigen
SHOW GRANTS FOR 'appuser'@'localhost';
-- Benutzer löschen
DROP USER 'alter_benutzer'@'localhost';
-- Tabelle erstellen
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Daten einfügen
INSERT INTO users (username, email) VALUES ('hans', 'hans@example.com');
-- Daten abfragen
SELECT * FROM users;
SELECT username, email FROM users WHERE id = 1;
-- Daten aktualisieren
UPDATE users SET email = 'neu@example.com' WHERE id = 1;
-- Daten löschen
DELETE FROM users WHERE id = 5;
-- Tabellen auflisten
SHOW TABLES;
-- Tabellenstruktur anzeigen
DESCRIBE users;
Standardmäßig akzeptiert MySQL/MariaDB nur Verbindungen von localhost. Für Remote-Zugriff:
# Für MySQL
nano /etc/mysql/mysql.conf.d/mysqld.cnf
# Für MariaDB
nano /etc/mysql/mariadb.conf.d/50-server.cnf
# bind-address Zeile ändern oder auskommentieren
# bind-address = 127.0.0.1
bind-address = 0.0.0.0
systemctl restart mysql
# oder
systemctl restart mariadb
# Mit UFW
ufw allow 3306/tcp
# Mit iptables
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
Den MySQL-Port (3306) ins Internet zu öffnen ist ein Sicherheitsrisiko. Verwenden Sie wenn möglich SSH-Tunneling oder VPN. Wenn Remote-Zugriff erforderlich ist, beschränken Sie ihn auf bestimmte IP-Adressen.
nano /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
# InnoDB Buffer Pool (70-80% des RAM)
innodb_buffer_pool_size = 1G
# Verbindungspool
max_connections = 150
# Temporäre Tabellengröße
tmp_table_size = 64M
max_heap_table_size = 64M
# Slow Query Log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
systemctl restart mysql
# Variablen prüfen
mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"
# Dienst starten
systemctl start mysql
# Dienst stoppen
systemctl stop mysql
# Dienst neu starten
systemctl restart mysql
# Konfiguration neu laden
systemctl reload mysql
# Dienststatus prüfen
systemctl status mysql
# Logs anzeigen
journalctl -u mysql -f
tail -f /var/log/mysql/error.log
MySQL und MariaDB sind leistungsstarke und zuverlässige Datenbanksysteme. Vernachlässigen Sie nach der Installation nicht die Sicherheitskonfiguration, führen Sie regelmäßige Backups durch und optimieren Sie die Performance-Einstellungen entsprechend den Ressourcen Ihres Servers. Beide Systeme laufen problemlos auf REXE-Servern.
MariaDB wird für neue Projekte empfohlen. Es ist vollständig MySQL-kompatibel, bietet generell bessere Performance und ist vollständig Open Source. Ihre bestehenden MySQL-Anwendungen laufen ohne Änderungen auf MariaDB. Wenn Sie jedoch Oracle-spezifische MySQL-Features benötigen (Group Replication, MySQL Shell), wählen Sie MySQL.
Starten Sie MySQL im Safe-Modus: Führen Sie systemctl stop mysql aus, dann mysqld_safe --skip-grant-tables &. Verbinden Sie sich mit mysql -u root und führen Sie ALTER USER 'root'@'localhost' IDENTIFIED BY 'NeuesPasswort'; aus. Führen Sie abschließend FLUSH PRIVILEGES; aus und starten Sie den Dienst normal neu.
Prüfen Sie drei Dinge: 1) Stellen Sie sicher, dass bind-address auf 0.0.0.0 gesetzt ist, 2) Prüfen Sie, ob der Benutzer mit '%' oder der spezifischen IP erstellt wurde (SHOW GRANTS FOR 'user'@'%'), 3) Stellen Sie sicher, dass Port 3306 in der Firewall geöffnet ist (ufw status oder iptables -L).
Setzen Sie ihn auf 70-80% des gesamten RAM Ihres Servers. Zum Beispiel 2-3GB für 4GB RAM, 5-6GB für 8GB RAM. Wenn der Server ausschließlich für die Datenbank verwendet wird, können Sie bis zu 80% gehen. Vergessen Sie nicht, den Dienst nach Änderungen neu zu starten.
Technisch möglich, aber nicht empfohlen. Beide verwenden standardmäßig Port 3306 und es kommt zu Konflikten. Sie können einen auf einen anderen Port verschieben, aber das schafft Komplexität. Im Allgemeinen ist es besser, eines zu wählen und dabei zu bleiben.
PostgreSQL auf Ubuntu/Debian und RHEL/CentOS installieren: Benutzer und Datenbanken anlegen, SQL-Grundbefehle, Remote-Verbindungen und Backup-Strategien.
Redis und Memcached auf Ubuntu/Debian: Grundbefehle, Persistenz, TTL-Konfiguration, beide im Vergleich und Integration in Anwendungen.
Schritt-fur-Schritt phpMyAdmin Installation auf Apache und Nginx, SSL-Konfiguration, Benutzerverwaltung, IP-Einschraenkungen und Sicherheitshaertung.