🧱 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
‼️Auch für eine lokale Entwicklungsumgebung am besten generierte Passwörte und Passwortmanger nutzen. Das hier ist ein Nachtrag. Ich habe mich gewundert, warum ich mich plötzlich nicht in phpmyadmin einloggen kann. Im Browser bekomme ich 3 Fehlermeldungen mit denen ich nichts anfangen konnte. In der Kommandozeile konnte ich mich auch nicht einloggen. Nur noch per sudo. ChatGPT meinte, dass das Passwort wohl falsch ist, war mir aber sicher, dass ich die Passwörter weiß, aber trotzdem habe ich dies versucht. Dann kam mir folgende Fehlermeldung im Screenshot unten. MySQL hat ab einem gewissen Zeitpunkt angefangen standardmäßig starke Passwörter zu verlangen. Ich erinnere mich gerade, dass ich das Problem schon mal hatte, weiß aber auch, dass das früher nicht so war. Man kann das ändern in der Konfiguration, aber es hat seine Berechtigung und da ich eh KeypassXC habe, gebe ich einfach immer starke Passwörter.

🌐 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