Hallo
dieses Thema würde eigentlich in das Form "Conifxx und PHP|MySql" passen, jedoch handelt es sich auch um CGI, deswegen einfach hier rein, falls es gar nicht hier rein passt, bitte verschieben.
Also, ich versuche mit einem Cronjob meine MySql DB zu backuppen.
Dafür habe ich den Cronjob so eingestellt
(Tesweise alle 5min)
*/5 * * * * /usr/bin/php5 /var/www/web143/html/cgi-bin/backup.php
mein PHP Script sieht wie folgt aus:
<?php
/* Einstellungen start */
$mysql_host = "localhost"; //MySQL-Hostname
$mysql_dbs = array('DB_TABELLE');
$mysql_user = "DB_USER"; //Mysql-Benutzer
$mysql_pass = "DB_PW"; //Mysql-Passwort
$speicherort = "backup/"; //Speicherort
/* Einstellungen ende */
$mysql_link = @mysql_connect($mysql_host,$mysql_user,$mysql_pass);
if($mysql_link == false)
{
die("-E: Verbindung zur Datenbank ist fehlgeschlagen!<br>\n");
}
if(!isset($mysql_dbs))
{
$mysql_db_list = mysql_list_dbs($mysql_link);
if(mysql_num_rows($mysql_db_list) <= 0)
{
die("-E: Keine Datenbank(en) gefunden<br>\n");
}
while ($row = mysql_fetch_array($mysql_db_list))
{
$mysql_dbs[] = $row[0];
}
}
foreach($mysql_dbs as $mysql_db)
{
mysql_select_db($mysql_db);
$mysql_tables = array();
$mysql_table_list = mysql_list_tables($mysql_db);
if(mysql_num_rows($mysql_table_list) >= 1)
{
while ($row = mysql_fetch_row($mysql_table_list))
{
$mysql_tables[] = $row[0];
}
}
$file = $speicherort.$mysql_db."-".date('d.m.Y').".sql";
if(file_exists($file))
{
unlink($file);
}
$backup = fopen($file,'w');
foreach($mysql_tables as $mysql_table)
{
$mysql_table_info = Array();
$i = 0;
$mysql_table_infos = mysql_query("DESCRIBE ".$mysql_table);
while($row = mysql_fetch_array($mysql_table_infos))
{
$mysql_table_info[$i]['fieldname'] = $row[0];
$mysql_table_info[$i]['typ'] = $row[1];
$mysql_table_info[$i]['null'] = $row[2];
$mysql_table_info[$i]['key'] = $row[3];
$mysql_table_info[$i]['default'] = $row[4];
$mysql_table_info[$i]['extra'] = $row[5];
$i++;
}
$befehl = "CREATE TABLE IF NOT EXISTS `".$mysql_table."` (\n";
$pri = false;
$auto_increment = false;
$increment_feld = "";
fwrite($backup,"-- --------------------------------------------------\n-- Struktur der Tabelle ".$mysql_table."\n-- --------------------------------------------------\n\n");
foreach($mysql_table_info as $mysql_spalte_info)
{
$befehl .= " `".$mysql_spalte_info['fieldname']."` ";
$befehl .= $mysql_spalte_info['typ']." ";
if($mysql_spalte_info['default'] != "")
$befehl .= "default `".$mysql_spalte_info['default']."` ";
else
$befehl .= "default NULL";
if($mysql_spalte_info['extra'] != "" || !empty($mysql_spalte_info['extra']))
$befehl .= " ".$mysql_spalte_info['extra'].",\n";
else
$befehl .= ",\n";
if($mysq_spalte_info['key'] != "" || !empty($mysql_spalte_info['key']))
{
$pri[] = $mysql_spalte_info['fieldname'];
}
if($mysql_spalte_info['extra'] != "" || !empty($mysql_spalte_info['extra']))
{
$auto_increment = true;
$increment_feld = $mysql_spalte_info['fieldname'];
}
}
$befehl = substr($befehl,0,(strlen($befehl)-2));
if($pri != false)
{
$befehl .= ",\n PRIMARY KEY (";
foreach($pri as $pr)
$befehl .= "`".$pr."`,";
$befehl = substr($befehl,0,(strlen($befehl)-1));
$befehl .= ")";
}
if($auto_increment)
{
$auto_inc = mysql_query("SELECT ".$increment_feld." FROM ".$mysql_table." ORDER BY ".$increment_feld." DESC LIMIT 1");
while($inc = mysql_fetch_assoc($auto_inc))
{
$zahl = $inc[$increment_feld]+1;
}
$befehl .= "\n) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=".$zahl." ;\n\n";
}
else
{
$befehl .= "\n) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;\n\n";
}
fwrite($backup,$befehl);
fwrite($backup,"-- --------------------------------------------------\n-- Daten der Tabelle ".$mysql_table."\n-- --------------------------------------------------\n\n");
$befehl = "TRUNCATE TABLE `".$mysql_table."`;\n";
fwrite($backup,$befehl);
$datensaetze = mysql_query("SELECT * FROM ".$mysql_table.";");
while ($datensatz = mysql_fetch_assoc($datensaetze))
{
$values = "";
foreach($datensatz as $value)
{
$values .= "'".mysql_real_escape_string($value)."',";
}
$values = substr($values,0,(strlen($values)-1));
$befehl = "INSERT INTO `".$mysql_table."` VALUES (".$values.");\n";
fwrite($backup,$befehl);
}
}
echo "Backup of ".$mysql_db." done<br>\n";
fclose($backup);
}
?>
Display More
Testweise habe ich die php datei und den ordner backup mit den rechten 777 ausgestattet
so, nachdem ich nun in Confixx bei dem Cronjob auf speichern gedrückt habe, habe ich mal so 10min gewartet und dann bekam ich eine e-Mail von Cron Daemon mit folgendem Inhalt:
Quote
Warning: fopen(backup/usr_web143_1-04.03.2010.sql): failed to open stream: Permission denied in /var/www/web143/html/cgi-bin/backup.php on line 61
Warning: fwrite(): supplied argument is not a valid stream resource in /var/www/web143/html/cgi-bin/backup.php on line 81
...
Warning: fwrite(): supplied argument is not a valid stream resource in /var/www/web143/html/cgi-bin/backup.php on line 129
Backup of usr_web143_1 done<br>
Warning: fclose(): supplied argument is not a valid stream resource in /var/www/web143/html/cgi-bin/backup.php on line 144
Display More
Die Datei backup.php habe ich in den cgi-bin Ordner gelegt, weil ich irgendwo mal gehört habe, dass ein Cronjob nur dort ausgeführt wird.
Ich habe schon vieles versucht, auch mit CGI Scripten, jedoch bekam ich immer eine E-Mail (bei dem CGI-Script jedoch mit einer anderen Fehlermeldung).
Ich weiß wirklich nicht mehr wo der Fehler liegt.
Es wäre nett, wenn ihr mit helfen könntet.
Noch eine Anmerkung, ich besitze das Produkt Business 1024.
Mfg. Tobias