SQL Browser

MyOOS [Dumper]ist ein Sicherungsprogramm für MySQL-Datenbanken. Damit können Sicherungskopien der Daten (Forum, Shop, Blog, usw.) erstellt und bei Bedarf auch wieder hergestellt werden. Besonders bei Web-Space ohne Shell-Zugang bietet sich MyOOS [Dumper] als sinnvolle Alternative an.
Antworten
RalfKerkhoff
Beiträge: 8
Registriert: 26.10.2021, 23:19

SQL Browser

Beitrag von RalfKerkhoff »

Hallo Zusammen,

ich habe heute endlich mal den alten MYSQLDumper durch Eure Version ersetzt.

Grundsätzlich läuft alles einwandfrei, es gibt allerdings ein kleines Problem mit dem SQLBrowser.
Bei kleineren Datenbanken werden die Tabellen der Datenbank problemlos angezeigt.
Bei meinen etwas grösseren Matomo Datenbanken bleibt das Fenster wo eigentlich die Tabellen angezeigt werden, leer.
Komischerweise zeigt mir der uralte mysqldumper 1.24.4 die Tabellen fehlerfrei an.

Getestet habe ich das mit PHP7.4 und PHP 8.0.
Am Speicher 768MB kann es eigentlich nicht liegen.

Gruss
Ralf
r23
Beiträge: 2625
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Re: SQL Browser

Beitrag von r23 »

Hallo,

und willkommen

RalfKerkhoff hat geschrieben: 26.10.2021, 23:25 Grundsätzlich läuft alles einwandfrei, es gibt allerdings ein kleines Problem mit dem SQLBrowser.
Bei kleineren Datenbanken werden die Tabellen der Datenbank problemlos angezeigt.
Bei meinen etwas grösseren Matomo Datenbanken bleibt das Fenster wo eigentlich die Tabellen angezeigt werden, leer.
O.k klingt nach einem Fehler von mir. Ich habe bei einer Version von MyOOS Dumper den "outer buffer" ausgebaut... und Anwender hier bekamen eine 'leere" Seite angezeigt.

Ich habe dies aber eigentlich wieder eingebaut. Und der Fehler sollte nicht mehr auftauchen. Bitte die aktuelle Version verwenden.

Meine Matomo Installation habe ich Anfang des Jahres deaktiviert. Aber die Datenbank habe ich noch ;)
2021-10-27 01_42_26-Greenshot.png
2021-10-27 01_42_26-Greenshot.png (61.5 KiB) 5415 mal betrachtet
Meine größte Datenbanktabelle hat 226362 Datensätze und kann die gewünschte Menge von 30 Datensätze anzeigen.

Unter Konfiguration => Benutzeroberfläche kann man den SQL-Browser konfigurieren.


Wenn dies nicht hilft einfach in die sql.php Datei

Code: Alles auswählen

error_reporting(E_ALL & ~E_STRICT);
   
//setting basic configuration parameters
if (function_exists('ini_set')) {
  	ini_set('display_errors', true);
}
eintragen. Hier sollten dann, wenn ini_set erlaubt ist - Fehler angezeigt werden.

Nach der Änderung den SQL-Browser einfach über die URL ohne frameseit aufrufen

https://exampl.org/mod_verzeichnis/sql.php

Evtl. stehen aber auch in den Error Logs vom WebServer nützliche Informationen.

Viele Grüße

Ralf
RalfKerkhoff
Beiträge: 8
Registriert: 26.10.2021, 23:19

Re: SQL Browser

Beitrag von RalfKerkhoff »

Hi,
die eingesetzte Version ist die 5.0.12-dev. Wenn ich mich nicht verguckt habe, dann ist das die aktuellste Version.

Bei mir allerdings die Matomo Datenbank 1,5 Mio Dateinsätze,

Das mit dem Error Logging in der sql.php probiere ich heute Abend aus, sobald ich wieder an meinem Rechner sitze.

Gruss
Ralf
RalfKerkhoff
Beiträge: 8
Registriert: 26.10.2021, 23:19

Re: SQL Browser

Beitrag von RalfKerkhoff »

Nachtrag:
Im Error Log des Servers sehe ich:
Got error 'PHP message: PHP Fatal error: Allowed memory size of 805306368 bytes exhausted (tried to allocate 761935472 bytes) in /Pfad_zum_Dumper/msd/inc/mysqli.php on line 323', referer: https://Pfad_zur_Subdoman/msd/menu.php

Gruss
Ralf
r23
Beiträge: 2625
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Re: SQL Browser

Beitrag von r23 »

Hallo,

vielen Dank für die weiteren Informationen. Ich habe mir nun unter PHP 8 xdebug installiert ... komme aber damit leider noch nicht klar.

Ich hatte die Anleitung verwendet...
https://odan.github.io/2020/12/03/xampp ... -php8.html

Die andere Möglichkeit ist, dass ich mir eine check_memory.php erstelle.
https://www.phpgangsta.de/fruhzeitig-me ... -entdecken

Vielleicht kann ich sehen, wo die Datenbankabfrage durch die Decke geht. Ich habe zwar einen Verdacht...

Viele Grüße

Ralf
r23
Beiträge: 2625
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Re: SQL Browser

Beitrag von r23 »

Hallo,

der Speicherverbauch geht in der Regel bei MyOOS Dumper nicht durch die Decke

Ich habe die ~/mod/inc/mysqli.php und die Ausgabe der Speichernutzung erweitert.

https://oos-shop.de/service/mysqli.txt

Das Script gibt beim SQL Browser bei einer Matomo Datenbank aus
The script is now using: 1393 KB of memory.
Peak usage: 1642 KB of memory.


Query: SELECT VERSION()
The script is now using: 1409 KB of memory.
Peak usage: 1642 KB of memory.

The script is now using: 1393 KB of memory.
Peak usage: 1642 KB of memory.


Query: SHOW CHARACTER SET
The script is now using: 1413 KB of memory.
Peak usage: 1642 KB of memory.

The script is now using: 1422 KB of memory.
Peak usage: 1642 KB of memory.


Query: SHOW VARIABLES LIKE 'character_set_connection'
The script is now using: 1439 KB of memory.
Peak usage: 1642 KB of memory.

dann folgt die Matomo Datenbank

The script is now using: 1507 KB of memory.
Peak usage: 1728 KB of memory.


Query: SHOW TABLE STATUS FROM `myoos`
The script is now using: 1573 KB of memory.
Peak usage: 1728 KB of memory.

93 Tabellen
The script is now using: 1634 KB of memory.
Peak usage: 1728 KB of memory.

usw.

bis - bei mir

Query: select * from piddik_user
The script is now using: 1001 KB of memory.
Peak usage: 215015 KB of memory.

The script is now using: 984 KB of memory.
Peak usage: 215015 KB of memory.


Query: select * from piddik_user_dashboard
The script is now using: 1003 KB of memory.
Peak usage: 215015 KB of memory.

The script is now using: 984 KB of memory.
Peak usage: 215015 KB of memory.


Query: select * from piddik_user_language
The script is now using: 1003 KB of memory.
Peak usage: 215015 KB of memory.

The script is now using: 985 KB of memory.
Peak usage: 215015 KB of memory.


Query: select * from xxx_user_token_auth
The script is now using: 1006 KB of memory.
Peak usage: 215015 KB of memory.


Die Ausgabe ist im KB Bereich!

Die mysqli.txt einfach als mysqli.php abspeichern und die Online Version überschreiben
https://oos-shop.de/service/mysqli.txt

Evtl. fällt etwas am Query auf?

Viele Grüße

Ralf
RalfKerkhoff
Beiträge: 8
Registriert: 26.10.2021, 23:19

Re: SQL Browser

Beitrag von RalfKerkhoff »

Hi,

ich bekomme leider immer noch den Fehler im error.log:
Allowed memory size of 805306368 bytes exhausted (tried to allocate 805247216 bytes)

Der höchste Wert den ich mit der modifizierten mysqli.php sehe ist:
Query: select * from matomo_log_conversion
The script is now using: 62420 KB of memory.
Peak usage: 62420 KB of memory.

Ich frage mich woher dann der Speicherfehler im log kommt.

Gruss
Ralf
RalfKerkhoff
Beiträge: 8
Registriert: 26.10.2021, 23:19

Re: SQL Browser

Beitrag von RalfKerkhoff »

Hi,
ich sehe mit der Textausgabe der modifizierten mysqli.php auch keinen Hinweis auf einen Speicherauflauf.

Was mir aufgefallen ist.
Der SQL Browser ruft die sql.php mit der ausgewählten Datenbank auf.

Kann es sein, dass das Problem nicht durch die mysqli.php verursacht wird, sondern durch die sql.php?

Gruss
Ralf
r23
Beiträge: 2625
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Re: SQL Browser

Beitrag von r23 »

RalfKerkhoff hat geschrieben: 28.10.2021, 09:52 Kann es sein, dass das Problem nicht durch die mysqli.php verursacht wird, sondern durch die sql.php?
Damit man die evtl. Stelle findet, schreibt PHP dann weitere Informationen in die Log Datei.


1. Datum und Uhrzeit, damit man diese Meldung nachvollziehen kann.

2. FHP Fatal error: Allowed memory size of *Zahl* bytes exhausted (tried to allocate *Zahl* bytes)
in *Skirpt* on *ZEILE* referer: *Verursacher*

nach dieser Meldung
Got error 'PHP message: PHP Fatal error: Allowed memory size of 805306368 bytes exhausted (tried to allocate 761935472 bytes) in /Pfad_zum_Dumper/msd/inc/mysqli.php on line 323', referer: https://Pfad_zur_Subdoman/msd/menu.php
wird die Datenbankabfrage in der menu.php erzeugt.


Ich hab da ein paar Fragen

1. Wurde MyOOS Dumper neu installiert oder über eine bestehende Konfiguration kopiert?
bitte MyOOS Dumper neu installieren. es gibt keine Update Funktionen

2.
RalfKerkhoff hat geschrieben: Komischerweise zeigt mir der uralte mysqldumper 1.24.4 die Tabellen fehlerfrei an.

Getestet habe ich das mit PHP7.4 und PHP 8.0.
Am Speicher 768MB kann es eigentlich nicht liegen.
Wenn mysqldumper 1.24.4 unter PHP7.4 oder PHP 8.0 funktionieren würde, würde es diesen Fork nicht geben. Bitte die PHP Installation prüfen mit einer

php_check.php Datei mit dem Inhalt

Code: Alles auswählen

<?php
phpinfo();


PHP Handbuch über phpinfo()
https://www.php.net/manual/de/function.phpinfo.php

3. Das Projekt hat sich für UTF-8 Daten entschieden
sind die Datenbanken UTF-8?

4. Welche MySQL Datenbank wird verwendet? Version?

5. Warum nicht einfach den Allowed memory erweitern?

Viele Grüße

Ralf
RalfKerkhoff
Beiträge: 8
Registriert: 26.10.2021, 23:19

Re: SQL Browser

Beitrag von RalfKerkhoff »

Hi,
es gab einmal eine MysqlDumper Version die unter PHP 7.4 lauffähig ist:
MySQLDumper-Version: 1.24.4
Betriebssystem: Linux )
MySQL-Version: 5.7.33
PHP-Version: 7.4.22 Speicher: 768.00 MB


Den Speicher kann ich nicht einfach erweitern, da das ein shared Server ist, der bei meinem Anbieter steht.
Selbst wenn das möglich wäre, dann wäre das aber auch nur eine Lösung die nur so lange funktioniert bis die Datenbank wieder grösser geworden ist.

----
Der Dumper wurde frisch installiert - nicht einfach die Dateien drüber kopiert.
Ich installiere den am Wochenende nochmal frisch - vorher komme ich leider nicht dazu.
Danach gebe ich Dir Bescheid, ob die Neuinstallation geholfen hat.

Die Datenbank die rumzickt ist utf8mb4_general_ci.

----
"Damit man die evtl. Stelle findet, schreibt PHP dann weitere Informationen in die Log Datei."
In welche Logdatei ausser der error.log des Servers wird denn was geschrieben?

Gruss
Ralf
RalfKerkhoff
Beiträge: 8
Registriert: 26.10.2021, 23:19

Re: SQL Browser

Beitrag von RalfKerkhoff »

Update:
Ich habe jetzt aus der:
MyOOS-master.zip
neu installiert.

Der Fehler besteht leider nach wie vor.
Das Script steigt an dieser Stelle aus:
Query: select * from matomo_log_link_visit_action

Diese Tabelle hat knapp 1,5 Millionen Einträge.

Die Datenbank sieht wie folgt aus:
InnoDB utf8_general_ci 312,0 MiB
RalfKerkhoff
Beiträge: 8
Registriert: 26.10.2021, 23:19

Re: SQL Browser

Beitrag von RalfKerkhoff »

Update:
Ich habe es geschafft den SQL Browser auch mit der grossen Datenbank ans Laufen zu bekommen :-)

Das Ganze mit dem folgenden Speicherverbrauch:
Query: SHOW TABLE STATUS FROM `xdtbn42w_matomo`
The script is now using: 596 KB of memory.
Peak usage: 698 KB of memory.

Was ich gemacht habe:
1. Den Dumper aus der MyOOS-master.zip frisch installiert
2. Die Dateien aus der neuen Installation mit denen meiner alten MYSQLDumper Version verglichen.
3. Das Verzeichnis "inc/sqlbrowser" fand ich einen zweiten Blick wert
4. Die Datei "sql_dataview" fand ich sehr interessant, da ich vermutet habe das der Name irgendetwas mit der Anzeige von Daten zu tun hat
5. In der alten sql_dataview habe ich die Vorkommnisse "MSD" durch "MOD" erstetzt
6. Die so modifizierte sql_dataview.php habe ich dann auf gut Glück hochgeladen und die vorhandene Datei ersetzt.
7 Volltreffer - der SQL Browser zeigt nun auch grosse Datenbanken an und verbraucht nur sehr wenig Speicher

Ich habe die modifizierte Datei einmal angehangen. Evtl. kannst Du die Datei oder Teile davon für eines der nächsten Releases gebrauchen.

Gruss
Ralf
Dateianhänge
sql_dataview.zip
(5.15 KiB) 191-mal heruntergeladen
Hinnerk
Beiträge: 1
Registriert: 15.11.2022, 11:59

Re: SQL Browser

Beitrag von Hinnerk »

RalfKerkhoff hat geschrieben: 28.10.2021, 21:04 Update:
Ich habe es geschafft den SQL Browser auch mit der grossen Datenbank ans Laufen zu bekommen :-)
...
Ich bin begeistert! Vielen Dank! Nachdem alle Tipps und Hinweise nicht dazu beitrugen dass ich im OOSDumper den SQL-Browser aufrufen konnte (weiße Seite) probierte ich es mit der sql_dataviev.php.
Und sie da, Jetzt klappt es mit dem SQL-Browser! Mein Forum läuft übrigens unter phb 8.02. Der SQL-Browser lief aber auch unter php7.4 nicht.

Es wäre sicherlich von vorteil, wenn der Autor der Erweiterung da die sql_dataviev.php einpflegen würde.
r23
Beiträge: 2625
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Re: SQL Browser

Beitrag von r23 »

Hinnerk hat geschrieben: 15.11.2022, 12:08 Es wäre sicherlich von vorteil, wenn der Autor der Erweiterung da die sql_dataviev.php einpflegen würde.
Ich habe mindestens drei Fehler auf einen sehr kurzen Blick gesehen. In dieser Form können wir die Änderungen leider nicht übernehmen.
r23
Beiträge: 2625
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Re: SQL Browser

Beitrag von r23 »

Hallo,

die Ziele 164 aus der zur Verfügung gestellten Datei


$temp[$x]['data']=(((($___mysqli_tmp = mysqli_fetch_field_direct($res, $x)) && is_object($___mysqli_tmp)) ? ( (!is_null($___mysqli_tmp->primary_key = ($___mysqli_tmp->flags & MYSQLI_PRI_KEY_FLAG) ? 1 : 0)) && (!is_null($___mysqli_tmp->multiple_key = ($___mysqli_tmp->flags & MYSQLI_MULTIPLE_KEY_FLAG) ? 1 : 0)) && (!is_null($___mysqli_tmp->unique_key = ($___mysqli_tmp->flags & MYSQLI_UNIQUE_KEY_FLAG) ? 1 : 0)) && (!is_null($___mysqli_tmp->numeric = (int)(($___mysqli_tmp->type <= MYSQLI_TYPE_INT24) || ($___mysqli_tmp->type == MYSQLI_TYPE_YEAR) || ((defined("MYSQLI_TYPE_NEWDECIMAL")) ? ($___mysqli_tmp->type == MYSQLI_TYPE_NEWDECIMAL) : 0)))) && (!is_null($___mysqli_tmp->blob = (int)in_array($___mysqli_tmp->type, array(MYSQLI_TYPE_TINY_BLOB, MYSQLI_TYPE_BLOB, MYSQLI_TYPE_MEDIUM_BLOB, MYSQLI_TYPE_LONG_BLOB)))) && (!is_null($___mysqli_tmp->unsigned = ($___mysqli_tmp->flags & MYSQLI_UNSIGNED_FLAG) ? 1 : 0)) && (!is_null($___mysqli_tmp->zerofill = ($___mysqli_tmp->flags & MYSQLI_ZEROFILL_FLAG) ? 1 : 0)) && (!is_null($___mysqli_type = $___mysqli_tmp->type)) && (!is_null($___mysqli_tmp->type = (($___mysqli_type == MYSQLI_TYPE_STRING) || ($___mysqli_type == MYSQLI_TYPE_VAR_STRING)) ? "type" : "")) &&(!is_null($___mysqli_tmp->type = ("" == $___mysqli_tmp->type && in_array($___mysqli_type, array(MYSQLI_TYPE_TINY, MYSQLI_TYPE_SHORT, MYSQLI_TYPE_LONG, MYSQLI_TYPE_LONGLONG, MYSQLI_TYPE_INT24))) ? "int" : $___mysqli_tmp->type)) &&(!is_null($___mysqli_tmp->type = ("" == $___mysqli_tmp->type && in_array($___mysqli_type, array(MYSQLI_TYPE_FLOAT, MYSQLI_TYPE_DOUBLE, MYSQLI_TYPE_DECIMAL, ((defined("MYSQLI_TYPE_NEWDECIMAL")) ? constant("MYSQLI_TYPE_NEWDECIMAL") : -1)))) ? "real" : $___mysqli_tmp->type)) && (!is_null($___mysqli_tmp->type = ("" == $___mysqli_tmp->type && $___mysqli_type == MYSQLI_TYPE_TIMESTAMP) ? "timestamp" : $___mysqli_tmp->type)) && (!is_null($___mysqli_tmp->type = ("" == $___mysqli_tmp->type && $___mysqli_type == MYSQLI_TYPE_YEAR) ? "year" : $___mysqli_tmp->type)) && (!is_null($___mysqli_tmp->type = ("" == $___mysqli_tmp->type && (($___mysqli_type == MYSQLI_TYPE_DATE) || ($___mysqli_type == MYSQLI_TYPE_NEWDATE))) ? "date " : $___mysqli_tmp->type)) && (!is_null($___mysqli_tmp->type = ("" == $___mysqli_tmp->type && $___mysqli_type == MYSQLI_TYPE_TIME) ? "time" : $___mysqli_tmp->type)) && (!is_null($___mysqli_tmp->type = ("" == $___mysqli_tmp->type && $___mysqli_type == MYSQLI_TYPE_SET) ? "set" : $___mysqli_tmp->type)) &&(!is_null($___mysqli_tmp->type = ("" == $___mysqli_tmp->type && $___mysqli_type == MYSQLI_TYPE_ENUM) ? "enum" : $___mysqli_tmp->type)) && (!is_null($___mysqli_tmp->type = ("" == $___mysqli_tmp->type && $___mysqli_type == MYSQLI_TYPE_GEOMETRY) ? "geometry" : $___mysqli_tmp->type)) && (!is_null($___mysqli_tmp->type = ("" == $___mysqli_tmp->type && $___mysqli_type == MYSQLI_TYPE_DATETIME) ? "datetime" : $___mysqli_tmp->type)) && (!is_null($___mysqli_tmp->type = ("" == $___mysqli_tmp->type && (in_array($___mysqli_type, array(MYSQLI_TYPE_TINY_BLOB, MYSQLI_TYPE_BLOB, MYSQLI_TYPE_MEDIUM_BLOB, MYSQLI_TYPE_LONG_BLOB)))) ? "blob" : $___mysqli_tmp->type)) && (!is_null($___mysqli_tmp->type = ("" == $___mysqli_tmp->type && $___mysqli_type == MYSQLI_TYPE_NULL) ? "null" : $___mysqli_tmp->type)) && (!is_null($___mysqli_tmp->type = ("" == $___mysqli_tmp->type) ? "unknown" : $___mysqli_tmp->type)) && (!is_null($___mysqli_tmp->not_null = ($___mysqli_tmp->flags & MYSQLI_NOT_NULL_FLAG) ? 1 : 0)) ) : false ) ? $___mysqli_tmp : false);


werde ich nicht einbauen.

Problematisch finde ich, dass wir bei jeder Datenbanktabelle diesen Befehl ausführen

Code: Alles auswählen

$select12 = "select * from $tabellenname";
Grundlagen von SQL:
Ein SQL Select Befehl sollte niemals mit einem Stern, also SELECT * FROM Tabelle ausgeführt werden, da dann alle Spalten der SQL SELECT Abfrage zurückgeliefert werden.

Dieser select * ist aber notwendig, weil sonst die Menge an Datensätze in einer Tabelle nur ein Näherungswert ist. D.h. mal stimmt die Zahl und in der Regel nicht.

Vor diesem Hintergrund stellt uns, wie wir dem Kommentar entnehmen können

Code: Alles auswählen

                /***********************
                Ergänzung www.betanet-web.ch - 30.04.2019
                Anz. Einträge in der Tabelle wird in Ausgabe Array überschrieben, damit alle Daten exportiert werden.
                ************************/
diese Abfrage zur Verfügung.


Problematisch ist, dass dort steht: damit alle Daten exportiert werden.

Wenn wir dies an dieser Stelle löschen, werden dann wo nicht alle Daten exportiert oder störte nur die fehlerhafte Zahl damals?

Auch die Ausgabe der Tabelle ist mehr als merkwürdig. Auch hier muss dringend gearbeitet werden...

Es bleibt spannend.

Viele Grüße

Ralf
Antworten