MySQL Backup per PHP

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • MySQL Backup per PHP

      Hallo,
      ich bräuchte mal wieder eure hilfe undzwar wollte ich in meine Homepage ein Backup panel einbauen.. für MSSQL & MYSQL Datenbanken
      MSSQL hat einwadfrei geklappt mit hilfe einer Prozedur

      Nur bei MySQL gibt es ein problem, da ich im Web nichts gescheites gefunden habe..
      Als Beispiel:

      Ich möchte das wenn ich die seite "backup.php" das System oder was auch immer ein Backup von meiner Datenbank "panel" macht. (Bzw. wenn ich halt das entsprechende wort in das Script eingebe.)
      Also -> Ich gebe MYSQL in das script ein und das macht ein Backup der MySQL Datenbank panel. Nur wie funktioniert dieser code? Achja ich möchte keine ganze Seite wie dieses MySQL DUmper what ever..

      PHP-Quellcode

      1. else if($_POST['wort'] == "MYSQL"){
      2. $sql = 'DROP DATABASE panel';
      3. $retval = mysql_query( $sql, $con );

      So ähnlich wie das hab ichs gemeint nur das es ein Backup erstellen soll anstatt die Datenbank zu löschen.
      Hoffe mal mir kann jemand weiter helfen
      Danke schon mal!
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )

    • PHP-Quellcode

      1. <?php
      2. // error_reporting(0);
      3. // ### (c) by Protecus.de ########
      4. // ### EINSTELLUNGEN #############
      5. // ###############################
      6. $user = 'root'; // Name
      7. $pass = ''; // Passwort
      8. $database = 'test'; // zu sichernde Datenbank
      9. $path = './backup/'; // Backup Ordner
      10. $number_of_files = '5'; // mehr als x Dateien löschen (Autodelete)
      11. // ###############################
      12. // Updates: http://board.protecus.de/t9581.htm
      13. // checke Backupordnergrösse
      14. function dirsize($dir){
      15. $dirsize=0;
      16. $handle=opendir ($dir);
      17. while (false !== ($file = readdir ($handle))) {
      18. $dirsize+=filesize($dir.$file);
      19. }
      20. closedir($handle);
      21. return $dirsize;
      22. }
      23. // Starte Output
      24. echo '<html>
      25. <head>
      26. <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
      27. <title>MySQL Backup</title>
      28. <style type=\'text/css\'>
      29. <!--
      30. h1 { font-family: verdana, arial;}
      31. body,p,td,a { font-family: verdana, arial; font-size: 8pt;}
      32. //-->
      33. </style>
      34. </head>
      35. <body>
      36. <h1>MySQL Backup</h1>
      37. <b><u>Konfiguration:</u></b>
      38. <br /><b>Sicherung Datenbank:</b> '. $database .'<br />
      39. <b>Auto-Löschen aktiviert:</b> +'.$number_of_files.' Dateien<br />
      40. <b>GZip-Komprimierung:</b> aktiv<br />
      41. <b>Backups gesamt:</b> '.round(dirsize("$path")/(1024*1024),2).' MB<br /><br />
      42. <p><b>Backup wird ausgeführt...</b><br /><br /><span style="color:darkblue; font-weight:bold" id="dspan">|</span></p>
      43. <script type="text/javascript"><!--
      44. function js_dots()
      45. {
      46. dspan.innerText = dspan.innerText + "|";
      47. jstimer = setTimeout("js_dots();", 200);
      48. }
      49. if (document.all)
      50. {
      51. js_dots();
      52. }
      53. //--></script>';
      54. // Backupverzeichnis erstellen, falls noch nicht existient!
      55. if (!is_dir($path)) mkdir($path, 0777);
      56. $dh = opendir($path);
      57. while (false !== ($filename = readdir($dh)))
      58. {
      59. if ($filename != "." &amp;&amp; $filename != "..") $files_unlink[] = $filename;
      60. }
      61. @rsort($files_unlink);
      62. if (sizeof($files_unlink) >= $number_of_files)
      63. {
      64. for($n=sizeof($files_unlink)-1; $n>=$number_of_files; $n--)
      65. {
      66. unlink($path.$files_unlink[$n]);
      67. }
      68. }
      69. // Backup erstellen
      70. $datei = date("d\.m\.Y\_H",time())."_Uhr_".date("i",time()); // Dateiname aus Datum und Uhrzeit bilden
      71. $datei .= ".gz";
      72. if (file_exists($datei)) unlink($datei);
      73. $path = str_replace(".", "", $path);
      74. system("/usr/bin/mysqldump -u$user -p$pass -h localhost $database | gzip > ".dirname(__FILE__)."$path/$datei", $fp);
      75. if ($fp==0) $meldung = "Backup erfolgreich!"; else $meldung = "Es ist ein Fehler aufgetreten!";
      76. // und Meldung, dass fertig!
      77. echo '
      78. <script type="text/javascript"><!--
      79. if (document.all)
      80. {
      81. clearTimeout(jstimer);
      82. }
      83. //--></script>
      84. <p>'.$meldung.'</p>
      85. <p><blink><b>Fertig!</b></blink></p>
      86. </html>
      87. </head>';
      88. ?>
      Alles anzeigen


      "$database = 'test';" musst du ändern zu "$database = $_POST['db']".
      Dann befasst du dich noch ein wenig mit der Wirkungsweise und den einzelnen Prozeduren dieses Skripts, baust ein "if $database == 'Blabla'" ein und hast dein gewünschtes Skript. Einzelne Tabellen müsstest du mit

      PHP-Quellcode

      1. SELECT * INTO OUTFILE dateiname
      extrahieren können, sicher bin ich mir allerdings nicht.

      EDIT: Gefunden habe ich noch

      PHP-Quellcode

      1. $reply = shell_exec('mysqldump --add-drop-table -c -n -h localhost --user=bkkdigm1 --pass=ot3VNayM digmdb1 content_offline > test.sql');
      - ich bin mir allerdings nicht sicher, ob du damit was anfangen kannst, da du dafür eine mysqldump.exe benötigst.
    • Dankeschon mal.
      Aber so wie dass
      system("/usr/bin/mysqldump -...
      aussieht ist es doch wohl eher für Linux, was ich wohl vergessen hab zu sagen das es für Windows sein sollte. und eig brauch ich nur so etwas wie das
      BACKUP DATABASE [ACCOUNT_DBF] TO DISK = N'C:\Backups\ACCOUNT_DBF.bak' WITH NOFORMAT, NOINIT, NAME = N'ACCOUNT_DBF-Vollständig Datenbank Sichern', SKIP, NOREWIND, NOUNLOAD, STATS = 10
      Damit es einfach nur schlicht und ergreifend von der Homepage aus ein Backup in ein bestimmten Ordner macht.

      PHP-Quellcode

      1. if($_POST['wort'] == "MSSQL"){
      2. $stmt = mssql_init('webBackup', $connection);
      3. mssql_execute($stmt) or die ("Der Backup war nicht erfolgreich!");
      4. mssql_free_statement($stmt);
      5. $error = '<font color="green"><p>Der Backup war erfolgreich!</font>';
      6. }
      7. else if($_POST['wort'] == "MYSQL"){
      8. $reply = shell_exec('mysqldump --add-drop-database -c -n -h localhost --user=root --pass=*** panel > test.sql') or die ('Der Backup war nicht erfolgreich!');
      9. $error = '<font color="green"><p>Der Backup war erfolgreich!</font>';
      10. }
      Alles anzeigen

      So sähe es momentan aus.. wenn eben dieses shell_exec funktionieren würde
    • Man kann mit den Zahlreichen MySql Funktionen Tabellennamen, Tabellenfelder
      und natürlich auch Dateneinträge fetchen. Ist zwar sehr umständlich aber damit
      kannst du dan nen Backup String erstellen. Ist bisschen kompliziert, und ich habs
      auch selbst nie versucht aber rein theoretisch möglich. Einfach PHP.net Referenz durchlesen.