Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Coding Releases
You last visited: Today at 20:25

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



MySQL Datenbank Backup erstellen

Discussion on MySQL Datenbank Backup erstellen within the Coding Releases forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Feb 2013
Posts: 10
Received Thanks: 1
MySQL Datenbank Backup erstellen

Mit dieser einfachen Klasse ist es möglich Backups mehrerer Datenbanken zu erstellen. Die Backups werden in Ordnern gespeichert, Beispiel:

Quote:
/Datenbank/Jahr/Monat/Tag/Stunde_Minute_Sekunde.sql.gz
Quote:
/testdb/2013/04/19/12_15_00.sql.gz
Ablauf
  • es wird überprüft, ob ein Ordner mit dem Namen der Datenbank existiert, falls das nicht der Fall ist, wird der Ordner erstellt
  • es wird überprüft, ob ein Ordner mit dem aktuellen Jahr existiert, falls das nicht der Fall ist, wird der Ordner erstellt
  • es wird überprüft, ob ein Ordner mit dem aktuellen Monat existiert, falls das nicht der Fall ist, wird der Ordner erstellt
  • es wird überprüft, ob ein Ordner mit dem aktuellen Tag existiert, falls das nicht der Fall ist, wird der Ordner erstellt

für jede Datenbank wird
  • ein Backup erstellt
  • das Backup mit gzip komprimiert
  • überprüft ob die Datei vorhanden ist
  • falls das nicht der Fall ist, eine Error-Mail versendet

Die Klasse (sicherung.class.php)
PHP Code:
<?php
/*
 * Autor: Snees @ http://coding-net.de
 * Datum: 19.04.2013
 */
class Sicherung{
    private 
$host;                        //MySQL-Host
    
private $benutzer;                    //MySQL-Benutzername
    
private $passwort;                    //MySQL-Passwort
    
private $datenbankArray = array();    //MySQL-Datenbank-Array
    
    
private $pfad;                        //Pfad zu dem Sicherungsordner auf dem Server
    
private $email;                        //Absender und Empfänger für die Error-Mails
    
    
private $jahr;                        //das aktuelle Jahr
    
private $monat;                        //der aktuelle Monat
    
private $tag;                        //der aktuelle Tag
    
private $zeit;                        //Kombination aus Jahr, Monat und Tag, wird für den Dateinamen benötigt
    
    
private $dateiname;                    //Dateiname der MySQL-Sicherung
    
    //Konstruktor
    
public function __construct($mysqlArray,$datenbankArray,$serverPfad,$email){
        
//Variablen die Werte aus dem Konstruktor zuweisen
        
$this->host $mysqlArray['host'];
        
$this->benutzer $mysqlArray['benutzer'];
        
$this->passwort $mysqlArray['passwort'];
        
$this->datenbankArray $datenbankArray;
        
$this->pfad $serverPfad;
        
$this->email $email;
        
//Das aktuelle Datum festlegen
        
$this->jahr date('Y');
        
$this->monat date('m');
        
$this->tag date('d');
        
$this->zeit date('H').'_'.date('i').'_'.date('s');
        
//den Dateinamen zusammensetzen
        
$this->dateiname $this->jahr '/' $this->monat '/' $this->tag '/' $this->zeit'.sql';
        
$this->erstelleOrdner();
    }
    
    public function 
__destruct(){
        
    }
    
    
//diese Funktion erstellt die entsprechenden Ordner, falls diese noch nicht existieren
    //und vergibt die Rechte
    
private function erstelleOrdner(){
        
$count count($this->datenbankArray);
        for(
$i $i $count ; ++$i){
            
//überprüfe den Ordner für die Datenbank
            
if(!is_dir($this->datenbankArray[$i])){
                
mkdir($this->datenbankArray[$i]);
                
chmod($this->datenbankArray[$i],0777);
            }
            
//überprüfe den Ordner für das aktuelle Jahr
            
if(!is_dir($this->datenbankArray[$i] . '/' $this->jahr)){
                
mkdir($this->datenbankArray[$i] . '/' $this->jahr);
                
chmod($this->datenbankArray[$i] . '/' $this->jahr,0777);
            }
            
//überprüfe den Ordner für den aktuellen Monat
            
if(!is_dir($this->datenbankArray[$i] . '/' $this->jahr '/' $this->monat)){
                
mkdir($this->datenbankArray[$i] . '/' $this->jahr '/' $this->monat);
                
chmod($this->datenbankArray[$i] . '/' $this->jahr '/' $this->monat,0777);
            }
            
//überprüfe den Ordner für den aktuellen Tag
            
if(!is_dir($this->datenbankArray[$i] . '/' $this->jahr '/' $this->monat '/' $this->tag)){
                
mkdir($this->datenbankArray[$i] . '/' $this->jahr '/' $this->monat '/' $this->tag);
                
chmod($this->datenbankArray[$i] . '/' $this->jahr '/' $this->monat '/' $this->tag,0777);
            }
            
$this->erstelleDump($this->datenbankArray[$i]);
        }
    }
    
    
//diese Funktion erstellt einen Dump der angegebenen Datenbank
    
private function erstelleDump($datenbank){
        
exec('mysqldump --user=' $this->benutzer ' --password=' $this->passwort ' --host=' $this->host ' ' $datenbank ' > ' $this->pfad '/' $datenbank '/' $this->dateiname);
        
$this->komprimiereDump($datenbank);
    }
    
    
//diese Funktion komprimiert den Dump der angegebenen Datenbank
    
private function komprimiereDump($datenbank){
        
exec('gzip ' $this->pfad '/' $datenbank '/' $this->dateiname);
        
$this->pruefeDump($datenbank);
    }
    
    
//diese Funktion prüft, ob der komprimierte Dump vorhanden ist
    
private function pruefeDump($datenbank){
        if(!
file_exists($datenbank '/' $this->dateiname '.gz')){
            
//sollte das nicht der Fall sein, wird eine Error-Mail versendet
            
$this->sendeErrorMail($datenbank);
        }
    }
    
    
//diese Funktion versendet eine Error-Mail, falls der komprimierte Dump der angegebenen Datenbank nicht vorhanden ist
    
private function sendeErrorMail($datenbank){
        
$header 'From: '$this->email "\r\n" 'Reply-To: ' $this->email "\r\n" 'X-Mailer: PHP/' phpversion();
        
mail($this->email,'Sicherung fehlgeschlagen','Die Sicherung ist fehlgeschlagen,'."\n\n".'Zeit: '.str_replace('_'':'$this->zeit) . "\n\n Datenbank: " $datenbank,$header);
    }
}
?>
Aufruf der Klasse:
PHP Code:
<?php
include('sicherung.class.php');
$mysqlArray = array(
'host' => 'localhost',        //MySQL-Host
'benutzer' => 'user',        //MySQL-Benutzer
'passwort' => 'password'    //MySQL-Passwort
);
$datenbankArray = array('datenbank1','datenbank2','datenbank3');
$sicherung = new Sicherung($mysqlArray,$datenbankArray,'/var/www/sicherung','');
?>
LG, Snees.
Snees is offline  
Thanks
1 User
Old 04/23/2013, 11:13   #2

 
マルコ's Avatar
 
elite*gold: 1329
Join Date: Jun 2009
Posts: 1,873
Received Thanks: 960
Traurig, dass exec genau immer dann verboten ist, wenn man selbst auch keinen Zugriff auf die das Terminal hat.
Wobei ich exec auf meinen eigenen Servern ja auch schon disable...
Weil dann empfehle ich eher einen 2. Server mit MariaDB, der als Slave agiert. Oder ein Backup mit Tartarus des MySQL DB Directories.

Du solltest dir lieber eine Lösung überlegen, die rein auf SQL (am besten standardisiertem SQL) basiert. Evtl mit PDO und Auswahl, was für eine DB Software genutzt wird.
マルコ is offline  
Reply


Similar Threads Similar Threads
MYSQL Backup erstellen Sani files
01/03/2013 - Metin2 Private Server - 3 Replies
Hi Com, ich hätte ne frage da ich es nichtmehr riskieren will das meine files verloren gehen mache ich jeden tag nach bearbeitung des servers ein backup so jetz erstellt der mir beim backup nur ein backup der game aber ich brauche auch ein mysql backup ??? wie mache ich das? Mfg Sharky ;)
[Frage] Datenbank Backup?
11/16/2012 - Flyff Private Server - 8 Replies
Hallo epvp, ich habe folgendes problem, ich möchte ein Backup von meiner Website DBF machen (weil dort der Donate Shop voll eingerichtet ist) Nun stellt sich die frage, wie ich das mache? Habe einiges probiert, aber das war alles negativ...
[Fehler] mysql backup einfügen / mysql startet nicht
07/29/2012 - Metin2 Private Server - 0 Replies
Hallo Leute, dieser fehler geht mir so langsam auf die nerven, und hoffe mir kann hier jemand weiter helfen. Also, ich hab mir ein backup geholt von meiner datenbank (/var/db/mysql) den Inhalt account common hotbackup
[SQL]Datenbank Backup via Befehl
05/21/2011 - Flyff Private Server - 1 Replies
Moooin ePvper, Ich weiß nicht, ob das Script schon released wurde, aber ich release es nun einfach mal - das Script bewirkt ein Backup eurer SQL-Database, es funktioniert NUR mit MSSQL nicht mit Navicat oder sowas. BACKUP DATABASE TO DISK = N'Path wo die Backups hinkommen sollen.' WITH NOFORMAT, NOINIT, NAME = N'ITEM_DBF-Vollständig Datenbank Sichern', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO BACKUP DATABASE TO DISK = N'Path wo die Backups hinkommen sollen.' WITH NOFORMAT, NOINIT,...



All times are GMT +1. The time now is 20:25.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.