Forum: PC-Programmierung MySQL - Daten beim Webhoster löschen


von Heinz R. (heijz)


Lesenswert?

Ich will über PHPMyAdmin in einer bei einem Webhoster liegenden 
Datenbank Daten löschen  - z.B. alles älter als Timestamp X

Ich kann nicht von extern auf die Datenbank zugreifen, nur über ein vom 
Provider zur Verfügung gestelltes PHPMyAdmin oder eben über dort 
gehostete eigene Programme

Eigentlich wäre es ganz einfach:
DELETE FROM `data` WHERE `timestamp` < 1546297200

Leider erhalte ich aber nach einigen Sekunden ein Timeout - der Hoster 
lässt wohl soclhe großen Datenmengen nicht zu

Wie kann man das umgehen?

Datenbank herunter laden, lokal bearbeiten, wieder hoch laden?

Datenbank ist ca. 1 GB groß

Viele Grüße
Heinz

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Normalerweise ist das Timeout nur eine Laufzeitüberschreitung des 
PHP-Scipts. Der MySQL-Server müsste die Operation trotzdem komplett 
ausführen, nur daß Du dann keine Rückmeldung mehr erhältst (weil die 
HTTP(S)-Verbindung nicht mehr steht).

von Hmmm (Gast)


Lesenswert?

Mit einem Index auf timestamp sollte es schneller gehen.

von Heinz R. (heijz)


Lesenswert?

Ben B. schrieb:
> Normalerweise ist das Timeout nur eine Laufzeitüberschreitung des
> PHP-Scipts. Der MySQL-Server müsste die Operation trotzdem komplett
> ausführen,

Tut er leider nicht - #2006 - MySQL server has gone away
Ich sehe an den Datensätzen, das es auch nicht weniger geworden sind - 
hatte gehofft es werden wenigstens ein paar gelöscht, und ich muss halt 
das Ganze mehrfach ausführen

Hmmm schrieb:
> Mit einem Index auf timestamp sollte es schneller gehen.

Verstehe ich zugegeben nicht, was muss ich da machen?

Das Problem ist wohl das Webhoster - zumindest meiner - das wait_timeout 
auf 60 gesetzt haben

Kann ich da überhaupt was machen?
Mein nächster Versuch wäre jetzt, Adminer auf meinem Webspace zu 
installieren?
https://www.adminer.org/de/

Die Datenbank hat momentan ca. 12 Mio Einträge, mir würde es reichen ca. 
3 Mio am Anfang zu löschen

Kennt jemand z.B. den PHP-Befehl um die ersten 100.000 zu löschen? 
Vielleicht geht es ja dann schneller, wenn ich das dann einfach 30 mal 
ausführe?

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Hänge mal ein „LIMIT 100000“ an und führe das ganze so oft aus wie 
nötig.

: Bearbeitet durch Admin
von Heinz R. (heijz)


Lesenswert?

Hallo Andreas,

vielen Dank, so hat es jetzt funktioniert, die Werte sind weg :-)

Viele Grüße

von Hmmm (Gast)


Lesenswert?

Heinz R. schrieb:
> Hmmm schrieb:
>> Mit einem Index auf timestamp sollte es schneller gehen.
>
> Verstehe ich zugegeben nicht, was muss ich da machen?

Mit einem Index sagst Du quasi der Datenbank, dass sie Zugriffe auf 
bestimmte Spalten optimieren soll, damit bei einem WHERE nicht die 
gesamte Tabelle von vorne bis hinten gelesen werden muss.

Spontan dazu gefunden, ohne es inhaltlich geprüft zu haben:

https://www.php-einfach.de/mysql-tutorial/optimierung-von-mysql-verwendung-des-index/

Wenn Du Pech hast, dauert allerdings die Index-Erstellung bei der 
vorhandenen Datenbank auch wieder so lange, dass Du am Zeitlimit 
scheiterst.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.