![]() |
Php: Datenbank-Backup...
Hi
ich versuche im moment mit Php ein Script zu schreiben mit welchem ich mir ein Backup einer Datenbank erstellen kann und dieses als Datei herunterzuladen. wie ich gesehen hab gibt es wohl insgesamt 3 möglichkeiten
da aber system() deaktiviert ist (funpic) und ich den weg über phpmyadmin eben nicht gehen will, würde ich gerne diesen Query nutzen. dazu habe ich es mit folgendem Script versucht:
Code:
Das ganze wird von einer index.php aufgerufen, die die datenbank verbindung herstellt...
<?php
$list = mysql_list_tables("glkgereon"); while ($table = mysql_fetch_row($list)) { $bckfile = "/backup/bck_".$table[0]."_".date("d.m.y").".bck"; $q = "SELECT * INTO OUTFILE '$bckfile' FROM $table[0]"; mysql_query($q); } ?> die liste mit den tabellen kommt auch völlig korrekt an, der backup-Ordner ist auch vorhanden also die Verzeichnisstruktur ist (gekürzt) so:
Code:
FTP
- backup (DIR) - php (DIR) - anzeige - backup.inc.php - index.php Der einzige Fehler: es werden keine Dateien erstellt :( woran liegt das? |
Re: Php: Datenbank-Backup...
hi,
bei mir funktioniert dein script. aber die datei liegt im mysql\data verzeichnis. |
Re: Php: Datenbank-Backup...
du könntest bei phpbb nachgucken, wie die ihr backup durchführen, wobei ich nicht weiß was die alles backupen
Gruß Thomas |
Re: Php: Datenbank-Backup...
hi,
oder du guckst mal bei ![]() vielleicht funktioniert ja das ein oder andere script auch bei funpic |
Re: Php: Datenbank-Backup...
Zitat:
|
Re: Php: Datenbank-Backup...
ok, also /backup war schonmal falsch :)
is ja kein root-pfad... wie ich schon sagte ist es ein funpic-server @Flocke: wie kriege ich denn raus, in welchem Verzeichnis meine index.php liegt? |
Re: Php: Datenbank-Backup...
Zitat:
|
Re: Php: Datenbank-Backup...
Ein
Code:
würd's auch tun.
<?php
echo getcwd(); ?> |
Re: Php: Datenbank-Backup...
getcwd gibt folgenden pfad aus:
/usr/export/www/vhosts/funnetwork/hosting/glkgereon also müsste doch /usr/export/www/vhosts/funnetwork/hosting/glkgereon/backup/bck_users_23.10.05.bck ein korrekter dateiname sein, oder??? könnte es sein das bestimmte Querys (zb dieser :) ) auf dem server deaktiviert sind? geht das überhaupt? oder das mysql auf dem server keine schreibrechte hat...oder auf den ordner nicht? |
Re: Php: Datenbank-Backup...
Liste der Anhänge anzeigen (Anzahl: 1)
Bist du sicher, dass der MySQL-Server auf derselben Maschine läuft?
Als Anlage ein kleines PHP-Skript, mit dem du ein Backup deiner Datenbank ziehen kannst; du musst nur unten die Variablen anpassen:
Code:
define('DB_HOST', 'localhost');
define('DB_USER', 'root'); define('DB_PASS', 'DeinPasswort'); define('DB_DATABASE', 'DeineDatenbank'); |
Re: Php: Datenbank-Backup...
genial...funktioniert :)
gibt es nun noch eine möglichkeit das a) wieder automatisch einzulesen und b) das ganze nicht einfach auszugeben sondern als Datei runterzuladen? Edit: wäre folgendes denkbar?
Code:
for ($i=0;$i<count($zeilen);$i++) {
if ($zeilen[$i][1]!="-") { if ($zeilen[$i][strlen($zeilen[$i])]==",") { $akt = $akt.$zeilen[$i]; } else if ($zeilen[$i][strlen($zeilen[$i])]==";") { $akt = $akt.$zeilen[$i]; mysql_query($akt); $akt = ""; } } } |
Re: Php: Datenbank-Backup...
Zu (b):
Wenn du diese Zeile einbaust, dann bietet dir der Browser das Abspeichern an.
Code:
Ggf. solltest du auch noch
header('Content-Disposition: attachment; filename="sqlbackup.txt"';
Code:
aufrufen, dann wird's komprimiert (nicht die Datei sondern die Übertragung).
ob_start("ob_gz_handler");
Zu (a): Das ist nicht ganz trivial, weil ja in den Werten auch diese Zeichen vorkommen können, auf die du prüfst. Ich schreib gerade mal was ... |
Re: Php: Datenbank-Backup...
Zitat:
übrig bleiben dann nur noch 2 mögliche Zeilenarten. die mit Komma am Ende, die mit Semikolon am ende, und die leeren. also eigentlich sollte das ja klappen...oder verhau ich mich da gerade? |
Re: Php: Datenbank-Backup...
Liste der Anhänge anzeigen (Anzahl: 1)
[Unten folgt ein //NACHTRAG]
Ich denke, es würde gehen. Diese Funktion hier ist aber allgemeiner:
Code:
//NACHTRAG:
function SplitSqlStatements(&$fulltext)
{ $states = array( // Normal (top-level) 0 => array( "#" => array( 's' => 1, 'a' => 0 ), "-" => array( 's' => 2, 'a' => 0 ), "/" => array( 's' => 4, 'a' => 0 ), "\n" => array( 's' => 0, 'a' => 1 ), "'" => array( 's' => 7, 'a' => 1 ), '"' => array( 's' => 9, 'a' => 1 ), '`' => array( 's' => 11, 'a' => 1 ), ';' => array( 's' => -1, 'a' => 0 ), 999 => array( 's' => 0, 'a' => 1 ), ), // Kommentar bis Zeilenende 1 => array( "\n" => array( 's' => 0, 'a' => 0 ), 999 => array( 's' => 1, 'a' => 0 ), ), // Minuszeichen gesehen 2 => array( "-" => array( 's' => 3, 'a' => 0 ), 999 => array( 's' => 0, 'a' => 1, 'i' => "-" ), ), // Zweites Minuszeichen gesehen 3 => array( " " => array( 's' => 1, 'a' => 0 ), 999 => array( 's' => 0, 'a' => 2, 'i' => "--" ), ), // Schrägstrich gesehen 4 => array( "*" => array( 's' => 5, 'a' => 0 ), 999 => array( 's' => 0, 'a' => 2, 'i' => "/" ), ), // C-style Kommentar 5 => array( "*" => array( 's' => 6, 'a' => 0 ), 999 => array( 's' => 5, 'a' => 0 ), ), // Stern gesehen im C-style Kommentar 6 => array( "/" => array( 's' => 0, 'a' => 0 ), 999 => array( 's' => 5, 'a' => 0 ), ), // Single quote 7 => array( "'" => array( 's' => 0, 'a' => 1 ), "\\" => array( 's' => 8, 'a' => 1 ), 999 => array( 's' => 7, 'a' => 1 ), ), // Backslash im single quote 8 => array( 999 => array( 's' => 7, 'a' => 1 ), ), // Double quote 9 => array( '"' => array( 's' => 0, 'a' => 1 ), "\\" => array( 's' => 10, 'a' => 1 ), 999 => array( 's' => 9, 'a' => 1 ), ), // Backslash im single quote 10 => array( 999 => array( 's' => 9, 'a' => 1 ), ), // Double quote 11 => array( '`' => array( 's' => 0, 'a' => 1 ), "\\" => array( 's' => 12, 'a' => 1 ), 999 => array( 's' => 11, 'a' => 1 ), ), // Backslash im backquote 12 => array( 999 => array( 's' => 11, 'a' => 1 ), ), ); $state = 0; $result = array(); $stmt = ""; $len = strlen($fulltext); for ($k = 0; $k < $len; $k++) { $ch = $fulltext{$k}; $ix = isset($states[$state][$ch]) ? $ch : 999; if (!empty($states[$state][$ix]['i'])) $stmt .= $states[$state][$ix]['i']; if (!empty($states[$state][$ix]['a'])) if (!empty($stmt) || ($ch != ' ' && $ch != "\n")) $stmt .= $ch; $state = $states[$state][$ix]['s']; if ($state == -1) { if (!empty($stmt)) $result[] = $stmt; $stmt = ""; $state = 0; } } if (!empty($stmt)) $result[] = $stmt; return $result; } Hab's die Datei von oben noch mal ein bisschen angepasst und angehängt. Die Klasse ist jetzt um die Methode "Import" erweitert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz