Grafana und Phpmyadmin wollen nicht mehr nach Freepbx-Installation

  • Ich habe dummerweise auf einem Pi4 dieses Script laufen lassen:

    FreePBX-17-for-Armbian-12-Bookworm/install.sh at main · slythel2/FreePBX-17-for-Armbian-12-Bookworm
    One-click installer for Asterisk 22 LTS and FreePBX 17 on Debian 12 for ARM64 - slythel2/FreePBX-17-for-Armbian-12-Bookworm
    github.com

    Das hat mein System ziemlich durcheinander gebracht, aber das meiste habe ich wieder hinbekommen.

    Nur Grafana und Phpmyadmin wollen nicht mehr.

    127.0.0.1 geht mit Apache und PHP bei $servername.

    localhost geht nicht (mehr).

    Display Spoiler

    <?php
    echo "<table style='border: solid 3px black; width:100%; text-align:center;'>";
    echo "<tr><th colspan='4'; style='border: solid 3px black; width:25%; text-align:center;'>Sensor</th></tr>";
    echo "<tr><th style='border: solid 3px grey; width:25%; text-align:center;'>°C</th><th style='border: solid 3px grey; width:25%; text-align:center;'>%</th><th style='border: solid 3px grey; width:25%; text-align:center;'>hPa</th><th style='border: solid 3px grey; width:25%; text-align:center;'>gemessen</th></tr>";

    class TableRows1 extends RecursiveIteratorIterator {
    function __construct($it) {
    parent::__construct($it, self::LEAVES_ONLY);
    }
    function current() {
    return "<td style='border: solid 3px black; width:25%; text-align:center;'>" . parent::current(). "</td>";
    }
    function beginsensor1() {
    echo "<tr style='border: solid 3px black; width:25%; text-align:center;'>";
    }
    function endsensor1() {
    echo "</tr>" . "\n";
    }
    }

    $servername = "127.0.0.1";
    $username = "userxy";
    $password = "geheim";
    $dbname = "userxy";

    try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $stmt = $conn->prepare("SELECT temperatur, luftfeuchtigkeit, luftdruck, datumzeit FROM daten ORDER BY datumzeit DESC LIMIT 0,1");
    $stmt->execute();
    $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
    $data = $stmt->fetch();

    if ($data) {
    // Convert UTC time to Europe/Berlin
    $utc_time = new DateTime($data['datumzeit'], new DateTimeZone('UTC'));
    $timezone = new DateTimeZone('Europe/Berlin');
    $utc_time->setTimezone($timezone);
    $formatted_datumzeit = $utc_time->format('Y-m-d H:i:s');

    echo "<tr>";
    echo "<td style='border: solid 3px black; width:25%; text-align:center;'>".$data['temperatur']."</td>";
    echo "<td style='border: solid 3px black; width:25%; text-align:center;'>".$data['luftfeuchtigkeit']."</td>";
    echo "<td style='border: solid 3px black; width:25%; text-align:center;'>".$data['luftdruck']."</td>";
    echo "<td style='border: solid 3px black; width:25%; text-align:center;'>".$data['datumzeit']."</td>";
    echo "</tr>";
    }

    } catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
    }

    $conn = null;
    echo "</table>";
    ?>

    In /tmp habe ich einen Link auf mysqld.sock

    lrwxrwxrwx  1 root     root       23 25. Mai 08:25 mysql.sock -> /run/mysqld/mysqld.sock

    Und in /run/mysqld/:

    Code
    ls -la
    insgesamt 4
    drwxr-xr-x  2 mysql mysql   80 24. Mai 09:48 .
    drwxr-xr-x 45 root  root  1320  1. Jun 08:30 ..
    -rw-rw----  1 mysql mysql    8 24. Mai 09:48 mysqld.pid
    srwxrwxrwx  1 mysql mysql    0 24. Mai 09:48 mysqld.sock

    Wenn ich in Grafana eine Datenquelle hinzufügen möchte kommt immer:

    Error 1045 (28000): Benutzer 'root'@'localhost' hat keine Zugriffsberechtigung (verwendetes Passwort: Ja)

    egal ob ich bei Host 127.0.0.1:3306 eingetragen habe oder localhost und in der Mariadb localhost als Host steht.

    show variables like '%sock%';

    bringt diese Ausgabe:

    Code
    +-----------------------------------------+-------------------------+
    | Variable_name                           | Value                   |
    +-----------------------------------------+-------------------------+
    | performance_schema_max_socket_classes   | 10                      |
    | performance_schema_max_socket_instances | -1                      |
    | socket                                  | /run/mysqld/mysqld.sock |
    +-----------------------------------------+-------------------------+
    3 rows in set (0,003 sec)

    Wenn ich in der Konsole:

    mysql --user=root --password=geheim -h 127.0.0.1 mysql

    eingebe, kommt:

    ERROR 1698 (28000): Benutzer 'root'@'localhost' hat keine Zugriffsberechtigung

    Wenn ich umgekehrt:

    mysql --user=root --password=geheim -h localhost mysql

    eingebe, dann komme ich rein.

    Mit anderen Sensor-Usernamen und deren DB komme ich per Konsole sowohl mit localhost, als auch mit 127.0.0.1 rein, weil Host %

    Aber eingetragen werden die aktuellen Daten von keinem ESP32 mit BME280-Sensor mehr.

    Aber warum komme ich als root jetzt nur noch per Konsole rein ?

    Mit einem anderen Nutzer komme ich sowohl mit 127.0.0.1 als auch mit localhost rein, obwohl in Host nur localhost steht.

    :conf:

    Jemand eine Idee ? :helpnew:

  • Grafana und Phpmyadmin wollen nicht mehr nach Freepbx-Installation? Schau mal ob du hier fündig wirst!

  • Jemand eine Idee ?

    Befrag deine Datenbank.

    select User, Host from mysql.user;

    und

    show grants for 'root'@'localhost'; bzw. show grants for 'root'@'127.0.0.1';

    Je nach Antwort ist das weitere Vorgehen unterschiedlich. Wenn Du an den Berechtigungen etwas änderst, denke an FLUSH PRIVILEGES; (/me vergißt das gern.)

    Edit:
    Da Du Sockets erwähnt hast, wäre evtl. auch SHOW GRANTS FOR CURRENT_USER(); aufschlußreich.

  • Display Spoiler

    MariaDB [mysql]> select User, Host from mysql.user;
    +-------------------+-----------+
    | User | Host |
    +-------------------+-----------+
    | sensor1 | % |
    | sensor2 | % |
    | sensor3lokalamPi | % |
    | sensor4 | % |
    | sensor5 | % |
    | sensor6amanderenPi | % |
    | asterisk | 127.0.0.1 |
    | asterisk | localhost |
    | mariadb.sys | localhost |
    | mysql | localhost |
    | oc_pi | localhost |
    | root | localhost |
    | user | localhost |
    +-------------------+-----------+

    sensor6anPi2 bringt die Fehlermeldung:

    mysql.connector.errors.DatabaseError: 2003 (HY000): Can't connect to MySQL server on '192.168.0.10:3306' (111)

    nmap sagt, der Port wäre zu:

    Code
    nmap 192.168.0.10 -p 3306
    PORT     STATE  SERVICE
    3306/tcp closed mysql

    Aber er läuft am Pi:

    Code
    netstat -tulpen | grep 3306
    tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      120        17709263   2538829/mariadbd   

    Was mir auch gerade auffällt:

    Als Benutzer pi komme ich nicht als root in mysql, weder mit 127.0.0.1 noch mit localhost.

    Dann wird es als www-data bzw. grafana auch nicht klappen.

    Der lokale BME280 am Raspberry trägt die Werte erfolgreich via Python und mysql.connector in die MariaDB.

    Ein weiterer ESP32 erfolgreich per Internet via PHP und API.

    Die anderen ESP32 im lokalen Netzwerk nicht und auch der zweite Pi nicht.

    Als root:

    Code
    MariaDB [mysql]> show grants for 'root'@'127.0.0.1';
    ERROR 1141 (42000): Für Benutzer 'root' auf Host '127.0.0.1' gibt es keine solche Berechtigung

    Und:

    Code
    MariaDB [mysql]> show grants for 'root'@'localhost';
    Grants for root@localhost                                                                                                                                                 
    GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` IDENTIFIED VIA mysql_native_password USING '***' OR unix_socket WITH GRANT OPTION 
    GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION

    Und:

    Code
    MariaDB [mysql]> SHOW GRANTS FOR CURRENT_USER();
    Grants for root@localhost
    GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` IDENTIFIED VIA mysql_native_password USING '***' OR unix_socket WITH GRANT OPTION
    GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION

    Alle anderen Sensoren haben:

    Code
    GRANT USAGE ON *.* TO `sensor1`@`%` IDENTIFIED BY PASSWORD '***'
    GRANT SELECT, INSERT ON `sensor1`.* TO `sensor1`@`%

    :conf:

  • Das FreePBX Script hat sowohl deine mysql config (zeile 388-442) als auch die Apache Config (444-481) neu geschrieben.
    Spiel das Backup wieder ein oder mach das von Hand rückgängig.

    Offizieller Schmier und Schmutzfink des Forum.
    Meine PI:

    Display Spoiler

    #1 : Pi1 - Packet Radio Digi mit TNC-PI
    #2 : Pi2 - ADSB Feeder
    #3 : Pi3 - DHCP/DNS Server für 4 VLAN
    #4 : Pi3 - Wireguard Gateway Umgezogen nach Proxmox
    #5 : Pi3 - FM Funknetz Gateway mit Shari SA818
    #6 : PI Zero W mit DMR Hotspot
    #7 : Pi4 4GB - Kiosk Browser
    #8 : Pi4 4GB - Kiosk Browser
    #9 : Pi4 8GB - Test Pi
    #10 : Pi2 - Auto CD Ripper abcde

    Dazu noch ein paar Zero und Pi1/2 die noch auf einen sinnvollen Einsatz warten.

  • Gut das du das erwähnst.

    Ich habe in /etc/mysql/mariadb.conf.d/ noch eine Datei 99-freepbx.conf gefunden, die hat wohl das ganze überschrieben:

    Code
    [mysqld]
    bind-address = 127.0.0.1
    port = 3306
    socket = /run/mysqld/mysqld.sock 

    Datei gelöscht, alle Sensoren übertragen wieder Daten, der Port 3306 ist im Netzwerk wieder offen. :bravo2:

    Also ein Teilerfolg.

    Phpmyadmin und Grafana will aber immer noch nicht.

    Hab mal probiert mit

    GRANT ALL PRIVILEGES ON *.* TO `root`@`127.0.0.1` IDENTIFIED VIA mysql_native_password USING '***' OR unix_socket WITH GRANT OPTION;

    und FLUSH PRIVILEGES;

    Aber nutzt nichts.

  • sensor6anPi2 bringt die Fehlermeldung:

    mysql.connector.errors.DatabaseError: 2003 (HY000): Can't connect to MySQL server on '192.168.0.10:3306' (111)

    Dieser Fehler weist darauf hin, dass der MySQL-Client keine TCP/IP-Verbindung zum MySQL-Server am angegebenen Host herstellen kann. Der Verbindungsversuch schlägt fehl, bevor eine Kommunikation mit dem MySQL-Server stattfinden kann, was auf Probleme mit der Netzwerkverbindung, Firewall-Einschränkungen oder die Nichtverfügbarkeit des Servers hindeutet.

    nmap sagt, der Port wäre zu:

    Da scheint nmap recht zu haben.

    Nachdem ich meine erste Antwort gegeben hatte, hatte ich auch an Namensauflösung etc. auf dem Rechner mit den mariadbd gedacht. Wenn ich das richtig sehe, sind die Rechner | $USER | localhost | betroffen. Die anderen ('%') bekommen Verbindung, wobei "sensor6anPi2" ('%') irgendwie wieder dagegenspricht.

    Was hast Du in /etc/networks bzw. /etc/hosts stehen?

    grep '127.0' /etc/networks 
    loopback        127.0.0.0

    grep '127.0' /etc/hosts 
    127.0.0.1       localhost

    Vielleicht wurde da etwas verbogen.

    Dann wird es als www-data bzw. grafana auch nicht klappen.

    Benutzt grafana root@localhost? (habe ich noch nie benutzt). Bei phpadmin vermutlich. Ist zu lange her, um mich daran zu erinnern.

    Bei www-data, also im Webserver, wird ja der User verwendet, dem man im Skript angibt. Von daher egal, obwohl da nimmt man eigentlich immer @localhost und wenn das nicht aufgelöst wird → bumm.

    Achja, gibt es einen Grund für?:

    Code
    | asterisk | 127.0.0.1 |
    | asterisk | localhost |
  • sensor6anPi2 bringt die Fehlermeldung:

    mysql.connector.errors.DatabaseError: 2003 (HY000): Can't connect to MySQL server on '192.168.0.10:3306' (111)

    Dieser Fehler weist darauf hin, dass der MySQL-Client keine TCP/IP-Verbindung zum MySQL-Server am angegebenen Host herstellen kann. Der Verbindungsversuch schlägt fehl, bevor eine Kommunikation mit dem MySQL-Server stattfinden kann, was auf Probleme mit der Netzwerkverbindung, Firewall-Einschränkungen oder die Nichtverfügbarkeit des Servers hindeutet.

    Kann es sein, dass der MySQL-Server bind-address geändert hat und nun nur noch auf 127.0.0.1 hört?

    Code
    sudo netstat -tulpn|grep 3306
  • Wie oben geschrieben, der Port ist wieder auf, aber ich kann mich nur noch als Benutzer root in der MariaDB anmelden, als pi kommt:

    Code
    pi@server:~ $ mysql --user=root --password=geheim -h localhost mysql
    ERROR 1698 (28000): Benutzer 'root'@'localhost' hat keine Zugriffsberechtigung
    pi@server:~ $ mysql --user=root --password=geheim -h 127.0.0.1 mysql
    ERROR 1698 (28000): Benutzer 'root'@'localhost' hat keine Zugriffsberechtigung

    Als root geht:

    root@server:/home/pi# mysql --user=root --password=geheim -h localhost mysql

    Als root geht nicht:

    Code
    root@server:/home/pi# mysql --user=root --password=geheim -h 127.0.0.1 mysql
    ERROR 1698 (28000): Benutzer 'root'@'localhost' hat keine Zugriffsberechtigung
  • Als root geht:

    root@server:/home/pi# mysql --user=root --password=geheim -h localhost mysql

    Als root geht nicht:

    Code
    root@server:/home/pi# mysql --user=root --password=geheim -h 127.0.0.1 mysql

    Ich habe mir das Skript aus #1 mal angeschaut.
    Ich fürchte Du sölltest mal ein anderes root-Passwort versuchen.
    Da stehen solche Sachen drin:

    Code
    DB_ROOT_PASS="armbianpbx"
    mysqladmin -u root password "$DB_ROOT_PASS" 2>/dev/null || true
    
  • Gibt es eine Gruppe mysql oder vergleichbar, in der der User pi ggf. nicht (mehr) ist?

    Ich kann Unterschiede des Inhalts von /etc/group und dem Backup erkennen, aber nur, dass asterisk in diese Gruppen eingetragen wurde:

    Code
    dialout:x:20:pi,readsb,asterisk
    audio:x:29:pi,pulse,asterisk
    www-data:x:33:asterisk
    asterisk:x:1013:

    Sonst kann ich keinen Unterschied erkennen, mysql steht alleine mysql:x:132:

    Auch die Berechtigungen von mysqld sind identisch.

    asterisk habe ich jetzt aus der Gruppe www-data gelöscht.

    Grafana geht übrigens wieder, keine Ahnung warum, oder was ich gemacht habe. :conf:

    Aber er findet die Verbindung zur MariaDB. :bravo2:

    Jetzt komme ich auch wieder sowohl als root als auch pi mit 127.0.0.1 und localhost über die Konsole auf mysql.

    Könnte u.a. mit dem Befehl zusammengehängt haben:

    GRANT ALL PRIVILEGES ON *.* TO `root`@`127.0.0.1` IDENTIFIED VIA mysql_native_password USING '***' OR unix_socket WITH GRANT OPTION;

    Vielleicht einen restart oder reload vergessen gehabt. :daumendreh2:

    Jetzt fehlt nur noch, das Phpmyadmin wieder läuft.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!