MySQL-Datenbank sichern via PHP

matze93

Gesperrt
Hi,
wie der Titel schon sagt, möchte ich meine MySQL-Datenbank sichern über PHP. Doch ich hab das bisher noch nie gemacht und könnte eure Hilfe gebrauchen.

Nach dem ich diesen MySQL-Installationsscript geschrieben habe (http://www.tutorials.de/forum/php-tutorials/359924-mysql-installationsscript.html), möchte ich das die Datenbank gesichert werden kann (wird später in meinen Adminpanel eingebaut). Und zwar alle Tablleninhalte die zu meiner CMS gehören. Also alle mit den Prefixen wie z.B. matze_cms_ die er über die config.php ($dbprefix) bezieht.
Dazu soll auch die config.php (bzw. die includes/mysql.php in meiner CMS) zur Datenbank-Verbindung dienen. Am besten sollte das Ergebnis wie in der install/mysql/insert.php lauten, damit man einfach den Installscript als Backup-Installer verwenden kann. Dazu sollte aber vorher alle Datenbank Inhalte geleert werden.
Habt ihr verstanden, was ich möchte? Lest bitte den obigen Link!
Wie muss ich vorgehen? Nur Tipps, den Rest mach ich! Soll ja auch Spaß machen :D
Würde mich über ein Grundgerüst zur Datenbanktabellensicherung freuen. Den Rest kriege ich wahrscheinlich besser hin. Es sei denn ihr kenn meine CMS besser als ich :D

Gruß
Matze
 
Wurde hier schon mal behandelt:


http://www.tutorials.de/forum/php-tutorials/221970-mysql-tabelle-exportieren.html

Ich verwende das Script auch, allerdings in modifizierter Form.
PHP:
<?php



   

        /*--- Verbindung zur Datenbank aufbauen ---*/
        $dbhost = ''; // MySQL - Host, meist ist es localhost
        $dbuser = ''; // MySQL - Benutzer
        $dbpass = ''; // MySQL - Passwort
        $dbdata = ''; // MySQL - Datenbankname

        mysql_connect($dbhost,$dbuser,$dbpass) or die(mysql_error());
        mysql_select_db($dbdata) or die(mysql_error());


/*--- Deklarierung der per Post übergebenen Daten ---*/
        $dbtabelle = '';
        $felder = '*';
 
        if (empty($felder)){ $felder = '*'; }  


/*--- Überprüfen, ob die angegebene Tabelle existiert ---*/
            $tabellen = mysql_list_tables($dbdata);
            $tabellen_zahl = mysql_num_rows($tabellen);

            for ($t = 0;$t <$tabellen_zahl;$t++){
                if (mysql_tablename($tabellen,$t) == $dbtabelle){
                    $ergebnis = '1';
                }
            }

            if (empty($ergebnis)){
                echo 'Die Tabelle "<b>'.$dbtabelle.'</b>" ist in der Datenbank nicht vorhanden.';
                exit;
            }  


  /*--- SQL Befehle ausführen ---*/
            $sql = 'SELECT '.$felder.' FROM '.$dbtabelle;
            $query = mysql_query($sql) or die(mysql_error());
            $feld_anzahl = mysql_num_fields($query);  


/*--- Ergebnisse der Mysql Abfrage ausgeben und in Textdateispeichern ---*/

            while($ds = mysql_fetch_object($query)){
                $sql_statement .= 'INSERT INTO `tabelle` (';
 
                for ($i = 0;$i <$feld_anzahl;$i++){
                    if ($i ==$feld_anzahl-1){
                        $sql_statement .= mysql_field_name($query,$i);
                    } else {
                        $sql_statement .= mysql_field_name($query,$i).', ';
                    }
                }

                $sql_statement .= ') VALUES (';
 
                for ($i = 0;$i <$feld_anzahl;$i++){
                    $name = mysql_field_name($query,$i);
                    if (empty($ds->$name)){
                        $ds->$name = 'NULL';
                    }
                    if ($i ==$feld_anzahl-1){
                        $sql_statement .= '"'.$ds->$name.'"';
                    } else {
                        $sql_statement .= '"'.$ds->$name.'", ';
                    }
                }
                $sql_statement .= ");\n";
            }  


/*--- Schreiben des Backups in eine Datei ---*/




            $dateiname = 'Backup_von_Tabelle_\''.$dbtabelle.'\'_'.date('d_m_y').'_-_'.date('H_i_s').'.txt';

            if ($datei = fopen($dateiname, 'a+')){
                if (!is_writable($dateiname)){
                    echo 'In die Datei "'.$dateiname.'" kann nicht geschrieben werden.';
                }
                if (!fwrite($datei, $sql_statement)){
                    echo 'In die Datei "'.$dateiname.'" kann nicht geschrieben werden.';
                }
                
                
                //Die folgende Zeile auskommentieren, wenn auf dem Bildschirm keine Ausgabe des Dumps gemacht werden soll. Es wird dann nur ein Dump auf dem Webspace abgelegt.
                echo 'Folgendes Backup der Tabelle "<b>'.$dbtabelle.'</b>" wurde erfolgreich in der Datei <b>'.$dateiname.'</b> gespeichert.<hr><pre>'.$sql_statement.'</pre>';
                fclose($datei);
            } else {
                echo 'Die Datei "'.$dateiname.'" konnte nicht erstellt werden.';
            }
        exit;
  
?>
 
Ja,
danke ich werde dann mal ein bisschen dran rumbasteln und es an meinen CMS-Script anpassen.
Brauch nur kurz noch eure Hilfe:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /volume1/homes/matthias/www/backup/index.php on line 13
Die Tabelle "" ist in der Datenbank nicht vorhanden.

Wie kann ich $dbtabelle = ' '; so definieren, dass er alle Datenbankinhalte (am besten mit $dbprefix) speichert.

Matze
 
Zuletzt bearbeitet:
Ist es nicht ggf. sinnvoller die MYSQL eigenen Export funktionen zu verwenden wie
Code:
SELECT * FROM table INTO OUTFILE 'file_name'
oder mysqldump gerade wenn dein CMS mal etwas mehr Inhalt verwaltet wird dies sicherlich schneller importiert und exportiert.
 
Jo danke, hast recht. Ich mach mir dann mal meine Gedanken. Brauch aber ne Weile bis ich weiter programmiere. Noch möchte ich meinen Urlaub genießen.
 
Zurück