🧱 Einleitung
Nachdem Apache läuft, kommt der nächste logische Schritt:
PHP, MySQL und phpMyAdmin installieren.
Das klingt erstmal trivial – ist es aber nicht.
Seit neueren Ubuntu-Versionen (ab ca. 18.04) hat sich ein Detail geändert, das regelmäßig für Verwirrung sorgt:
👉 MySQL nutzt standardmäßig keinen Passwort-Login mehr für root.
Das führt zu genau dem Problem:
phpMyAdmin Login funktioniert nicht – obwohl das Passwort „richtig“ ist.
🎯 Ziel
- PHP installieren
- MySQL zum Laufen bringen
- phpMyAdmin nutzen können
- Login-Probleme verstehen und sauber lösen
📦 1. PHP installieren
sudo apt update
sudo apt install php libapache2-mod-php php-mysql
Optional (für WordPress sinnvoll):
sudo apt install php-cli php-curl php-gd php-mbstring php-xml php-zip
🔄 Apache neu starten
sudo systemctl restart apache2
🧪 Test
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php
sudo chown www-data:www-data /var/www/html/info.php
👉 im Browser:
http://localhost/info.php
Anschließend sieht man die PHP-Info-Seite, die sehr viele Informationen über PHP und Apache anzeigt. Das ist in der Praxis gängig, um zu prüfen, ob PHP funktioniert.
🚨 Aus Sicherheitsgründen solltest du diese Datei niemals dauerhaft auf einem öffentlichen Server lassen, da sie sensible Systemdetails verrät.
🗄️ 2. MySQL installieren
sudo apt install mysql-server
🔐 Login testen
sudo mysql
👉 funktioniert ohne Passwort
💥 3. Das Problem: auth_socket
Standardmäßig nutzt MySQL:
👉 auth_socket
Das bedeutet:
Login basiert auf dem Linux-User – nicht auf einem Passwort
❗ Konsequenz
phpMyAdmin Login mit root → FAIL
Auch wenn du ein Passwort setzt.
🧠 4. Warum das so gemacht wird
- sicherer für Server
- kein Passwort im Umlauf
- nur
sudo-User haben Zugriff
👉 Für Produktion sinnvoll
👉 Für lokale Entwicklung: nervig
🔧 5. Lösung: eigenen MySQL-User erstellen
👉 Das ist der saubere Weg (und besser als root umbauen)
In MySQL:
CREATE USER 'dev'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'dev'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
👉 Danach kannst du dich einloggen mit:
- User:
dev - Passwort:
password
🌐 6. phpMyAdmin installieren
sudo apt install phpmyadmin
Wichtig bei der Installation
- Apache auswählen
- automatische Konfiguration erlauben
Beim Installationsprozess wird auch der Benutzer phpmyadmin erstellt und es wird ein Passwort abgefragt, welches ein zweites Mal bestätigt werden muss. Mit diesem kann man sich auch einloggen. Gibt nur ein kleines Problem:

Er hat nur begrenzten Zugriff. Ich kann damit keine Datenbanken oder User erstellen. Ich sehe nicht mal die User und habe keinen Zugriff auf die Datenbank mysql, in welcher die User-Tabelle ist. Um dies mal anzuschauen kann man sich über die Kommandozeile in mysql einloggen und folgenderweise nachschauen:
sudo mysql
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select Host, User, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv, Create_view_priv, Show_view_priv, Create_routine_priv, Alter_routine_priv, Create_user_priv, Event_priv, Trigger_priv, Create_tablespace_priv from user;
+-----------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+
| Host | User | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | Event_priv | Trigger_priv | Create_tablespace_priv |
+-----------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+
| localhost | chidraeve | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y |
| localhost | debian-sys-maint | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y |
| localhost | mysql.infoschema | Y | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| localhost | mysql.session | N | N | N | N | N | N | N | Y | N | N | N | N | N | N | N | Y | N | N | N | N | N | N | N | N | N | N | N | N | N |
| localhost | mysql.sys | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| localhost | phpmyadmin | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N |
| localhost | root | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y |
+-----------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+
7 rows in set (0,00 sec)
Dies zeigt alle Privilegien an und da sieht man, dass phpmyadmin gar keine hat. Der User chidraeve, den zusätzlichen MySQL-Root-User, den ich mir angelegt habe, hat dagegen vollen Zugriff. Mit diesen kann ich mich in http://localhost/phpmyadmin einloggen mit vollen Rechten.
🔗 7. Zugriff
Falls nicht automatisch verfügbar:
sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin
👉 im Browser:
http://localhost/phpmyadmin
💥 8. Typisches Problem: Socket-Fehler
Also bisher läuft bei meinem Setup alles rund und ohne Fehler. Die letzten Jahre ging das nie out-of-the-box. Eine Fehlermeldung war oft:
Cannot connect to MySQL server
🧠 Ursache
phpMyAdmin nutzt:
- TCP (
127.0.0.1) - oder Socket (
/var/run/mysqld/mysqld.sock)
👉 und das passt manchmal nicht zusammen
🔧 9. Lösung
config prüfen:
sudo vim /etc/phpmyadmin/config.inc.php
sicherstellen:
$cfg['Servers'][$i]['host'] = 'localhost';
👉 nutzt Socket
oder:
$cfg['Servers'][$i]['host'] = '127.0.0.1';
👉 nutzt TCP
👉 wichtig:
MySQL und phpMyAdmin müssen dieselbe Methode nutzen
🧠 10. Alternative (nicht empfohlen, aber oft gemacht)
Man kann auch root umbauen:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
👉 funktioniert, aber:
- bricht das Sicherheitsmodell
- nicht nötig für Dev
🚀 11. Fazit
Das eigentliche Problem ist nicht phpMyAdmin – sondern:
die Änderung des MySQL-Authentifizierungssystems
Mit einem eigenen User und korrekter Socket-Konfiguration:
- funktioniert alles zuverlässig
- bleibt sauber getrennt
- entspricht besser der Praxis
🔜 Nächster Schritt
- WordPress installieren
- lokale Domains automatisieren (
project.local) - Setup skripten (
createProject)
💡 Persönliche Erkenntnis
Ich bin mehrmals über genau dieses Problem gestolpert – jedes Mal dachte ich, mein Setup sei kaputt.
Dabei lag es einfach daran, dass sich das Verhalten von MySQL geändert hat.

Schreibe einen Kommentar