Frage zu mysql_dump...

Bash, Shell, PHP, Python, Perl, CGI
Anonymous

Frage zu mysql_dump...

Post by Anonymous »

Schönen guten Tag,

ich möchte folgendes realisieren:

Ein Cronjob soll ein Script ausführen, dass für einen bestimmten Datensatz eine SQL-Datei mit Namen z.b. der Datensatzid auf dem Webspace speichert.

Alles andere ist dann kein problem mehr, doch wie kann ich einen Datensatz (nicht die ganze Datenbank) als SQL-File auf dem webspace speichern?

Ich weß, dass man eigentlich nur Hilfen geben soll, aber über eine konkretes beispielscript wäre ich sehr dankbar :wink:

Vielen Dank!


Mit freundlichen Grüßen
Astrid
odysseus
Posts: 115
Joined: 2003-02-07 10:21

Re: Frage zu mysql_dump...

Post by odysseus »

Soweit ich weiß, kann man mit mysqldump keine einzelnen Datensätze dumpen. Man kann aber einzelne Tabellen dumpen:

> mysqldump -uUSER -pPASSWORD DBNAME TABELLENNAME > /pfad/zur/datei.sql

Du kannst aber z.B. ein PHP-Script anfertigen, welches den bestimmten Datensatz in eine Textdatei schreibt. Das PHP-Script kannst du dann per CRON starten lassen.

Dazu musst du wissen, welche Attribute du dumpen willst, aber das sollte dir bekannt sein. :)

Also in etwa sowas:

Code: Select all

<?
// Datei: /home/.../make_dump.php

// MySQL Connect herstellen
// ....

// Daten aus der DB lesen
$res = mysql_query("SELECT * FROM tabelle WHERE bedingung=1");
$row = mysql_fetch_array($res);
mysql_free_result($res);
$string = "INSERT INTO dbname (x1, x2, x3) VALUES ('".$row[x1]."', '".$row[x2]."', '".$row[x3]."')";

// Daten in Datei schreiben
$fd = fopen("dump.sql");
...... // usw.

// Ende
mysql_close();
?>
Und das dann eben per CRON jede Stunde ausführen:

Code: Select all

0 * * * * /usr/localbin/php /home/.../make_dump.php

Die Detauils musst du dir halt ergänzen.
Sollte eigentlich auf diese Weise möglich sein.
Anonymous

...

Post by Anonymous »

Hi und Hallo,

erst einmal vielen vielen Dank für die super Antwort. Das hört sich alles auch schon sehr gut an.

Also das mit dme Cronjob und Datenbankverbindung, ... ist alles gar kein Problem.
Wie aber kann ich die selektierten daten nun genau in die Datei schrieben und diese datei dann auch in einem bestimmten Namen mit einem bestimmten Verzeichnis abspeichern?

Wäre klasse, wenn du mir da noch einmal helfen könntest.


Dann noch mal eine etwas allgemeinere Frage:
Macht es vom Speicherplatz eigentlich viel aus, ob ich die Einträge in einer Datenbank speichere oder wie hier als SQL-datei auf dem Webspace?


Vielen Dank!


Beste Grüße
Astrid
Last edited by Anonymous on 2003-12-27 15:13, edited 1 time in total.
Anonymous

...

Post by Anonymous »

Odysseus wrote:Soweit ich weiß, kann man mit mysqldump keine einzelnen Datensätze dumpen. Man kann aber einzelne Tabellen dumpen:

> mysqldump -uUSER -pPASSWORD DBNAME TABELLENNAME > /pfad/zur/datei.sql

Du kannst aber z.B. ein PHP-Script anfertigen, welches den bestimmten Datensatz in eine Textdatei schreibt. Das PHP-Script kannst du dann per CRON starten lassen.

Dazu musst du wissen, welche Attribute du dumpen willst, aber das sollte dir bekannt sein. :)

Also in etwa sowas:

Code: Select all

<?
// Datei: /home/.../make_dump.php

// MySQL Connect herstellen
// ....

// Daten aus der DB lesen
$res = mysql_query("SELECT * FROM tabelle WHERE bedingung=1");
$row = mysql_fetch_array($res);
mysql_free_result($res);
$string = "INSERT INTO dbname (x1, x2, x3) VALUES ('".$row[x1]."', '".$row[x2]."', '".$row[x3]."')";

// Daten in Datei schreiben
$fd = fopen("dump.sql");
...... // usw.

// Ende
mysql_close();
?>
Und das dann eben per CRON jede Stunde ausführen:

Code: Select all

0 * * * * /usr/localbin/php /home/.../make_dump.php

Die Detauils musst du dir halt ergänzen.
Sollte eigentlich auf diese Weise möglich sein.
Warum eigentlich insert? Wieso nicht select wert1, wert2, ...
oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim

Re: Frage zu mysql_dump...

Post by oxygen »

Der String soll doch benutzt werden um die Daten später zu importieren.
Anonymous

...

Post by Anonymous »

Klar,

jetzt kapiere ich es auch, aber wie funktioniert nun das genaue einschreiben?

Da liegt nun noch das einzige problem, oder funktioniert das Script so?

Beste Grüße
Astrid
odysseus
Posts: 115
Joined: 2003-02-07 10:21

Re: Frage zu mysql_dump...

Post by odysseus »

Wie oxygen schon sagte, soll die Zeile mit dem INSERT in eine Datei geschrieben werden, um diese dann auch wieder importieren zu können. Ein SQL-Dump ist ja nichts anderes als eine Textdatei mit zahllosen INSERT-Befehlen, durch den die gesamten Daten wieder in die Datenbank eingespielt werden.

Schreiben tust du das mit den Datei-Befehlen von PHP. Ich überarbeite den Code mal:

Code: Select all

<?php
// Datei: /home/.../make_dump.php 

// MySQL Connect herstellen 
$dbconnect = mysql_connect ("localhost", "mysql_user", "mysql_password");

// Daten aus der DB lesen 
$res = mysql_query("SELECT * FROM tabelle WHERE bedingung=1"); 
$row = mysql_fetch_array($res); 
mysql_free_result($res); 

// String bauen
$string = "INSERT INTO tabelle (x1, x2, x3) VALUES ('".addslashes($row[x1])."', '".addslashes($row[x2])."', '".addslashes($row[x3])."')n"; 

// Daten in Datei schreiben
$fd = fopen("/home/.../dump.sql", "a");
fwrite($fd, $string);
fclose($fd);

// Ende 
mysql_close($dbconnect); 

?>
In die Datei wird dann am Ende eine Zeile in der Form "INSERT INTO tabelle (x1, x2, x3) VALUES ('wert1', 'wert2', 'wert3')" geschrieben. Die Zeile wird mit CR abgeschlossen, also steht der Filepointer für die nächste Schreiboperation gleich am Anfang der nächsten Zeile. (Hoffe ich ^^)
Wenn du die Werte nicht am Schluss anhängen willst, sondern immer das Vorhandene überschreiben möchtest, dann benutze bei fopen() nicht den Parameter "a", sondern "w".

Statt /home/.../dump.sql musst du natürlich den absoluten Pfad deiner Zieldatei angeben. :)