[MYSQL] DB sichern

Crown-Job (manuell)

Hallo,

für alle die, die einen "manuell angestossenen" Crown-Job benötigen:

1. legt Euch wie folgt eine Tabelle an, in der das Datum des letzten Updates notiert wird:

PHP:
CREATE TABLE `last_update` (
  `id` int(3) NOT NULL default '0',
  `datum` varchar(16) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;

#
# Daten für Tabelle `last_update`
#

INSERT INTO `last_update` VALUES (1, '1');

2. dann fügt Ihr z.B. in die dp.php oder in eine sonst (auf jede Seite) eingebundene php-Datei folgenden Schnipsel ein:

PHP:
$heute_num = mktime(0,0,0,date("m"),date("d"),date("y"));
$result_last = mysql_query("SELECT * FROM last_update");
$my_last = mysql_fetch_array($result_last);
$last_num = $my_last[datum];
if ($last_num < $heute_num) {
// Crown-Job-Anweisungen 
  include_once($DOCUMENT_ROOT."/include/crown.php");
  $sql_update = "UPDATE last_update SET datum = '$heute_num' WHERE id = '1'";
  $mysql_query($sql_update);
}

3. in die crown.php packt Ihr alle die Anweisungen, die dann automatisch einmal am Tag ausgeführt werden sollen...

Für kürzere Abstände kann man sicherlich auch noch rumbasteln.

Schöne Grüsse aus Köln,
Achim
 
Zuletzt bearbeitet:
hm, ja. Das Problem mit dem
"Variable passed to each() is not an array or object in /www/users/.../backup.php on line 65"
tritt auch weiterhin auf, hat bislang jemand dafür eine Lösung gefunden?

Die betroffene Zeile ist (gibt's nur einmal):
PHP:
    while (list($xy, $columns) = each($index)) {
Der Witz an der Sache ist, dass die Datenbank-Sicherung an sich einwandfrei funktioniert - die Ausgabe ist bis auf die Kommentare identisch mit der herkömmlichen Sicherung ...

Was mir sonst noch aufgefallen ist: benutze ich
$def="";
unset($index);
(anstelle von unset($def,$index); )
und
$data="";
(anstelle von unset($data); )
tritt die Fehlermeldung einmal mehr auf ...

Wäre echt klasse, wenn jemand dafür eine Lösung hätte ...


Schöne Grüsse,
Achim
 
Leider nein ... aber andere Lösung

Hi Ben Ben,

vielen Dank auf jeden Fall für den passenden Denk-Anstoss.

Das Array zu erzwingen, brachte nur zwei Zeilen tiefer "Warning: implode(): Bad arguments. in /www/users/.../backup.php on line 70" ....

Aber mit einer Kontroll-Ausgabe bin ich dann _endlich_ auf den Fehler gestossen:
Bei allen Tabellen, die _gar_ keinen Index definiert haben, gibt's die Fehlermeldung (die vorher erwähnte unterschiedliche Anzahl an Meldungen kam wohl nur durch mein Ausprobieren!).

... Ist schon schade, wenn man eine alte DB übernimmt und sich drauf verlässt, dass der Vorgänger sauber programmiert hat...

Also an alle, die den Fehler noch haben: darauf achten, dass jede Tabelle einen Index definiert hat!

Schöne Grüsse,
Achim
 
Hi
Danke für die vielen Tips erstmal. Sowas hab ich schon länger gesucht.

Jetzt hab ich noch ein Problem mit dem Script:

Es lässt sich zwar ausführen aber nicht komplett Fehlerfrei.

Hier mal die Meldung:
Warning: mysql_get_server_info(): Access denied for user: 'wwwrun@localhost' (Using password: NO) in /home/www/blabla/html/webseite/backup.php on line 24

Warning: mysql_get_server_info(): A link to the server could not be established in /home/www/blabla/html/webseite/backup.php on line 24

DB Name Anzahl Tabellen Größe
usr_blabla_2 0 0.36 KB

Das DB - Backup wurde erfolgreich durchgeführt.
Die Dateien befinden sich im Verzeichniss /backup/

Auf Linie 24 Steht folgendes: $text .= "# MySQL-Version: ".mysql_get_server_info()."\r\n";

Linie 19 bis 27 hab ich so belassen wie es hier auch steht nämlich so:

PHP:
$text  = "# --------------------------------------------------------\r\n";
$text .= "# DATENBANK DUMP\r\n";
$text .= "# Host: ".$db_host."\r\n";
$text .= "# Erstellungszeit: ".date("d. F Y")." um ".date("H:i")."\r\n";
$text .= "# Server Betriebssystem: ".php_uname()."\r\n";
$text .= "# MySQL-Version: ".mysql_get_server_info()."\r\n";
$text .= "# PHP-Version: ".phpversion()."\r\n";
$text .= "# Datenbank: `$database`\r\n";
$text .= "# --------------------------------------------------------\r\n\r\n";

Muss man da noch etwas anderes einstellen?
Oder reichte es so wie es ist und sichert die Komplette Datenbank mit allen Forenbeiträgen, Userstatus, Struktur, usw... ?

Gruss

Edit: ich habe in der zwischenzeit einen Befehl gefunden:
/pfad/zu/mysqldump -u root --password=passwort --all-databases > /tmp/dbbackup.sql
Ist es dieser der im Confixx als cronjob-befehl reichen würde um die komplette db zu sichern?
 
Zuletzt bearbeitet:
Kann jemand vielleicht noch das Skript in soweit umschreiben dass es die DB-Tabellen in eine tar.gz-Datei mit der PHP-Funktion packt und dieses Archiv dann immer nach dem aktuellen Datum benennt (z.B. 23_12_2004.tar.gz) ?

Wäre klasse :).

Auch bräuchte ich noch ein Skript welches automatisch jeden Monat ein Backup das kompletten Webspaces anlegt (auch tar.gz-gepackt) und dieses auch im Ordner /backup/ abspeichert. Hat da jemand zufällig ein passendes Skript welches man dann per Cronjob einfach nur aufrufen muss ?
 
Zurück