anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Do 12 Jun, 2025 16:31

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: [Biete][MySQL] Backup- Script
BeitragVerfasst: Sa 24 Nov, 2007 09:28 
Offline
Profi
Profi
Benutzeravatar

Registriert: So 15 Jan, 2006 20:28
Beiträge: 108
Wohnort: Hangelar
Mir ist gerade aufgefallen, das ich mal in einem Anderen Forum ein Backupscript gepotet habe. Es funktioniert, ist aber grade bei Umlauten noch verbuggt. Vielleicht könnt ihr ja dabei noch helfen, das auszubügeln ;)

$this->bbcode_second_pass_code('', '<?
function dump_struktur($tabellen_name)
{
$table = "`" . $tabellen_name . "`";

$ergebnis = mysql_query("describe $table;");
$anzahl_zeilen = mysql_num_rows($ergebnis);


$befehl = "CREATE TABLE $table ( \n";
$i = 0;

while ($row = mysql_fetch_object($ergebnis))
{
$i++;
$befehl .= " `$row->Field` $row->Type ";
if ($row->Null == "") {$befehl .= "NOT NULL ";} else {$befehl .= "NULL ";}
if ($row->Default != "" and $row->Default != "NULL") {$befehl .= "default '" . $row->Default. "'";}
$befehl .= " $row->Extra";
if ($row->Key == "PRI") {$befehl .= " PRIMARY KEY ";}
if (($anzahl_zeilen) != $i) {$befehl .= ",";}
$befehl .= "\n";
}
$befehl .= " );";
return $befehl;
}

function dump_daten($table)
{
$ergebnis = mysql_query("describe `$table`");
$anzahl_felder = mysql_num_rows($ergebnis);

$result = mysql_query("SELECT * FROM `$table`");

while ($row = mysql_fetch_row ($result))
{
$befehl .= "INSERT INTO `$table` VALUES (";

for ($i=0; $i<$anzahl_felder; $i++)
{
$befehl .= "'" . str_replace("'", "''", $row[$i]) . "'";
if ($anzahl_felder != $i+1) {$befehl .= ", ";}
}

$befehl .= "); \n";
}

return $befehl;
}

// Datenbankusername
$db_user = "root";
// Datenbankpasswort
$db_pass = "";
// Datenbankserver (zb localhost)
$db_host = "localhost";
// Datenbankname
$datenbank = "test";

$db = mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($datenbank, $db);

$tabellen = mysql_list_tables($datenbank);

$backup = "-- -------------------------------------\n--\n--\n-- Backup von der MySQL Datenbank.\n--\n-- Bas Backup wurde am " . date("d.m.Y H:i") . " erstellt.\n\n------------------------------------\n\n\n";

while ($row = mysql_fetch_row ($tabellen))
{
$backup .= "-- Backup von der Tabele `$row[0]` \n\n";
$backup .= dump_struktur($row[0]) . "\n\n";
$backup .= dump_daten($row[0]);
$backup .= "\n\n-- --------------------------------------------- \n\n";
}

if ($_GET[zip]==1)
{
$dateiname = date("m_d_Y_H_i") . ".sql.zip"; //Das nötige Datumsformat: MM_DD_YYYY
$datei = gzopen($dateiname, "w9");
gzwrite($datei, $backup);
gzclose($datei);
}
else
{
$dateiname = date("d_m_Y_H_i") . ".sql";
$datei = fopen($dateiname, "w");
fwrite($datei, $backup);
fclose($datei);
}

?> ')
Funktionsweise: Sobald das Script per Cronjob oder Manuell aufgerufen ird, wird ein Backup der Datenbank erstellt. Wird an den Dateinamen noch ?zip=1 angehängt wirddas ganze Zip-Komprimiert.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 24 Nov, 2007 10:35 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
Ich hätte hier ebenfalls eines von protectus.de
Es funktioniert nicht exakt gleich wie jenes, das TruckerB gerade veröffentlicht hat (Dieses hier greift auf den mysqldump Befehl zu, arbeitet also über die Funktion system()). Es komprimiert das ganze in GZip, man braucht also ein Entpackungsprogramm, welches GZip auch entschlüsseln kann.


[php]<?php

// error_reporting(0);

// ### (c) by Protecus.de ########
// ### EINSTELLUNGEN #############
// ###############################

$user = 'root'; // Name
$pass = ''; // Passwort
$database = 'test'; // zu sichernde Datenbank
$path = './backup/'; // Backup Ordner
$number_of_files = '5'; // mehr als x Dateien löschen (Autodelete)

// ###############################
// Updates: http://board.protecus.de/t9581.htm

// checke Backupordnergrösse
function dirsize($dir){
$dirsize=0;
$handle=opendir ($dir);
while (false !== ($file = readdir ($handle))) {
$dirsize+=filesize($dir.$file);
}
closedir($handle);
return $dirsize;
}

// Starte Output
echo '<html>
<head>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<title>MySQL Backup</title>
<style type=\'text/css\'>
<!--
h1 { font-family: verdana, arial;}
body,p,td,a { font-family: verdana, arial; font-size: 8pt;}
//-->
</style>
</head>
<body>

<h1>MySQL Backup</h1>
<b><u>Konfiguration:</u></b>
<br /><b>Sicherung Datenbank:</b> '. $database .'<br />
<b>Auto-Löschen aktiviert:</b> +'.$number_of_files.' Dateien<br />
<b>GZip-Komprimierung:</b> aktiv<br />
<b>Backups gesamt:</b> '.round(dirsize("$path")/(1024*1024),2).' MB<br /><br />
<p><b>Backup wird ausgeführt...</b><br /><br /><span style="color:darkblue; font-weight:bold" id="dspan">|</span></p>
<script type="text/javascript"><!--
function js_dots()
{
dspan.innerText = dspan.innerText + "|";
jstimer = setTimeout("js_dots();", 200);
}
if (document.all)
{
js_dots();
}
//--></script>';


// Backupverzeichnis erstellen, falls noch nicht existient!
if (!is_dir($path)) mkdir($path, 0777);
$dh = opendir($path);
while (false !== ($filename = readdir($dh)))
{
if ($filename != "." && $filename != "..") $files_unlink[] = $filename;
}

@rsort($files_unlink);

if (sizeof($files_unlink) >= $number_of_files)
{
for($n=sizeof($files_unlink)-1; $n>=$number_of_files; $n--)
{
unlink($path.$files_unlink[$n]);
}
}

// Backup erstellen

$datei = date("d\.m\.Y\_H",time())."_Uhr_".date("i",time()); // Dateiname aus Datum und Uhrzeit bilden
$datei .= ".gz";
if (file_exists($datei)) unlink($datei);

$path = str_replace(".", "", $path);

system("/usr/bin/mysqldump -u$user -p$pass -h localhost $database | gzip > ".dirname(__FILE__)."$path/$datei", $fp);
if ($fp==0) $meldung = "Backup erfolgreich!"; else $meldung = "Es ist ein Fehler aufgetreten!";


// und Meldung, dass fertig!
echo '
<script type="text/javascript"><!--
if (document.all)
{
clearTimeout(jstimer);
}
//--></script>
<p>'.$meldung.'</p>
<p><blink><b>Fertig!</b></blink></p>
</html>
</head>';

?>[/php]

Des weiteren habe ich diese kleine Version im 1&1 Hilfe-Center gefunden:
[php]<?php
// Bitte hier Ihre Daten eintragen
$host= 'dbxx.1und1.de';
$user= 'dbxxxxxx';
$pass= 'xxxxxxxx';
$db= 'dbxxxxxxx';

// Befehl ausführen und in Zipfile speichern
system(sprintf(
'mysqldump --opt -h%s -u%s -p"%s" %s | gzip > %s/dumpDB.sql.gz',
$host,
$user,
$pass,
$db,
getenv('DOCUMENT_ROOT')
));
echo '+DONE';
?>[/php]

Und als letztes noch ein Vorschlag für einen Cronjob, den ich bei vbulletin-germany.de gefunden habe.
$this->bbcode_second_pass_code('', '##!/usr/bin/ksh
# Erstellt ein Backup der mySQL Datenbanken
# die dann später mal wieder importiert werden können
# (Dieses script wird automatisch täglich durch crontab ausgeführt!
#

# Aktuelles Datum für Dateinamen setzen
# (Wochentag --> 1=Mo, 7=So, d.h. 7 Backups pro Woche, danach wird wieder überschrieben)
date=`date +%u`

#
# Backup Database: (only tables)
mysqldump -d --add-drop-table --user=MYSQLUSER --password=KENNWORT DB >/home/www/web/backup/tables_$date.sql

#
# Backup Database: (only data)
mysqldump -t -a -C -c --user=MYSQLUSER --password=KENNWORT DB >/home/www/web/backup/data_$date.sql')
Man muss hier natürlich noch Passwort und Benutzername ändern. Desweiteren sollte man auch das Verzeichnis ändern, wenn es nicht korrekt übereinstimm.


Mit freundlichen Grüssen,
Harthas


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 22 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum