Mysql-Backup

saila

Erfahrenes Mitglied
Hi,

folgendes Script:

PHP:
<?php
$sql = mysql_connect('xxx','xxx','xxx');
mysql_select_db('xxx',$sql);

$backup = "";
$inserts = "";
$insert = "";

$con = mysql_list_tables('xxx');

while($row = mysql_fetch_row($con)) {
	$som = mysql_query("SHOW CREATE TABLE ".$row[0]."");
	$ds = mysql_fetch_object($som);
	$name = mysql_field_name($som, 1);
	$inserts = "";
	$zum = mysql_query("SELECT * FROM ".$row[0]."");
	$anzahl = mysql_num_fields($zum);
	for($i = 0; $i <= $anzahl; $i++) {
		$inserts .= mysql_field_name($zum, $i)." ";
	}
	$checker = str_replace(" ", ", ", $inserts);
	$checker = str_replace(", ,", "", $checker);
	$rol = mysql_query("SELECT $checker FROM ".$row[0]);
	if($p = mysql_num_rows($rol) > 0) {
		while($s = mysql_fetch_object($rol)) {
			$spalten = trim($checker);
			$insert .= "INSERT INTO ".$row[0]." ($spalten) VALUES (";
			foreach($s AS $key => $vars) {
				$varse = str_replace("\015", "\\n", $vars);
				$varse = str_replace("\012", "\\n", $varse);
				$varse = str_replace("'", "\'", $varse);
				$varse = htmlspecialchars($varse);
				$insert .= "'$varse',";
			}
			$insert .= ");\n";
			$insert = str_replace(",);", ");", $insert);
		}
	}
	else { $insert .= "#------------- Now Inserts ---------------#"; }
	$checker = "";
	$backup .= "\n\n".$ds->$name.";\n\n\r$insert\n\r";
	$insert = "";
}
mysql_free_result($rol);
mysql_free_result($som);
mysql_free_result($con);
mysql_close($sql);
$handler = fopen("backupa.sql", "w+");
fwrite($handler, $backup);
fclose($handler);
?>


dient ein Backup einer DB zu erledigen. Gesteuert über Cronjob. Allerdings verliert das Script die DB-Verbindung. Gibt es hierfür eine Lösung oder warum könnte hier die Verbindung verloren gehen?
 
Was heißt "verliert die Verbindung"? Läuft das Skript und bricht dann einfach mit einem Verbindungsfehler o.ä. ab?

Wenn das Skript aber eh über Crontab läuft, kannst du doch auch gleich mysqldump als Befehl nehmen, oder spricht da etwas dagegen?

Code:
mysqldump -u User -pPasswort -h Host DBName >> dbbackup.sql

MfG, teccco
 
Ja das ist auch ein normaler Cronjob. An Stelle deines PHP-Skripts schreibst du einfach folgende Zeile

Code:
* * * * mysqldump -u User -pPasswort -h Host DBName > dbbackup.sql

Wobei du natürlich die * durch deine Zeitangaben ersetzen musst. Also mal angenommen der Benutzer heißt "Hans", das Passwort ist "GuckindieLuft", der MySQL-Server läuft auf "localhost" und die Datenbank heißt "Maerchen", dann sehe das so aus:

Code:
* * * * mysqldump -u Hans -pGuckindieLuft -h localhost Maerchen > dbbackup.sql

Das Ergebnis wäre, dass du dann deinen Dump in der Datei "dbbackup.sql" hast.

MfG, teccco
 
an diese Möglichkeit habe ich noch gar nicht gedach.

Für die Datei, muss hierfür noch ein Verzeichnis angegeben werden oder wo wird diese dann gespeichert?
 
Da bin ich mir jetzt garnicht so sicher. Die Datei sollte aber im Home-Verzeichnis des Users gespeichert werden, dem der Cronjob gehört. Aber zur Sicherheit nutzt du einfach einen kompletten Pfad a la:

Code:
/home/hans/dbbackup.sql
 
Nein, bei mir nicht:
Enter password: mysqldump: Got error: 1045: Access denied for user: blabla (Using password: NO) when trying to connect.

Woei die Zugangsberechtigung korrket ist....
 
Zurück