Anzeige - [Interessiert an einer Anzeige?]
(?) Tags raten (?) backup, datenbank, mysql, server (edit)
Seiten: (2) [1] 2  ( Neuster Beitrag anzeigen )
Reply to this topicStart new topicStart Poll
> Mysql Datenbank Backup ?
Nicolas Glauser
Stiuvou Design
Geschrieben am: Di 27.04.2004, 04:40
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 123
Mitglied seit: 7.01.2004


Ich habe ein kleines Problem und zwar möchte ich von meiner Mysql datenbank ein regelmässiges Datenbank update machen, dass zum beispiel immer um 03:00 uhr die Datenbank gespeichert wird. Was kennt ihr da für scripte??


--------------------
Top
PMEmail PosterUsers WebsiteICQMSN
Top
 
 
Webi
#2 Geschrieben am: Di 27.04.2004, 06:52 (+02:12)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 631
Mitglied seit: 28.03.2004


Denke das du dies mit PHP lösen kannst. Schau mal unter www.hotscripts.com nach. Dort solltest du eigentlich so ein Script finden können.
Hast du auf deinem Server CronJobs zur Verfügung? Wird wohl nötig sein, wenn du ein zeitlich gesteuertes Script einbauen möchtest.


--------------------
www.linkit.ch - Das Webverzeichnis mit Links aus dem Deutschsprachigen Raum.
www.powerplay.ch - Die Hockeyquiz-Page
www.bebelino.ch - Onlineshop für Baby- und Kinder-Produkte
Top
PMEmail Poster
Top
 
Josh
#3 Geschrieben am: Di 27.04.2004, 08:19 (+01:27)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Moderatoren
Beiträge: 2139
Mitglied seit: 19.10.2003


also mit php ist dies nur machbar, wenn du die scripts irgendwie starten kannst, von alleine tun sie's nicht. entweder benutzt du diese "cronjobs" (kenn ich selber nicht, werd mich mal informieren müssen rolleyes.gif ), oder du baust in eine gut besuchte website ein kleines script ein, welches bei jedem aufruf überprüft, ob schon 03:00 am heutigen datum gewesen ist und ob das backup noch nicht ausgeführt wurde und startet dann das script... das wär ein möglicher workaround.

hoffe das hilft. smile.gif
gr33tz

j0sh


--------------------
Mein letztes Projekt: Atelier-Schmuck.ch

"Das habe ich nie getan und werden es auch nie wieder tun!" :lol:
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Webi
#4 Geschrieben am: Di 27.04.2004, 10:22 (+02:02)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 631
Mitglied seit: 28.03.2004


Na ja, die Lösung mit den kleinen Script funktioniert ja schon, ist aber meiner Meinung nach ein bisschen unsinnig. Mit einem Cronjob kannst du ein bestimmtes File zu einem bestimmten Zeitpunkt aufrufen lassen.
Gibt auch Anbieter, über welche man solche Cronjobs kostenlos erstellen kann. Musst also nicht auf deinen Provider angewiesen sein.


--------------------
www.linkit.ch - Das Webverzeichnis mit Links aus dem Deutschsprachigen Raum.
www.powerplay.ch - Die Hockeyquiz-Page
www.bebelino.ch - Onlineshop für Baby- und Kinder-Produkte
Top
PMEmail Poster
Top
 
Josh
#5 Geschrieben am: Di 27.04.2004, 10:48 (+00:26)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Moderatoren
Beiträge: 2139
Mitglied seit: 19.10.2003


@ webi:

kannst du mir einen solchen cronjob anbieter nennen? danke. smile.gif


--------------------
Mein letztes Projekt: Atelier-Schmuck.ch

"Das habe ich nie getan und werden es auch nie wieder tun!" :lol:
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Webi
#6 Geschrieben am: Di 27.04.2004, 11:32 (+00:44)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 631
Mitglied seit: 28.03.2004


Das sind zwei Anbieter, welche ich gefunden habe. Sollte aber schon noch mehr geben. Bei einigen Providern ist der Service auch im Webpaket inbegriffen.

http://www.selfphp.info/cronjobs/cronneu.php
http://www.cron24.de/



--------------------
www.linkit.ch - Das Webverzeichnis mit Links aus dem Deutschsprachigen Raum.
www.powerplay.ch - Die Hockeyquiz-Page
www.bebelino.ch - Onlineshop für Baby- und Kinder-Produkte
Top
PMEmail Poster
Top
 
Alain_Aubert
#7 Geschrieben am: Di 27.04.2004, 12:26 (+00:53)
Report PostQuote Post

Ayom Slave
Group Icon

Gruppe: Admin
Beiträge: 4605
Mitglied seit: 25.09.2003


Sorry Josh ;-)

Cronjobs sind eigentlich klar, sicher besser als irgendwelche vom Client ausgeführten Scripts. Lies dich ein, wenn dein Provider diese Unterstützt, nutzte sie, hatte bis vor kurzem auch keine Ahnung -> Cron ist sehr mächtig ;-)

Aber zurück zur eigentlichen Frage. Mysql backuppen. Von welcher Grössenordnung von Daten reden wir? Wenns wenige Daten sind, kann ich dir das empfehlen. Ist von ? Ich glaube hier http://www.normsland.co.uk/phpmybackup/ habs ein wenig angepasst, funktioniert wunderbar.

QUOTE
<?
// mySQL - variables
$dbhost="localhost";
$dbuser="root";
$dbpass="";
$dbname[]="dbname";
//$dbname[]="usr_web24_2";

// number of backups to keep
$backups = 100;

// hours between backups
$interval = 72;

// 1 only with ZLib support, else change value to 0
$compression = 1;

// full path to phpMyBackup
$path = $_SERVER['DOCUMENT_ROOT']."/backup/";


flush();
$conn = mysql_connect($dbhost,$dbuser,$dbpass)
or die(mysql_error());
$path = $path . "dump/";
//if (!is_dir($path)) mkdir($path, 0777);

function get_def($dbname, $table) {
    global $conn;
    $def = "";
//    $def .= "DROP TABLE IF EXISTS $table;\n";
    $def .= "CREATE TABLE $table (\n";
    $result = mysql_db_query($dbname, "SHOW FIELDS FROM $table",$conn);
    while($row = mysql_fetch_array($result)) {
        $def .= "    $row[Field] $row[Type]";
        if ($row["Default"] != "") $def .= " DEFAULT '$row[Default]'";
        if ($row["Null"] != "YES") $def .= " NOT NULL";
        if ($row[Extra] != "") $def .= " $row[Extra]";
        $def .= ",\n";
    }
    $def = ereg_replace(",\n$","", $def);
    $result = mysql_db_query($dbname, "SHOW KEYS FROM $table",$conn);
    while($row = mysql_fetch_array($result)) {
          $kname=$row[Key_name];
          if(($kname != "PRIMARY") && ($row[Non_unique] == 0)) $kname="UNIQUE|$kname";
          if(!isset($index[$kname])) $index[$kname] = array();
          $index[$kname][] = $row[Column_name];
    }
    while(list($x, $columns) = @each($index)) {
          $def .= ",\n";
          if($x == "PRIMARY") $def .= "  PRIMARY KEY (" . implode($columns, ", ") . ")";
          else if (substr($x,0,6) == "UNIQUE") $def .= "  UNIQUE ".substr($x,7)." (" . implode($columns, ", ") . ")";
          else $def .= "  KEY $x (" . implode($columns, ", ") . ")";
    }

    $def .= "\n);";
    return (stripslashes($def));
}

function get_content($dbname, $table) {
    global $conn;
    $content="";
    $result = mysql_db_query($dbname, "SELECT * FROM $table",$conn);
    while($row = mysql_fetch_row($result)) {
        $insert = "INSERT INTO $table VALUES (";
        for($j=0; $j<mysql_num_fields($result);$j++) {
            if(!isset($row[$j])) $insert .= "NULL,";
            else if($row[$j] != "") $insert .= "'".addslashes($row[$j])."',";
            else $insert .= "'',";
        }
        $insert = ereg_replace(",$","",$insert);
        $insert .= ");\n";
        $content .= $insert;
    }
    return $content;
}

if ($compression==1) $filetype = "sql.gz";
else $filetype = "sql";

//if (filemtime($path . "0.$filetype") < time() - $interval * 3600 && !eregi("/restore\.",$PHP_SELF)) {



$cur_time=date("Y-m-d H:i");
$newfile="# Dump created with 'phpMyBackup v.$version' on $cur_time\r\n";
while (list(,$val) = each($dbname)) {

//alte backups renamen
for ($i = $backups-1; $i > 0; $i--) {
  $j = $i-1;
  $oldname = $path.$val. $j . ".$filetype";
  $newname = $path.$val. $i . ".$filetype";
  @rename($oldname,$newname);
}

//backuppen
$tables = mysql_list_tables($val,$conn);
$num_tables = @mysql_num_rows($tables);
$i = 0;
while($i < $num_tables) {
    $table = mysql_tablename($tables, $i);

    $newfile .= "\n# ----------------------------------------------------------\n#\n";
    $newfile .= "# structur for table '$table'\n#\n";
    $newfile .= get_def($val,$table);
    $newfile .= "\n\n";
    $newfile .= "#\n# data for table '$table'\n#\n";
    $newfile .= get_content($val,$table);
    $newfile .= "\n\n";
    $i++;
}

if ($compression==1) {
  $fp = gzopen($path.$val."0.$filetype","w9");
// $fp = tmpfile();
  gzwrite ($fp,$newfile);
  gzclose ($fp);
  echo '<h3>Dem Backup ischt geschrieben in <br>'.$path.$val."0".$filetype.'</h3>';
} else {
  $fp = fopen ($path.$val."0.$filetype","w");
  fwrite ($fp,$newfile);
  fclose ($fp);
}
}
?>
Top
PMEmail PosterUsers Website
Top
 
Alain_Aubert
#8 Geschrieben am: Di 27.04.2004, 12:30 (+00:04)
Report PostQuote Post

Ayom Slave
Group Icon

Gruppe: Admin
Beiträge: 4605
Mitglied seit: 25.09.2003


Jetzt meine Gegenfrage, oder erweiterte Frage von mir aus.

Kann ich direkt auf dem Server die Mysql Dateien (wo sind die btw, konnte sie nicht mehr finden) einfach saugen, sie auf einen anderen Server hochladen, und gut? Das wäre logischerweise viel schneller, als alles z.B. mit diesem Script zu backuppen, und dann alle Queries am andern Ort wieder in die Datenbank zu schreiben?

Funktioniert das theoretisch? Und wo speichern die Apachen ihre Mysql Binaries so idR?

thx alain
Top
PMEmail PosterUsers Website
Top
 
Roger Bobst
calac gmbh
#9 Geschrieben am: Di 27.04.2004, 13:15 (+00:44)
Report PostQuote Post

AyomRank 5
Group Icon

Gruppe: Experten Entwicklung (Mod)
Beiträge: 426
Mitglied seit: 15.02.2004


Hallo

Die db Dateien direkt von einem Server zum anderen funktioniert nur dann sicher, wenn auf beiden Servern dieselbe mysql Version läuft. Ich empfehle dir immer den weg über den Dump zu gehen. Die SQL Scripts lassen sich ja ausgezeichent komprimieren und von einem Server zum anderen schieben.

Tipp: rsync, dann werden jeweils nur die Änderungen seit dem letzten Sync kopiert. Nur sollte dann das Script nicht komprimiert vorliegen. (Der Transfer selbst ist dann natürlich komprimiert und verschlüsselt.)

Ahh die Position im Filesystem: normalerweise /var/lib/mysql/ und dann der DB Name...

Gruss
Roger
Top
PMEmail PosterUsers Website
Top
 
Remo Uherek
Trigami AG
#10 Geschrieben am: Di 27.04.2004, 13:41 (+00:25)
Report PostQuote Post

AyomRank 10
Group Icon

Gruppe: Admin
Beiträge: 6256
Mitglied seit: 22.09.2003


Mal eine Anfängerfrage: Was ist die beste Strategie, grosse Datenbanken zu dumpen? Mit dem phpmyadmin-Export stösst man sehr schnell an seine Grenzen...


--------------------
"You can’t build a reputation on what you’re going to do." - Henry Ford
"Ich prüfe jedes Angebot. Es könnte das Angebot meines Lebens sein." - Henry Ford
"Stop going for the easy buck and start producing something with your life. Create, instead of living off the buying and selling of others." - Carl Fox in 'Wall Street'

Trigami AG --> Blog-Marketing
Remo about Entrepreneurship --> mein Blog ;-)
Trigami Partnerprogramm --> 10 EUR pro neuen aktiven Blogger & 5% auf alle Umsätze des ersten Jahres von neuen aktiven Kunden. Anleitung: Bei trigami registrieren und Werbemittel einbauen.
Top
PMEmail PosterUsers Website
Top
 
Roger Bobst
calac gmbh
#11 Geschrieben am: Di 27.04.2004, 14:01 (+00:20)
Report PostQuote Post

AyomRank 5
Group Icon

Gruppe: Experten Entwicklung (Mod)
Beiträge: 426
Mitglied seit: 15.02.2004


Mit mysqldump in der Shell.

Mit dem Webfrontends hat man ja immer das Problem, dass Sie wegen zu hoher Ausführungszeit stoppen. Und gestückelt rausholen oder einfügen.....kanns ja nicht sein. Alternativ könnte man natürlich auch die maximale Scriptausführungszeit erhöhen. Sollte irgendwo im php.ini zu finden sein.

QUOTE
sirius:~/backup# grep -in 30 /etc/php4/apache/php.ini
137:max_execution_time = 30    ; Maximum execution time of each script, in seconds


oder eben mit mysqldump:

CODE
mysqldump -u dbuser --password=passwd --add-drop-table --result-file=/backup/sql/sirius_all_db.sql -A


Damit wird der gesamte DB Inhalt in das sirius_all_db.sql geschrieben. Braucht aber einen ssh Zugang. Ob das bei Standartwebhoster dabei ist, weiss ich auch nicht.

Und wenn ich schon dabei bin, unsere Backupstrategie zu "verraten":

CODE
rsync -e "ssh " -avzp /backup/sql/sirius_all_db.sql rsync@anderer.host.com:/backup/sql/


Damit das Script auf einem anderen Host sichern. Und klar, das ganze muss vom cron gerufen werden.

btw: merkt man, dass ich gerade an der Backupdokumentation arbeite ?? cool.gif

Gruss
Roger
Top
PMEmail PosterUsers Website
Top
 
Alain_Aubert
#12 Geschrieben am: Di 27.04.2004, 14:23 (+00:21)
Report PostQuote Post

Ayom Slave
Group Icon

Gruppe: Admin
Beiträge: 4605
Mitglied seit: 25.09.2003


Hehe, hab an dich gedacht, als ich das gefragt habe ;-)

Das es das gibt hab ich sehr stark vermutet. Jetzt weiss ich sogar wie es geht ;-))

Danke.
Top
PMEmail PosterUsers Website
Top
 
c-e
#13 Geschrieben am: Sa 1.05.2004, 21:38 (+4d 07:15)
Report PostQuote Post

AyomRank 5
Group Icon

Gruppe: Experten Entwicklung (Mod)
Beiträge: 330
Mitglied seit: 20.10.2003


my way:

CODE

<?php
$dbhost = '';
$dbuser = '';
$dbpass = '';
$dbname = '';


$savepath = $DOCUMENT_ROOT . "/backup";
$filename = "$savepath/timestamp_oder_watt_weiss_ich.sql";
passthru("mysqldump --opt -h$dbhost -u$dbuser -p$dbpass $dbname >$filename");
?>

Top
PMUsers Website
Top
 
adi99
#14 Geschrieben am: So 30.05.2004, 22:50 (+29d 01:12)
Report PostQuote Post

AyomRank 2
****

Gruppe: Member (inaktiv)
Beiträge: 6
Mitglied seit: 30.05.2004


Hallo zusammen
Bei mir ist die sql datei leer wenn ich c-e Lösung nehme... Braucht der Hoster etwas spezielles?

Herzlichen Dank


--------------------
Top
PMEmail PosterUsers Website
Top
 
Roger Bobst
calac gmbh
#15 Geschrieben am: So 30.05.2004, 23:31 (+00:40)
Report PostQuote Post

AyomRank 5
Group Icon

Gruppe: Experten Entwicklung (Mod)
Beiträge: 426
Mitglied seit: 15.02.2004


Hallo

Evt hat der Webserver Benutzer auch nicht die Rechte, mysqldump auszuführen. Fragen die zur Lösung helfen könnten:
-Gibts eine Fehlermeldung ?
-User- und Passwortangaben stimmen ?

Gruss
Roger
Top
PMEmail PosterUsers Website
Top
 
adi99
#16 Geschrieben am: Di 1.06.2004, 21:28 (+45:57)
Report PostQuote Post

AyomRank 2
****

Gruppe: Member (inaktiv)
Beiträge: 6
Mitglied seit: 30.05.2004


Nein es gibt keine Fehlermeldung
Und Passwort und User stimmen...

Da sind es sehr wahrscheinlich die Rechte :-(


--------------------
Top
PMEmail PosterUsers Website
Top
 
cybermaXX
#17 Geschrieben am: Di 1.06.2004, 21:47 (+00:18)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 548
Mitglied seit: 28.01.2004


grosse datenbanken dumpen geht auch so:

#!/bin/bash

zcat /home/www/DEINACCOUNT/restore/forum.sql | mysql --force -u DEINACCOUNT
-pPASSWORT DBNAME
echo "Content-Type: text/plain"
echo ""
echo "erledigt."

super provider mache es auch gratis,
geizistgeilhoster verlangen 20 bis 30.- dafür.


--------------------
Top
PMUsers WebsiteICQ
Top
 
rogerbo
#18 Geschrieben am: Sa 5.06.2004, 20:53 (+3d 23:05)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 309
Mitglied seit: 1.06.2004


Unter der voraussetzung das ein zugriff per Telnet / SSH besteht würde ich ein Backup über cron laufen lassen und dürfte mit einem script a la Cybermax auch funktionieren. Bitte fragt mich nicht nach dem Code sad.gif bin kein programierer habe nur etwas Sybase Sql erfahrung. Es dürfte sich aber auch mit MySql machen lassen.
So wie das posting von Cybermax aussieht ist dies bereits ein Script das per cronjob aufgerufen werden kann.
Top
PMUsers WebsiteICQ
Top
 
Roger Bobst
calac gmbh
#19 Geschrieben am: So 6.06.2004, 01:05 (+04:12)
Report PostQuote Post

AyomRank 5
Group Icon

Gruppe: Experten Entwicklung (Mod)
Beiträge: 426
Mitglied seit: 15.02.2004


@cybermax: Ich glaube nicht, dass dies ein Backup macht. Das ist doch ein Restore.....

QUOTE
zcat /home/www/DEINACCOUNT/restore/forum.sql | mysql --force -u DEINACCOUNT
-pPASSWORT DBNAME

Aus meiner Sicht wird da das forum.sql (welches vom Namen her eigentlich nicht gezippt ist) in die mysql Datenbank "geschoben".
Top
PMEmail PosterUsers Website
Top
 
rogerbo
#20 Geschrieben am: So 6.06.2004, 08:14 (+07:08)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 309
Mitglied seit: 1.06.2004


Wie schon gesagt, mit dem Programieren habe ich es nicht so deshalb hier die MySql seite die das Dump einer DB betrifft.

http://dev.mysql.com/doc/mysql/en/mysqldump.html

Hier ist noch die Seite fürs Backup

http://dev.mysql.com/doc/mysql/en/Backup.html

Vieleicht hilfts was
Top
PMUsers WebsiteICQ
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/1256

Topic Options Seiten: (2) [1] 2  Reply to this topicStart new topicStart Poll

 


> Ähnliche Themen
mysql too many connections Tuemmel 258 14 Mo 30.06.2008, 17:28
Problem mit MySQL nd UNIQUE TTlong 72 2 So 29.06.2008, 09:10
Werte aus TXT in Datenbank übernehmen ulumulu 139 14 Fr 27.06.2008, 11:48
MySQL-Abfrage optimieren Logigoo 212 6 Do 26.06.2008, 12:41
MySQL Profi gegen Bezahlung gesucht Ronald Nickel 104 0 Mo 23.06.2008, 13:10
MySQL: Vergleichsoperatoren cr4m0 181 7 Mo 9.06.2008, 20:39
[S] erfahrenen PHP/mysql-Programmierer flown 96 0 Sa 7.06.2008, 21:03
Suche: PHP & Mysql Programmierer WebEbene 77 0 Fr 6.06.2008, 15:40
mySQL Dump aus Access Datenbank Big Rob 163 4 Mo 2.06.2008, 22:19
MySQL-Abfrage geht nicht? pl_90 338 18 Mo 26.05.2008, 13:37




Anzeige - [Interessiert an einer Anzeige?]



Anzeigen




cyon Webhosting



[Interessiert an einer Anzeige?]