:: Anbieterverzeichnis :: Globale Branchen
:: SELFPHP Forum ::
Fragen rund um die Themen PHP?
In über
130.000 Beiträgen finden Sie sicher die passende
Antwort!
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
:: Qozido ::
Die Bilderverwaltung mit Logbuch für
Taucher und Schnorchler.
Datenbank-Backup mit automatischem FTP-Upload
Beispielaufgabe Datenbank-Backup mit automatischem FTP-Upload
Beschreibung
Nachfolgend stellen wir Ihnen eine Klasse in PHP5 vor, mit der Sie komfortabel ein Backup Ihrer bestehenden MySQL-Datenbanken erstellen können.
Weiterhin besteht nach dem Backup die Möglichkeit, die komprimierte Backupdatei automatisch auf einen entfernten Backup-Server zu speichern.
Als Rückgabewert der Klasse erhalten Sie verschiedene Parameter über die Dateigröße oder z.B. der verstrichenen Zeit bei dem Upload auf den FTP-Server.
<?php
/**
* Db_Backup_Service
*
* PHP5 Class Datenbank Backup
* Required: PHP 5 >= 5.1.2
*
* @package Db_Backup_Service
* @author Damir Enseleit
* @copyright 2012, SELFPHP OHG
* @license BSD License
* @version 1.0.0
* @link http://www.selfphp.de
*
*/
class Db_Backup_Service {
/**
* @var string Datenbank Hostname oder IP
*/
private $dbHost = "localhost" ;
/**
* @var string Datenbank Socket (Leer lassen falls nicht benötigt)
*/
private $dbSocket = "/tmp/mysql5.sock" ;
/**
* @var string Datenbank Username
*/
private $dbUser = "" ;
/**
* @var string Datenbank Passwort
*/
private $dbPasswd = "" ;
/**
* @var string Datenbank Name
*/
private $dbName = "" ;
/**
* @var string ZIP-Format ('zip' , 'bzip2' , 'targz')
*/
private $zipFormat = "zip" ;
/**
* @var string Zeitstempel
*/
private $timeBackup = "" ;
/**
* @var string Upload Filename
*/
private $uploadFile = "" ;
/**
* FTP-Daten
*/
private $ftpUser = '' ; // FTP Username
private $ftpPasswd = '' ; // FTP Passwort
private $ftpHost = 'selfphp.de' ; // FTP Host
private $ftpPfad = '/backuptest/' ; // Pfad auf dem Backupserver
mit führendem und endendem Slash !
/**
* Constructor
*/
function __construct ( ) {
$this -> timeBackup = date ( "Y-m-d_H-i-s" );
}
/**
* Backup starten
*/
public function startDbBackup ( ) {
$mysqlDump = 'mysqldump ' ;
$mysqlDump .= $this -> dbName . ' ' ;
$mysqlDump .= '--host="' . $this -> dbHost . '" ' ;
if ( !empty( $this -> dbSocket ) )
$mysqlDump .= '--socket="' . $this -> dbSocket . '" ' ;
$mysqlDump .= '--user="' . $this -> dbUser . '" ' ;
$mysqlDump .= '--password="' . $this -> dbPasswd . '" ' ;
$dateiName = $this -> dbName . '_' . $this -> timeBackup . '.sql' ;
if( $this -> checkStreamEditor () )
$mysqlDump .= '| sed "s/^--.*$//" > ' . $dateiName ;
else
$mysqlDump .= '> ' . $dateiName ;
exec ( $mysqlDump );
$this -> startZip ();
}
/**
* Backup komprimieren
*/
private function startZip ( ) {
$tarName = $this -> dbName . '_' . $this -> timeBackup ;
$dateiName = $this -> dbName . '_' . $this -> timeBackup . '.sql' ;
if ( $this -> zipFormat == 'zip' )
{
$tarName .= '.zip' ;
$shellBefehl = "zip -r $tarName $dateiName" ;
exec ( $shellBefehl );
}
else if( $self_config [ 'zipformat' ] == "bzip2" )
{
$tarName .= '.tar.bz2' ;
$shellBefehl = "tar -jcf $tarName $dateiName && bzip2 $tarName" ;
}
else
{
$tarName .= '.tar.gz' ;
$shellBefehl = "tar -zcf $tarName $dateiName && gzip $tarName" ;
}
$this -> uploadFile = $tarName ;
exec ( $shellBefehl );
//Löscht die zuvor erstellte nicht komprimierte Backupdatei (*.sql)
unlink ( $dateiName );
}
/**
* Überprüfen ob SED (Stream-Editor) installiert ist
*
* @return bool true / false
*/
private function checkStreamEditor ( ) {
exec ( "whereis sed" , $whereis );
if( $whereis [ 0 ] == "sed:" )
return false ;
else
return true ;
}
/**
* FTP-Upload starten
*/
public function curlUpload () {
$fp = fopen ( $this -> uploadFile , "r" );
$url = "ftp://" . $this -> ftpUser . ":" . $this -> ftpPasswd . "@" .
$this -> ftpHost . ":21" . $this -> ftpPfad . $this -> uploadFile ;
$handle = curl_init ();
curl_setopt ( $handle , CURLOPT_URL , $url );
curl_setopt ( $handle , CURLOPT_RETURNTRANSFER , 1 );
curl_setopt ( $handle , CURLOPT_UPLOAD , 1 );
curl_setopt ( $handle , CURLOPT_INFILE , $fp );
curl_setopt ( $handle , CURLOPT_INFILESIZE , filesize ( $this -> uploadFile ));
$result = curl_exec ( $handle );
$info = curl_getinfo ( $handle );
curl_close ( $handle );
return $info ;
}
}
?>
Anwendungsbeispiel
<?php
include_once ( 'Db_Backup_Service.php' );
$dbBackup = new Db_Backup_Service ( );
// Backup erstellen
$dbBackup -> startDbBackup ( );
// FTP-Upload starten
$infoF = $dbBackup -> curlUpload ( );
echo 'Dateigröße: ' . $infoF [ 'size_upload' ] . '<br>' ;
echo 'Geschwindigkeit: ' . $infoF [ 'speed_upload' ] . '<br>' ;
echo 'Gesamtzeit: ' . $infoF [ 'total_time' ] . '<br><br>' ;
print_r ( $infoF );
?>
Ausgabebeispiel: Browseransicht Dateigröße: 1621817
Geschwindigkeit: 5363736
Gesamtzeit: 0.302367
:: Anbieterverzeichnis ::
Webhosting/Serverlösungen
Suchen Sie den für Sie passenden IT-Dienstleister für Ihr Webhosting-Paket oder Ihre Serverlösung?
Sie sind nur ein paar Klicks davon entfernt!
Ausgewählter Tipp im Bereich PHP-Skripte
MD5-Hash-Summe überprüfen
Weitere interessante Beispiele aus dem SELFPHP Kochbuch finden Sie im Bereich PHP-Skripte