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 Update

Installation

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.php

Mit 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.php

Zugriff

http://server-ip/adminer.php

Absicherung

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 admin

IP-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.php

Verbindung

MySQL/MariaDB

Server: localhost
Benutzer: root
Passwort: ***
Datenbank: (leer für alle)

PostgreSQL

System: PostgreSQL
Server: localhost:5432
Benutzer: postgres
Passwort: ***
Datenbank: mydb

SQLite

System: SQLite 3
Datenbank: /pfad/zur/datenbank.db

Über Socket

Server: localhost:/var/run/mysqld/mysqld.sock

Funktionen

Datenbank-Operationen

- Datenbanken erstellen/löschen
- Tabellen verwalten
- Indizes erstellen
- Foreign Keys definieren
- Views erstellen
- Routinen/Triggers verwalten

Tabellen-Operationen

- Spalten hinzufügen/ändern/löschen
- Datentypen ändern
- Indizes verwalten
- Auto-Increment setzen
- Tabellenstruktur exportieren

Daten-Operationen

- Daten einfügen/bearbeiten/löschen
- Inline-Editing
- CSV/SQL Import
- JSON/XML/CSV Export
- Batch-Operationen

SQL-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.css

Beliebte 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.css

Eigenes 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.php

Verbindungskonfiguration

<?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=1000

Export großer Datenmengen

-- Besser: mysqldump verwenden
mysqldump -u root -p mydb > backup.sql

-- Adminer für große Exports nicht ideal

Troubleshooting

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 -p

Session-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/MariaDB

DBeaver

- Desktop-Anwendung
- Alle gängigen Datenbanken
- ER-Diagramme
- Mehr Funktionen

HeidiSQL (Windows)

- Leichtgewichtig
- MySQL, PostgreSQL, SQLite
- Nur Windows

Zusammenfassung

| 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.