PHP, MySQL und phpMyAdmin unter Ubuntu – und warum der Login plötzlich nicht mehr funktioniert

🧱 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

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert