Error establishing a database connection

  • Ich habe php, mysql und wordpress manuell (putty/ssh) auf meinem (brandneuen) Ubuntu 20.04 Server mit Apache2 installiert.

    php Version: 7.4.3
    WordPress Version: 5.7.1

    Ich kann mich mit dem wordpress User in mein mysql einloggen. Die Datenbank für WordPress ist vorhanden. Alle erforderlichen Werte (DB_NAME, DB_USER, DB_PASSWORD) sind korrekt in wp-config.php eingetragen. DB_HOST ist 'localhost'.

    Das Installationsverzeichnis von WordPress ist /var/www/wordpress. Die Subdomain wordpress.descent2.de ist mittels einer VirtualHost-Konfiguration darauf gemappt. WordPress lässt sich über die Subdomain aufrufen.

    Trotzdem kann WordPress keine Verbindung zu seiner Datenbank auf meinem Server aufbauen. wp-admin zeigt denselben Fehler.

    Woran könnte das noch liegen?

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Ich habe php, mysql und wordpress manuell (putty/ssh) auf meinem (brandneuen) Ubuntu 20.04 Server mit Apache2 installiert.

    php Version: 7.4.3
    WordPress Version: 5.7.1

    und nach welcher Anleitung hast du installiert?

    Evtl. fehlt ja

    sudo apt install php-mysql


    Trotzdem kann WordPress keine Verbindung zu seiner Datenbank auf meinem Server aufbauen. wp-admin zeigt denselben Fehler.

    Woran könnte das noch liegen?

    kann auch ein rechte Problem von MySQL sein. Evtl. hat der mySQL Benutzer keine Rechte für die Tabelle? Mit welchem Befehl hast den Benutzer angelegt?

    Mit offenen Augen träumen

  • php-mysql hat tatsächlich gefehlt. Danke für den Hinweis. Habe es installiert und den apache2 neu gestartet, Problem ist aber leider immer noch da.

    CREATE USER 'wordpress'@'%' IDENTIFIED WITH mysql_native_password BY '...';
    GRANT ALL ON wordpress.* TO 'wordpress'@'%';
    FLUSH PRIVILEGES;

    Grants for wordpress@%

    GRANT USAGE ON *.* TO `wordpress`@`%`
    GRANT ALL PRIVILEGES ON `wordpress`.* TO `wordpress`@`%`

    aus wp-config.php

    define( 'DB_NAME', 'wordpress' );
    define( 'DB_USER', 'wordpress' );

    DB und user heißen beide "wordpress".

  • Ist der MySQL Server auf der Konsole über localhost erreichbar? Oder über 127.0.0.1?

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Wie teste ich das? Bin da kompletter Neuling. Hatte es schon gegoogelt, aber nichts gefunden.

    mysql an sich kann ich in putty (ssh) Konsole aufrufen.

    Es liegt jedenfalls alles auf demselben Server.

    In der mysqld.cnf steht nicht viel drin:

    bind-address = 127.0.0.1
    mysqlx-bind-address = 127.0.0.1

    Ich habe auch Port 3306 (TCP) aufgemacht.

    Meine Anleitung für manuelle WordPress-Installation war übrigens diese hier: https://www.digitalocean.com/community/tuto…a-lamp-stack-de

    5 Mal editiert, zuletzt von karx11erx (19. April 2021 um 16:28)

  • p
    define( 'DB_NAME', 'wordpress' );
    define( 'DB_USER', 'wordpress' );

    DB und user heißen beide "wordpress".


    Grusel - DAS MACHT MAN NICHT!

    Code
    sudo mysql_secure_installation

    fehlt mir oder habe ich überlesen

    Man erstellt die Datenbanktabelle

    Code
    mysql >CREATE DATABASE example_database;

    man richtet den User ein

    Code
    mysql > CREATE USER 'example_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

    man gibt dem user die notwendigen Rechte für die Datenbank

    Code
    mysql>GRANT ALL ON example_database.* TO 'example_user'@'%';

    und dein WordPress löscht du bitte

    https://www.digitalocean.com/community/tuto…on-ubuntu-20-04

    Mit offenen Augen träumen

  • @r23: Datenbank hatte ich natürlich vorher eingerichtet - siehe Tutorial. Dass die DB da ist, kann man auch am Ergebnis der GRANTS-Abfrage in mysql sehen. Habe db und user inzwischen auch umbenannt (wordpress_db und wordpress_user). Im Prinzip ist es aber egal, wie man die nennt. mysql unterscheidet anhand des Kontexts.

    mysql_secure_installation hatte ich gemacht.

    Das einzige, was ich nicht getestet habe ist, ob die Anbindung von php an mysql funktioniert (wie mit der Test-Tabelle in dem von Dir verlinkten Artikel). Das werde ich nachholen.

    Wieso sollte ich WordPress löschen? Mir geht es genau um eine funktionierende WordPress-Installation.

    @b3317133: Mit welchen Zugangsdaten? Bei welchem Aufruf? Ich kann Dir leider nicht folgen.

    7 Mal editiert, zuletzt von karx11erx (19. April 2021 um 18:15)

  • Das Skript (wordpress.descent2.de/mysql-test.php) meldet Fehler 1045.

    Wenn ich mysql mit denselben Credentials usw. direkt in der Konsole aufrufe (mysql -u wordpress_user -p) aufrufe, geht alles.

    Kann es am Port liegen? 3606 und 36060 sind offen, aber den SSH-Port meines Servers habe ich geändert und 22 blockiert.

    Evtl. ufw-Einstellungen? Nee, ufw ist auf meinem Server inaktiv.

    8 Mal editiert, zuletzt von karx11erx (19. April 2021 um 18:53)

  • Ja natürlich. Ich bin von Haus aus Informatiker, nur nicht sehr firm in Linux-Server-Konfiguration. :)

    Zitat


    <?php
    $link = @mysqli_connect('localhost', 'wordpress_user', 'my_password', 'wordpress_db');

    if (!$link) {
    die('Connect Error: ' . mysqli_connect_errno());
    }
    ?>

  • Ok. Damit weisst Du jetzt also, dass das Problem nicht an der WordPress Installation liegt, sondern generell am Zugriff von PHP aus.

    Evtl. würde sich für weiteres Einsteigen in die Thematik daher auch ein passendes Linux Forum eignen.

  • php-mysql hat tatsächlich gefehlt".

    Du brauchst php-mysqli

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Ok. Damit weisst Du jetzt also, dass das Problem nicht an der WordPress Installation liegt, sondern generell am Zugriff von PHP aus.


    Seufz.

    Wieso funktioniert sowas auf einem frisch und nach Anleitung eingerichteten Server nicht?

  • Du brauchst php-mysqli


    Danke für den Tipp. Wenn ich das installieren will, bekomme ich folgende Meldung:

    Wie installiere ich php-mysqli?


  • mysql_secure_installation hatte ich gemacht.

    und du konntest wirklich eine user mit dem gleichen Datenbanknamen *ohne* Fehlermeldung anlegen.

    mit @ unterdrückst du Fehlermeldungen

    mit

    Code
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

    oder ähnlichem kann man sich die Fehlerausgabe von der Datenbank ausgeben lassen


    Code
    $mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
    
    
    if ($mysqli->connect_errno) {    
       throw new RuntimeException('mysqli connection error: ' . $mysqli->connect_error);
    }


    kann man die Verbindung prüfen.


    Wieso sollte ich WordPress löschen? Mir geht es genau um eine funktionierende WordPress-Installation.

    Mit WordPress war der User WordPress gemeint und die Datenbank Tabelle WordPress. Ist vom Sinn her vergleichbar mit Admin und Passwort 12345. Aber du bist ja der Informatiker https://de.wikipedia.org/wiki/SQL-Injection

    Mit offenen Augen träumen

  • @r23: Jetzt müsste ich nur noch verstehen, inwiefern mich Deine Beiträge näher zur Lösung meines Problems bringen sollen.

    Wen interessieren denn jetzt Datenbank- und Usernamen und SQL Injection, wenn das Ganze überhaupt nicht funktioniert.

    Wenn Du mir sagen kannst, warum php sich mit korrekten Credentials usw. nicht mit meiner Datenbank verbinden kann, während das manuell vom CLI aus geht, das wäre die Hilfe, die ich jetzt brauche. Alles andere kommt danach.

    Folgendes Skript

    [INDENT]<?php
    try {
    ....if ($db = mysqli_connect("localhost", "wordpress_user", "password", "wordpress_db")) {
    ........echo ("successfully connected to database \n");
    ........}
    ....else {
    ........throw new Exception('Unable to connect');
    ........}
    ....}
    catch(Exception $e) {
    ....echo $e->getMessage();
    ....}
    ?>
    [/INDENT]
    gibt, wenn vom cli aufgerufen ("php -f mysql-test.php") folgende Fehlermeldung
    [INDENT]
    PHP Warning: mysqli_connect(): (HY000/1045): Access denied
    for user 'wordpress_user' localhost (using password: YES)
    in /var/www/wordpress/mysql-test.php on line 13
    [/INDENT]
    Nach Eingabe von "mysql -u wordpress_user -p" im cli und Eingabe des korrekten Passworts komme ich in mysql rein. Die Datenbank "wordpress_db" existiert dort und "wordpress_user" hat alle Rechte drauf.

    Wenn Du eine gute Idee hast, was hier das Problem ist, dann gerne her damit. Alles andere bringt mich wie gesagt momentan nicht weiter.

    6 Mal editiert, zuletzt von karx11erx (19. April 2021 um 21:05)

  • Vergebe bitte einmal die Benutzerrechte explizit:

    Code
    GRANT ALL PRIVILEGES ON wordpress_db.* TO "wordpress_user"@"localhost" IDENTIFIED BY "dein_passwort";
    FLUSH PRIVILEGES;

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!