Adminer ist ein leichtgewichtiges Datenbank-Management-Tool in einer einzigen PHP-Datei. Es unterstützt MySQL, PostgreSQL, SQLite, MS SQL und Oracle.
Adminer vs phpMyAdmin
Vergleich
| Feature | Adminer | phpMyAdmin | |---------|---------|------------| | Größe | ~500 KB (1 Datei) | ~13 MB | | Installation | 1 Datei kopieren | Komplex | | Datenbanken | Multi-DB | Nur MySQL | | Design | Modern, responsiv | Klassisch | | Performance | Schneller | Langsamer | | Plugins | Ja | Ja |
Vorteile von Adminer
- Eine einzige PHP-Datei
- Unterstützt mehrere Datenbank-Typen
- Sicherer (kein Login ohne Passwort)
- Modernes, responsives Design
- Schneller durch kleineren Footprint
- Einfaches UpdateInstallation
Direkt herunterladen
# In Web-Verzeichnis wechseln
cd /var/www/html
# Adminer herunterladen
wget https://www.adminer.org/latest.php -O adminer.php
# Oder spezifische Version
wget https://github.com/vrana/adminer/releases/download/v4.8.1/adminer-4.8.1.php -O adminer.php
# Berechtigungen setzen
chown www-data:www-data adminer.php
chmod 644 adminer.phpMit allen Treibern
# MySQL-only Version
wget https://www.adminer.org/latest-mysql.php -O adminer.php
# Alle Datenbanken
wget https://www.adminer.org/latest.php -O adminer.php
# Mit englischem Interface
wget https://www.adminer.org/latest-en.php -O adminer.phpZugriff
http://server-ip/adminer.phpAbsicherung
Passwortschutz mit .htaccess
# /var/www/html/.htaccess
<Files "adminer.php">
AuthType Basic
AuthName "Adminer"
AuthUserFile /etc/apache2/.htpasswd-adminer
Require valid-user
</Files># Passwort-Datei erstellen
htpasswd -c /etc/apache2/.htpasswd-adminer adminIP-Beschränkung
# /var/www/html/.htaccess
<Files "adminer.php">
Require ip 192.168.1.0/24
Require ip 10.0.0.0/8
</Files>Nginx-Absicherung
# /etc/nginx/sites-available/default
location ~ /adminer\.php$ {
# IP-Beschränkung
allow 192.168.1.0/24;
deny all;
# Basic Auth
auth_basic "Adminer";
auth_basic_user_file /etc/nginx/.htpasswd;
# PHP-FPM
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}Umbenennen
# Schwer zu erratender Name
mv adminer.php db-$(openssl rand -hex 6).php
# Beispiel: db-a3f2c9e1.phpVerbindung
MySQL/MariaDB
Server: localhost
Benutzer: root
Passwort: ***
Datenbank: (leer für alle)PostgreSQL
System: PostgreSQL
Server: localhost:5432
Benutzer: postgres
Passwort: ***
Datenbank: mydbSQLite
System: SQLite 3
Datenbank: /pfad/zur/datenbank.dbÜber Socket
Server: localhost:/var/run/mysqld/mysqld.sockFunktionen
Datenbank-Operationen
- Datenbanken erstellen/löschen
- Tabellen verwalten
- Indizes erstellen
- Foreign Keys definieren
- Views erstellen
- Routinen/Triggers verwaltenTabellen-Operationen
- Spalten hinzufügen/ändern/löschen
- Datentypen ändern
- Indizes verwalten
- Auto-Increment setzen
- Tabellenstruktur exportierenDaten-Operationen
- Daten einfügen/bearbeiten/löschen
- Inline-Editing
- CSV/SQL Import
- JSON/XML/CSV Export
- Batch-OperationenSQL-Editor
-- SQL-Befehle direkt ausführen
SELECT * FROM users WHERE active = 1;
-- Multiple Statements
CREATE TABLE test (id INT);
INSERT INTO test VALUES (1), (2), (3);
SELECT * FROM test;Themes
Theme installieren
# Standard-Themes
cd /var/www/html
wget https://raw.githubusercontent.com/vrana/adminer/master/designs/nette/adminer.css
# Oder eigenes CSS
vim adminer.cssBeliebte Themes
# Hydra Theme
wget https://raw.githubusercontent.com/Niyko/Starter-Starter/master/adminer.css
# Dracula Theme
wget https://raw.githubusercontent.com/dracula/adminer/master/adminer.css
# Material Design
wget https://raw.githubusercontent.com/arcs-/Starter-Starter-Starter-Starter-Material-Design-Theme-for-Adminer/master/adminer.cssEigenes CSS
/* adminer.css */
body {
font-family: 'Segoe UI', sans-serif;
background: #1a1a2e;
color: #eee;
}
a {
color: #4da8da;
}
.logout {
background: #e94560;
}
input[type="submit"] {
background: #4da8da;
color: white;
border: none;
padding: 10px 20px;
cursor: pointer;
}Plugins
Plugin-Struktur
<?php
// adminer-plugin.php
function adminer_object() {
class AdminerPlugin extends Adminer {
// Überschreibungen hier
}
return new AdminerPlugin();
}
include './adminer.php';Login ohne Passwort erlauben (nur Entwicklung!)
<?php
// adminer-dev.php
function adminer_object() {
class AdminerDev extends Adminer {
function login($login, $password) {
return true; // NIEMALS in Produktion!
}
}
return new AdminerDev();
}
include './adminer.php';Standard-Server setzen
<?php
function adminer_object() {
class AdminerDefault extends Adminer {
function credentials() {
return array('localhost', 'admin', 'password');
}
function database() {
return 'mydb';
}
}
return new AdminerDefault();
}
include './adminer.php';Datenbanken filtern
<?php
function adminer_object() {
class AdminerFiltered extends Adminer {
function databases($flush = true) {
$dbs = parent::databases($flush);
// Nur bestimmte Datenbanken anzeigen
return array_filter($dbs, function($db) {
return in_array($db, ['mydb', 'app_prod']);
});
}
}
return new AdminerFiltered();
}
include './adminer.php';Tabellen ausblenden
<?php
function adminer_object() {
class AdminerHidden extends Adminer {
function tableName($tableStatus) {
// System-Tabellen ausblenden
if (preg_match('/^_/', $tableStatus['Name'])) {
return '';
}
return parent::tableName($tableStatus);
}
}
return new AdminerHidden();
}
include './adminer.php';Docker
Docker Compose
version: '3'
services:
adminer:
image: adminer:latest
restart: unless-stopped
ports:
- "8080:8080"
environment:
ADMINER_DEFAULT_SERVER: db
ADMINER_DESIGN: nette
networks:
- backend
db:
image: mariadb:10
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: mydb
volumes:
- db_data:/var/lib/mysql
networks:
- backend
networks:
backend:
volumes:
db_data:Mit Traefik
services:
adminer:
image: adminer:latest
labels:
- "traefik.enable=true"
- "traefik.http.routers.adminer.rule=Host(`adminer.example.com`)"
- "traefik.http.routers.adminer.entrypoints=websecure"
- "traefik.http.routers.adminer.tls.certresolver=letsencrypt"
- "traefik.http.routers.adminer.middlewares=auth"
- "traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$..."Editor
Adminer Editor
# Nur Daten-Bearbeitung (kein Schema)
wget https://www.adminer.org/latest-editor.php -O editor.phpVerbindungskonfiguration
<?php
// editor-config.php
function adminer_object() {
include_once './plugins/plugin.php';
class AdminerEditor extends AdminerPlugin {
function credentials() {
return array('localhost', 'editor', 'password');
}
function database() {
return 'content';
}
}
return new AdminerEditor();
}
include './editor.php';Performance
Große Tabellen
-- Standard-Limit anpassen
-- URL-Parameter: ?limit=1000Export großer Datenmengen
-- Besser: mysqldump verwenden
mysqldump -u root -p mydb > backup.sql
-- Adminer für große Exports nicht idealTroubleshooting
Verbindungsprobleme
# MySQL Socket prüfen
ls -la /var/run/mysqld/mysqld.sock
# PHP MySQL Extension
php -m | grep mysql
# Remote-Verbindung testen
mysql -h remote-host -u user -pSession-Probleme
# PHP Session-Verzeichnis
ls -la /var/lib/php/sessions/
# Berechtigungen korrigieren
chown -R www-data:www-data /var/lib/php/sessions/Login funktioniert nicht
<?php
// Debug-Modus
error_reporting(E_ALL);
ini_set('display_errors', 1);
include './adminer.php';Alternativen
phpMyAdmin
Vorteile:
- Mehr Features
- Bessere Dokumentation
- Größere Community
Nachteile:
- Komplexere Installation
- Größer und langsamer
- Nur MySQL/MariaDBDBeaver
- Desktop-Anwendung
- Alle gängigen Datenbanken
- ER-Diagramme
- Mehr FunktionenHeidiSQL (Windows)
- Leichtgewichtig
- MySQL, PostgreSQL, SQLite
- Nur WindowsZusammenfassung
| Feature | Details | |---------|---------| | Größe | ~500 KB | | Datenbanken | MySQL, PostgreSQL, SQLite, MSSQL, Oracle | | Installation | 1 Datei kopieren | | Themes | CSS-basiert | | Plugins | PHP-Erweiterungen |
| Sicherheit | Maßnahme | |------------|----------| | Passwortschutz | .htaccess Basic Auth | | IP-Beschränkung | allow/deny in Apache/Nginx | | Umbenennen | Schwer erratbarer Dateiname | | HTTPS | SSL-Zertifikat |
| Befehl | Funktion | |--------|----------| | SQL | Queries ausführen | | Export | Daten/Struktur exportieren | | Import | SQL/CSV importieren | | History | Letzte Queries |
Fazit
Adminer ist die ideale Lösung für schnelles Datenbank-Management ohne komplexe Installation. Die einzelne PHP-Datei macht Updates und Deployment trivial. Die Multi-Datenbank-Unterstützung ist ein großer Vorteil gegenüber phpMyAdmin. Für Produktionsumgebungen sind zusätzliche Sicherheitsmaßnahmen wie IP-Beschränkung und Basic Auth unverzichtbar. Für komplexere Anforderungen bleibt phpMyAdmin oder eine Desktop-Anwendung wie DBeaver die bessere Wahl.