php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 16.10.2004, 13:07  
Gast
 
Beiträge: n/a
Standard mysql-backup mittels PHP auf webspace ohne shell

hi,

nachdem ich jetzt etliche Scripte durchprobiert habe und immer wieder Misserfolge hatte probier ich es jetzt mal in eurem Forum.
Ich hoffe mal ich bin im richtigem Unterforum, die Suchfunktion hat (mir) leider keine Antwort gebracht.


------------------------------------------------------------------------------
also ich habe webspace bei einem Anbieter, der den Arbeitsspeicher für PHP4 auf 8MB begrenzt hat (also der Standard) und bei dem auch das 15-Sekunden-TImeout von PHP greift.
Die Möglichkeit mittels PHP direkte Systembefehle auszuführen ist nicht gegeben, eien login-shell habe ich auch nicht.
-------------------------------------------------------------------------------

nun habe ich eine ca. 100MB (etwas kleiner) große Datenbank auf diesem Space, die gepackt etwa 15-20MB groß ist.
Diese Datenbank möchte ich sichern und zwar im mysqldump-Format.

- phpmyadmin fällt flach => bekomme eien Speicherfehler (die 8MB-Grenze)
- mysqldump fällt flach => keine Shell, kein (exec) etc.
- diverse andere Scripte fallen flach => mysqldump-inkompatibel, und/oder haben ihr eigenes FOrmat etc.

(habe sogar ein script gefunden welches verlangt dass die Datenbank mit allen Tabellen bereits vorhanden ist damit es das Backup zurückspielt - manchmal frag ich mit was in den Köpfen der Leute vorgeht O_o )

nun meine Frage an euch, könnt ihr mir ein Script nennen (oder vielleicht sogar schreiben) welches eine so große Datenbank sichern kann, es müsste
- sich seleber immer wieder aufrufen um
--- die 8MB-Sperre zu umgehen
--- den 15-Sekunden-timeout zu umgehen
- mysqldump-kompatibel sein

----------------------------------------------------------------------
es hat mich einige Zeit gekostet die Datenbank überhaupt erst auf den Webspace heraufzuladen weil sie ja recht groß ist.

Nun habe ich es mit bigdump.php geschafft die Datenbank raufzuspielen (super script!!!) - aber dass ich die DB auch wieder sichern muss daran hab ich nicht gedacht und suche nun schon seit Wochen nach einer Backupmöglichkeit.


danke schonmal fürs Lesen - Yasuo
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.10.2004, 14:13  
Erfahrener Benutzer
 
Registriert seit: 29.08.2003
Beiträge: 216
wurtzel
Standard

schreib dir doch ein script, was dir die daten in fortlaufend nummerierten datein in ein verzeichnis schreibt, was du dann per ftp runterladen kannst. Wenn du jeweils ca 500-1000 zeilen aus der db ausliest, speicherst und dann das script mit einem metarefresh versehn startest und sich so lange selber aufrufen läst bis aus der db alle daten in dateien geschrieben sind
hast du doch eine praktikable lösung
__________________
Das Problem ist der Anfang einer Lösung
wurtzel ist offline   Mit Zitat antworten
Alt 16.10.2004, 15:52  
Gast
 
Beiträge: n/a
Standard

naja Tatsache ist dass ich kein php kann.
ich weiß was es ist und was es macht aber ich kann es nicht.


mir haben auch schon ein par Leute gesagt "schreib doch xyz in ein script und dann müsste das gehen" das hab ich dann in eine php-Datei gepastet und es hat nicht funktioniert, ich bräuchte also wirklich einen code den ich in eine php-datei speichern kann und wo ich dann feedback geben kann indem ich dann etwaige Fehlermeldungen hier poste.


es sei noch angemerkt dass so ein Script möglicherweise noch von mehr Leuten als nur mir benötigt wird, auch wenn der Großteil sich vielleicht selber zu helfen weiß (phpmyadmin bei kleinen DBs, php.ini bearbeiten, per EXEC oder ssh und mysqldump nen Backup erstellen).

da ich die genannten Möglichkeiten jedoch nicht habe und mir "Tipps" nicht geholfen haben wende ich mich ja an euch :/


sicher werde ich mir mal php aneignen aber nicht hier und jetzt, ich brauche momentan halt "nur" ein Script um die DB zu sichern.
  Mit Zitat antworten
Alt 17.10.2004, 22:59  
Gast
 
Beiträge: n/a
Standard

damit ihr mal nen genauen Fehler habt:

das spuckt phpmyadmin aus:

Zitat:


Fatal error: Allowed memory size of 8388608 bytes exhausted at (null):0 (tried to allocate 524 bytes) in /srv/www/htdocs/phpMyAdmin/libraries/common.lib.php on line 299
  Mit Zitat antworten
Alt 17.10.2004, 23:34  
Gast
 
Beiträge: n/a
Standard

So, hab was gebastelt, damit müsstest auch Du klar kommen.
Dein Backup-Script (zur freien Verwendung).

Kern ist die Funktion backup. Dort gibst Du den Namen der Datenbank und den Namen der Tabelle an. (Natürlich für jede Tabelle einmal auszuführen.)

Erzeugt wird ein ASCII-Text, den Du als backup.sql oder sonstwie sichern kannst. Diesen kannst Du später wieder über mysqladmin einspielen.

backup("shop2","language"); erzeugt z.B. ein Backup der Tabelle "language" in der Datenbank "shop2" und gibt es aus.

Code:
<?PHP
include("../../dbinit.php");

function backup($datenbank,$tabelle)
{
 echo "# Datum der Sicherung: ".date("d.m.Y, H:i:s")." Uhr\n\n";
 echo "USE ".$datenbank.";\n\n";
 echo "DROP TABLE IF EXISTS ".$tabelle.";\n\n";
 $result = mysql_query("SHOW CREATE TABLE `$tabelle`") or die ('Fehler: '.mysql_error());
 WHILE ($row = mysql_fetch_array($result))
 {
  for ($i=1;$i<count($row)-1;$i++) { echo $row[$i]; }
 }
 echo ";\n\n";


 $result = mysql_query("SELECT * FROM `$tabelle`") or die ('Fehler: '.mysql_error());
 WHILE ($row = mysql_fetch_array($result))
 {
  $val = "";
  echo "INSERT INTO ".$tabelle." VALUES(";
  for ($i=0;$i<count($row);$i++) { $val .= "'".$row[$i]."',"; }
  $val = substr($val,0,strlen($val)-1); // letztes Komma verwerfen (abschneiden)
  echo $val.");\n";
 }
}

backup("shop2","help");
?>
Dess woars


Edit: Hier noch die db_init.php...

Code:
<?php
### db_init.php ###
$database = "shop2";
$sqlhost  = "localhost";
$sqluser  = "root";
$sqlpass  = "";
mysql_connect  ( $sqlhost, $sqluser, $sqlpass) or  die ("Datenbankserver: Aufruf fehlgeschlagen!");
mysql_select_db($database) or  die ("Datenbank: Aufruf fehlgeschlagen!");
?>
Edit2: So sieht das Ergebnis aus:
Code:
# Datum der Sicherung: 18.10.2004, 00:44:03 Uhr

USE shop2;

DROP TABLE IF EXISTS help;

CREATE TABLE `help` (
  `lfdnr` int(5) unsigned NOT NULL auto_increment,
  `keyword` varchar(32) NOT NULL default '',
  `de` varchar(128) NOT NULL default '',
  `deval` varchar(255) NOT NULL default '',
  `en` varchar(128) NOT NULL default '',
  `enval` varchar(255) NOT NULL default '',
  `us` varchar(128) default NULL,
  `usval` varchar(255) NOT NULL default '',
  `fr` varchar(128) NOT NULL default '',
  `frval` varchar(255) NOT NULL default '',
  `it` varchar(128) NOT NULL default '',
  `itval` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`lfdnr`),
  UNIQUE KEY `lfdnr` (`lfdnr`)
) TYPE=MyISAM COMMENT='Hilfe';

INSERT INTO help VALUES('1','delivery','Versand','Erklärung Versandlink','delivery','Erklärung Versandlink in english','','','','','','','','','','','','','','','','','','');
... weitere INSERT INTOs erspare ich mir und euch.
  Mit Zitat antworten
Alt 18.10.2004, 00:12  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von yasuo
damit ihr mal nen genauen Fehler habt:

Fatal error: Allowed memory size of 8388608 bytes exhausted at (null):0 (tried to allocate 524 bytes) in
Klar. 8MB RAM reichen offenbar nicht aus, um Deine dicke Datenbank zu sichern.
  Mit Zitat antworten
Alt 18.10.2004, 01:00  
Gast
 
Beiträge: n/a
Standard

2. Version. Diesmal musst Du nur noch die Datenbank angeben und es werden ALLE enthaltenen Tabellen ausgelesen. Ggf. mit set_timeout(600); die Laufzeit des Scriptes "nach oben korrigieren"!

Bitte beachten: Habt ihr HTML-Code in der Tabelle, sieht die Ausgabe eventuell ziemlich bescheiden aus. Es stimmt aber dennoch - schaut in den Quelltext, denn die erzeugte Datei ist eine TEXT-Datei.

Code:
<?PHP

function backup($datenbank,$tabelle) // Tabellen-Backup-Script ausgeben
{
 echo "DROP TABLE IF EXISTS ".$tabelle.";\n\n";
 $result = mysql_query("SHOW CREATE TABLE `$tabelle`") or die ('Fehler: '.mysql_error());
 WHILE ($row = mysql_fetch_array($result))
 {
  for ($i=1;$i<count($row)-1;$i++) { echo $row[$i]; }
 }
 echo ";\n\n";

 $result = mysql_query("SELECT * FROM `$tabelle`") or die ('Fehler: '.mysql_error());
 WHILE ($row = mysql_fetch_array($result))
 {
  $val = "";
  echo "INSERT INTO ".$tabelle." VALUES(";
  for ($i=0;$i<count($row);$i++) { $val .= "'".$row[$i]."',"; }
  $val = substr($val,0,strlen($val)-1); // letztes Komma verwerfen (abschneiden)
  echo $val.");\n";
 }
}

function get_tables($datenbank) // Tabellennamen in Array einlesen
{
 $tables = Array();
 $result = mysql_query("SHOW TABLES FROM `".$datenbank."`") or die ('Fehler: '.mysql_error());
 WHILE ($row = mysql_fetch_array($result))
 {
  for ($i=0;$i<count($row);$i++) { if ($row[$i]!="") array_push($tables,$row[$i]); }
 }
 return $tables;
}


#### Ausführen des Backups.
include("../../dbinit.php"); // Verbindung zum SQL-Server
$datenbank = "shop2";

echo "# Datum der Sicherung: ".date("d.m.Y, H:i:s")." Uhr\n\n";
echo "USE ".$datenbank.";\n\n";

$mytables = get_tables($datenbank);

for ($i=0;$i<count($mytables);$i++) 
{
 backup($datenbank,$mytables[$i]);
}
echo "\n";
?>
  Mit Zitat antworten
Alt 18.10.2004, 19:46  
Gast
 
Beiträge: n/a
Standard

das sieht schonmal sehr gut aus

ein paar mögliche Verbesserungen:

Korrekturen backup.php:
- dbinit.php => db_init.php
- ../../ wegnehmen
- $database => von db_init.php nehmen statt neu zu setzen

mögliche extras:
- gz-komprimierung (wegen dem erhöten Trafficaufkommen)
- Datei optional lokal speichern (bool'sche Eingangsvariable) um sie dann per ftp laden zu können,
- möglicherweise Checksumme erzeugen.

EDIT:
vllt. eine PHP-Funktion um (wenn kein Fehler auftritt) im Header einen anderen Dateinamen anzugeben (den man dann in der db_init.php angibt).
damit der Webbrowser nicht versucht die Datei anzuzeigen.


EDIT²:
bevor ichs vergesse: Danke
  Mit Zitat antworten
Alt 18.10.2004, 22:14  
Gast
 
Beiträge: n/a
Standard

He yasuo, Du bist vielleicht eine Pappnase - ich glaubs ja nicht...

Erst sowas:
Zitat:
Zitat von yasuo
sicher werde ich mir mal php aneignen aber nicht hier und jetzt, ich brauche momentan halt "nur" ein Script um die DB zu sichern.
und dann das:
Zitat:
Zitat von yasuo
das sieht schonmal sehr gut aus
ein paar mögliche Verbesserungen:
Wenn Du selbst den Durchblick hast, warum fragst Du dann nach ?

Aber gut, ich werde Deine Punkte mal abhaken....

Zitat:
Zitat von yasuo
Korrekturen backup.php:
- dbinit.php => db_init.php
- ../../ wegnehmen
- $database => von db_init.php nehmen statt neu zu setzen
ob die db_init oder dbinit heißt ist so egal, als wenn in Japan ein Reissack platzt, würde ich mal sagen.

Und ../../ steht da, weil es unter meinem Webhorizont liegt (also von aussen nicht zugreifbar ist. Das anzupassen sollte wohl jeder können.

Die Datenbank in der dbinit anzugeben, kannst Du ja machen - ich hindere Dich sicher nicht. Ich habe 17 Datenbanken alleine auf dem Localhost - jedes Projekt (bzw. Kunde eine), da macht das weniger Sinn.
Und wurscht ist es so und so.

Zitat:
Zitat von yasuo
mögliche extras:
- gz-komprimierung (wegen dem erhöten Trafficaufkommen)
- Datei optional lokal speichern (bool'sche Eingangsvariable) um sie dann per ftp laden zu können,
- möglicherweise Checksumme erzeugen.
Ich habe absichtlich auf eine lokale Speicherung verzichtet, weil ich davon ausgegangen bin, daß Du PHP nicht kannst und ich keinen Bock hatte, das zu erklären - darum ausschliesslich die Backup-Funktion.

Logisch ist eine Speicherung sinnvoller. Aber statt zu speichern würde ich mir das Teil per Mail schicken - oder gleich lokal aufrufen und sichern

gz-Komprimierung, was? Und dann das gz-File auf den Schirm ausgeben... grins

Zitat:
Zitat von yasuo
vllt. eine PHP-Funktion um (wenn kein Fehler auftritt) im Header einen anderen Dateinamen anzugeben (den man dann in der db_init.php angibt).
damit der Webbrowser nicht versucht die Datei anzuzeigen.
Kapier ich nicht. Mein Browser zeigt das Ergebnis an, den PHP wird vom Server verarbeitet. Ist dies bei Dir nicht der Fall, solltest Du evtl. mal Deinen Apache neu konfigurieren

Zitat:
Zitat von yasuo
bevor ichs vergesse: Danke
Damit hast Du Dich gerade nochmal gerettet.

Und wieder kein Kopfschüttelsmiley.... verflucht :P
  Mit Zitat antworten
Alt 18.10.2004, 22:32  
Gast
 
Beiträge: n/a
Standard

ich hab mich etwas unglücklich ausgedrückt, ich will mir das gz-files ja nicht auf dem Bildschirm ausgeben sondern das Backup mittels lynx etc. downloaden.

ich habe jetzt per lynx ein backup gemacht aber das sind natürlich wieder 100MB Traffic die flöten gehen, obwohl es 20MBs sein könnten.

war ja auch nur ein Vorschlag um das Script (für mich :P ) praktikabler zu machen, wenn ich mir mal php angeeignet habe schaffe ich das mit dem gzip vielleicht selber - auf jeden Fall erstmal ein riesen THX, ich werd morgen mal versuchen die DB wieder zurückzuspielen (auf einem anderen PC) und melde mich dann wieder.

ciao - Yasuo


EDIT:
ich hab nur ein paar GB Traffic - wenn ich da Sicherheitshalber 2 mal die WOche ein Backup mache ist die Hälfte davon schon weg das wollle ich sagen.
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] MySQL backup automatisiert über cronjob Datenbanken 7 21.09.2010 19:00
Berechnung mit MySql Tabelleninhalt mittels php markbraue Datenbanken 4 16.05.2008 19:06
Mysql Backup im richtigem Format rbs_phoenix Datenbanken 10 13.05.2008 22:22
Backup einer MySql Datenbank dh1sbg Beitragsarchiv 1 13.04.2008 20:45
MySQL Server startet nicht mehr richtig... Datenbanken 16 03.03.2006 19:40
[Erledigt] mySQL mittels COM ansprechen Datenbanken 2 01.02.2006 09:33
[Erledigt] Mysql Backup Datenbanken 2 05.11.2005 21:32
Suche Webspace mit PHP MySQL für PhpOpenChat webmaster_andre Beitragsarchiv 2 05.09.2005 20:19
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
mysql mittels php abfragen- array problem PHP Tipps 2005-2 6 20.07.2005 15:21
Webspace mit PHP und MySQl Datenbank kostenlos? Beitragsarchiv 5 17.07.2005 01:52
free Webspace mit mySQL und PHP Beitragsarchiv 3 24.03.2005 20:28
[Erledigt] Neuen Benutzer mittels PHP in MYSQL Anlegen PHP-Fortgeschrittene 1 28.10.2004 17:22
php + mysql - webspace ... Tschuu PHP Tipps 2004 4 19.06.2004 18:52

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php datenbank backup, php sql backup, php backup, php mysql backup, php db backup, php mysql backup erstellen, datenbank backup php, sql backup php, http://www.php.de/datenbanken/10581-mysql-backup-mittels-php-auf-webspace-ohne-shell.html, php mysql backup script, php database backup, mysql backup php, datenbank backup mit php, db backup php, php datenbank backup erstellen, php sql backup erstellen, mysql backup php script, mysql backup script php, backup php, mysql backup mit php

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:02 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.