Boardunity & Video Forum

Boardunity & Video Forum (https://boardunity.de/)
-   Programmierung und Datenbanken (https://boardunity.de/programmierung-datenbanken-f23.html)
-   -   Sicherung der mySQL-DB (https://boardunity.de/sicherung-mysql-db-t1130.html)

stalkerX 01.01.2004 23:17

Sicherung der mySQL-DB
 
Abend.

Sichert ihr eure mySQL-Tabellen als Backup? Wenn ja, womit und wie oft? Auf dem Server oder auf dem Recher?

Würde mich sehr gerne interessieren ;)

Boardster 01.01.2004 23:25

Hi Stalker,

also ich sichere die Datenbank täglich per Cron-Job. Dazu folgt dann 1-2mal die Woche das Komplettbackup auf USB-Stick.

Als Backup-Tool für gelegentliche Sicherungen dient mir nach wie vor phpmyadmin.

jantilly 04.01.2004 18:52

ein Cron Job & das in Mysql integrierte Tool mysqldump senden mir täglich eine Mail ;-)

Daniel Richter 04.01.2004 19:10

Zitat:

Zitat von jantilly
ein Cron Job & das in Mysql integrierte Tool mysqldump senden mir täglich eine Mail ;-)

hmm wie groß ist deine Datenbank? Das kann ja nicht viel sein, denn ich könnte das bei > 100 mb SQL Dump nicht mehr machen ;)

csn! 04.01.2004 20:20

Warum nicht?
Ich mache ebenfalls mysqldump per cronjob 1 mal täglich. Alle 2 Tage lade ich mir ein Backup herunter.

netzopfer 05.01.2004 09:09

Cron-Job...
 
Zitat:

Zitat von Boardster
...
also ich sichere die Datenbank täglich per Cron-Job.
...

Hi,

betreibe selbst ein YaBBSE Forum und sichere auch nahezu Täglich via mysqldump des Forums und via PHPMyAdmin.
Gerne würde ich mich mit der Materie Cron-Job beschäftigen da ich bei meinem neuen Provider einen frei habe. Brauch ich ein selbstgeschriebenes Skript? Sollten die mir soetwas anbeiten? Wie geht soetwas von statten?

Für ein WebBackup nutze ich BTW, klappt sehr gut ;)

Boardster 05.01.2004 09:15

Vielleicht hilft dir dieses Script weiter:

Es liefert keinen Output und besteht aus einer Config-Datei und dem Script.

config.inc
Code:

<?php
/*******************************************/
/* MySQL Database Backup                  */
/*******************************************/

//  -------------------------------------------------------------------------------------
// Script configuration:
$path = "../../phptmp/"; // backup path
    $host = "localhost"; // hostname
    $use_date = 1; // use date in file name

$numdb = 2; // number of databases to backup

$account[1] = "name"; // any name (used for filename)
    $user[1] = "wwXXXX"; // DB user
    $pw[1] = "XXXXXXXX"; // password
    $databasename[1] = "XXDatenbanknameXX"; // DB

$account[2] = "name2"; // any name (used for filename)
    $user[2] = "wwXXXX"; // DB user
    $pw[2] = "XXXXXXXX"; // password
    $databasename[2] = "usr_wwXXXX_1"; // DB
   

?>


backup.php
Code:

<?php
/*******************************************/
/* MySQL Database Backup for Cron Jobs    */
/*******************************************/

//  -------------------------------------------------------------------------------------
include ("config.inc");

for ($idb = 1; $idb <= $numdb; $idb++) {


$conn_id = mysql_connect($host,$user[$idb],$pw[$idb]) or die(mysql_error());

$database = $databasename[$idb];
$zaehler = 0;
$start=0;


// generate filesuffix if it should be used
if($use_date == 1) {
$datum = date(Ymd)."_";
} else{
$datum = "";
}

$file_name = $path.$datum.$account[$idb].".sql";
$file_old = $path.$database.".old";
$aktime=date("d-m-Y H:i");
$db_name = $dump1."$aktime\n";
$db_name.= $dump2."$database \r\n";
if (file_exists($file_name)){unlink($file_name);} 
$fd = fopen($file_name,"a+");
fwrite($fd, $db_name);
fclose($fd);   
 
// Tabellenname Array auslesen und aufbauen

$tbl_array = array(); $c = 0;
$result2 = mysql_list_tables($database);
for($x=0; $x<mysql_num_rows($result2); $x++) { 
$tabelle = mysql_tablename($result2,$x);
if ($tabelle <>"") {
$tbl_array[$c] = mysql_tablename($result2,$x); $c++;$zaehler++;
}
}

flush();

// Start Ausgabe und Berechnung
for ($y = 0; $y < $c; $y++) { 
$tabelle=$tbl_array[$y];

// Struktur der Tabelle einlesen

$def = "";
$def .= "DROP TABLE IF EXISTS $tabelle; \n";
$def .= "CREATE TABLE $tabelle (\n";
$result3 = mysql_db_query($database, "SHOW FIELDS FROM $tabelle",$conn_id);
while($row = mysql_fetch_array($result3)) {
$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);
$result3 = mysql_db_query($database, "SHOW KEYS FROM $tabelle",$conn_id);
while($row = mysql_fetch_array($result3)) {
$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($xy, $columns) = @each($index)) {
$def .= ",\n";
if($xy == "PRIMARY") $def .= "  PRIMARY KEY (" . implode($columns, ", ") . ")";
else if (substr($xy,0,6) == "UNIQUE") $def .= "  UNIQUE ".substr($xy,7)." (" . implode($columns, ", ") . ")";
else $def .= "  KEY $xy (" . implode($columns, ", ") . ")";
}

$def .= "\n); \n";
   
// Ende Struktur Modul
$db = @mysql_select_db($database,$conn_id);

$tabelle="".$tabelle;
$ergebnis=array();
$tbl_name = $dump3."$tabelle \r\n";
$fd = fopen($file_name,"a+");
fwrite($fd, $tbl_name.$def);
fclose($fd);

unset($data);
if ($tabelle>""){ 
$ergebnis[]=@mysql_select_db($database,$conn_id);
$result=mysql_query("select * from $tabelle");
$anzahl= mysql_num_rows ($result);
$spaltenzahl = mysql_num_fields($result);
for ($i=0;$i<$anzahl;$i++) {
$zeile=mysql_fetch_array($result);
$data.="insert into $tabelle (";
for ($spalte = 0; $spalte < $spaltenzahl;$spalte++) {
$feldname = mysql_field_name($result, $spalte);
if($spalte == ($spaltenzahl - 1)) {
$data.= $feldname;
} else {
$data.= $feldname.",";
}
};
$data.=") VALUES (";
for ($k=0;$k < $spaltenzahl;$k++){
if($k == ($spaltenzahl - 1)) {
$data.="'".addslashes($zeile[$k])."'";
} else {
$data.="'".addslashes($zeile[$k])."',";
}
}
$data.= ");\n";
}
$data.= "\n";
} else {
$ergebnis[]= $err;
}

$zeit = (date("d_m_Y"));
$fd = fopen($file_name,"a+");
$zeit = time() - $start;
$speed = $speed+$zeit;

for ($i3=0;$i3<count($ergebnis);$i3++){
fwrite($fd, $data);
fclose($fd);
}
}
$groesse = filesize($file_name) / 1024;
$place =  $place+$groesse;

mysql_close($conn_id);

}

exit;
?>


...und dann in den Account-Einstellungen "backup.php" als Cron-Job wählen.

Björn 05.01.2004 12:10

oh das gefällt mir!
ich werde mir das mal genauer anschaun
thx


edit: was mir nicht gefällt: config.inc
wird normaler weiße nicht geparst sprich jeder könnte sich die db pws im klartext runterladen!

am besten in config.inc.php umbennen und in backup.php anpassen
mfg

MaMo 05.01.2004 12:37

Zitat:

Zitat von Boardster
Vielleicht hilft dir dieses Script weiter:

Es liefert keinen Output und besteht aus einer Config-Datei und dem Script.

config.inc

...und dann in den Account-Einstellungen "backup.php" als Cron-Job wählen.

Cool, aber ich bräuchte das für Perl :D
Mal sehen, vielleicht schreibe ich das in den nächsten Tagen mal um ;)
MfG MaMo

netzopfer 05.01.2004 13:04

Zitat:

Zitat von Boardster
Vielleicht hilft dir dieses Script weiter:

Es liefert keinen Output und besteht aus einer Config-Datei und dem Script.

(Code)

...und dann in den Account-Einstellungen "backup.php" als Cron-Job wählen.

Danke erstmal für deine Hilfe, hab es mal inst. und gestest. Der Dump klappt hervorragend :) jedoch kann ich nicht zurück spielen :confused:
Kommen gleich Fehler hinter fehler und wenn ich mir das Dumpfile mal so anschaue sieht es etwas merkwürdig aus :(
Code:

05-01-2004 13:51
XXDBNameXX
yabbse_banned
DROP TABLE IF EXISTS yabbse_banned;
CREATE TABLE yabbse_banned (
    type tinytext NOT NULL,
    value tinytext NOT NULL
);

yabbse_boards
DROP TABLE IF EXISTS yabbse_boards;
CREATE TABLE yabbse_boards (
    ID_CAT tinyint(4) DEFAULT '0' NOT NULL,
    ID_BOARD int(11) NOT NULL auto_increment,
    name tinytext NOT NULL,
    description text,
    moderators text,
    boardOrder tinyint(4) DEFAULT '0' NOT NULL,
    numTopics int(11) DEFAULT '0' NOT NULL,
    numPosts int(11) DEFAULT '0' NOT NULL,
    isAnnouncement tinyint(4) DEFAULT '0' NOT NULL,
    notifyAnnouncements tinyint(4) DEFAULT '0' NOT NULL,
    count tinyint(4) DEFAULT '0' NOT NULL,
    ID_LAST_TOPIC int(11),
  PRIMARY KEY (ID_BOARD),
  KEY ID_CAT (ID_CAT),
  KEY boardOrder (boardOrder)
);
insert into yabbse_boards (ID_CAT,ID_BOARD,name,description,moderators,boardOrder,numTopics,numPosts,isAnnouncement,notifyAnnouncements,count,ID_LAST_TOPIC) VALUES ('5','1','Test','Teste bis der Arzt kommt...','test','2','1','5','0','0','1','170');
...
...
...

Hilfe...


edit: Das Dumpfile der ForenSW funktioniert? Was habe iuch falsch gemacht?

stalkerX 05.01.2004 21:16

Warum ich eigentlich gefragt habe: Ich bin grad dabei eine mySQL-Backup-Applikation zu schreiben. Damit ist es möglich gesamte Datenbank oder auch einzelne Tabellen zu archivieren - auf dem WebServer oder es wird als downloadbare Datei bereitgestellt, im SQL- oder GZ-Format.

Es wäre fein, wenn noch jemand, ausser mir ;), die Anwendung testet. Reports bitte an mich... Schon mal danke! Hier die fast blanke DL-Seite: http://lab.ebiene.de/

P.S: Struktur und Restore kommen noch.

Gérome 05.01.2004 22:05

Der Vielfalt zuliebge möchte ich noch eine weitere Lösung vorstellen, mit der ich heute unseren neuen Server bei all-inkl.com mit einer 140 MB-Datenbak gefüttert habe: "DumpTimer" von http://www.mywitch.de/usindex.php4. Diese Anwendung finde ich persönlich recht "trickreich". Sie setzt auf eine Kombination aus Win32-Anwendung und PHP-Script und ist mittels inkrementeller Datenströme in der Lage, nahezu beliebig große Datenbanken zu transferieren, ohne in einen Timeout zu laufen. Dazu ist es nicht einmal nötig, daß die DB von außen zugänglich ist, da diese Verbindung über ein PHP-Script hergestellt wird, welches (per Hand bzw. per FTP *g*) auf dem Webspace abzulegen ist.

Bei 1&1 haben wir unsere Dumps immer schön über die Konsole mit mySQL-Dump erledigt - jetzt dürfen wir dies ja leider nicht mehr und ich denke, mit diesem Produkt etwas (für uns) brauchbares gefunden zu haben.


Grüße,
Gérome

itst 06.01.2004 00:37

Ich zitiere mich mal selbst ,-)

http://webhostingtalk.de/showpost.ph...99&postcount=6

Tomek 03.03.2005 10:07

Hat jemand von Euch schon mal mit mysqlhotcopy gearbeitet und kann einige Erfahrungen berichten? Es soll bei größeren Datenbanken das schnellere und sicherere Verfahren sein die Datenbank zu sichern.

Aus dem MySQL-Handbuch:
Zitat:

mysqlhotcopy ist ein Perl-Skript, das LOCK TABLES, FLUSH TABLES und cp oder scp benutzt, um schnell eine Datensicherung einer Datenbank anzulegen. Es stellt die schnellste Möglichkeit dar, eine Sicherung einer Datenbank oder einzelner Tabellen durchzuführen, läuft aber nur auf derselben Maschine, auf der sich die Datenbankverzeichnisse befinden.

Luki 04.03.2005 20:00

-> MySQL Backup erstellen (auch bei grossen Datenbanken)
hier auch schon ausgiebig diskutiert ;)

ich verwende ebenfalls den mysql eigenen Befehl für Backups und sicher die Datenbank 70MB täglich!

redlabour 29.09.2007 08:39

Online : MySQLDumper MySQLDumper - smart backup for all your web projects
Lokal: Dumptimer MySql Sicherung s (MySQL Backup)- Software für MySQL Datenbanken, auch für MySQL Datenbanken im Internet. - RichtSoft


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:51 Uhr.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25