WBCE Home | WBCE Hilfe | WBCE Addon Repository | Impressum | Datenschutz

WBCE CMS Forum

WBCE CMS – Way Better Content Editing.

You are not logged in.

#1 08.04.2017 11:18:42

better-work
Member

Backup Skript (PHP-Syntax) leicht anpassen (MySQL Backup per Cronjob)

Hallo liebe Mitstreiter,

ich habe das Sicherungsscript von all-inkl.com (Guckst Du hier= Original Skript von all-inkl.com) schon nahezu perfekt angepasst.

Das Skript als solches funktioniert schon! Allerdings komme ich mit der Syntax nicht weiter...

Aufgabe= Es soll in einen, frei zu bezeichnenden Unterordner, relativ zum Skript, gesichert werden.
Dies läuft dann in einem per .htaccess und .htpasswd gesicherten Verzeichnis per Cronjob jede Nacht!
Alle Prüfbefehle sollen dann natürlich auch auf diesen Unterordner angewendet werden.

Sinn= Das Skript soll außerhalb des Sicherungsverzeichnisses liegen, um eine Bereinigen der Sicherungen von alten Dateien zu ermöglichen.
Und der Ordner soll natürlich auch nur einmal oben einzutragen sein=

[== PHP ==]
$ordner = "deinordner";

Selbstverständlich ist auch eine manuelle Auslösung möglich, sinnvoll um Zwischenschritte bei dem Aufbau von Projekten zu sichern!!!

Hier nun das gesamte Werk=

[== PHP ==]
<?php

/*

Dieses Skript eignet sich auch für eine automatisierte Datensicherung in der Nacht, die Sie mit Hilfe eines CronJobs anlegen können.
Sollte Ihr Tarif keinen CronJob besitzen, so können Sie diesen in der MembersArea unter ZUSATZPTIONEN dazu bestellen
und dann unter CronJobs einrichten. Beachten Sie bitte, dass größere Datenbanken u.U. nicht mehr per Skript gesichert werden können,
da das Skript ggf. an Serverrestriktionen stößt!

Folgende Schritte sind notwendig:

1.	Legen Sie im FTP-Hauptverzeichnis Ihrer Domain einen entsprechenden Unterordner an. 
	Ich empfehle= 001-backup/sql-backup - da dieser Ordner dann ganz oben positioniert ist
2. 	Geben Sie über Ihr FTP-Programm dem Ordner eine Schreibberechtigung (CHMOD) von 777.
3. 	Erstellen Sie in dem Ordner eine PHP-Datei (db_backup.phpx) mit dem nachfolgendem Inhalt:


Bitte aendern Sie im Quellcode folgende 4 Zeilen:

$db_name = "IhreDatenBank";
$db_passwd = "IhrDatenBankPasswort";
$bestaetigungsmail_adresse = "IhreMailAdresse";
$backup_name = "datenbank-beispieldomain";

Den Datenbanknamen und das Datenbankpasswort entnehmen Sie Ihrem KAS unter DATENBANK und setzen es in die
jeweiligen Felder "IhreDatenBank" und "IhrDatenBankPasswort".
Bei "IhreMailAdresse" setzen Sie bitte die E-Mail Adresse, an die Sie die Bestätigungsmail haben möchten, ein.

Achtung:
Legen Sie bitte zusätzlich für das Backup Verzeichnis einen Verzeichnisschutz über 
KAS -> Tools -> Verzeichnisschutz an! Somit schützen Sie Ihre Datenbanksicherungen vor unberechtigten Zugriffen.
4. Rufen Sie die URL http://www.ihre-adresse-im-netz.de/backup/db_backup.phpx auf. Das Backupskript wird gestartet,
legt eine Datenbanksicherung Ihrer MySQL-Datenbank an und kopiert diese als gepackte Datei mit dem Namen z.B. dumpDATUM.sql.gz in den Ordner „backup“.

Es ist normal, dass das DB-Backup kleiner ist als Ihnen die Datenbankgröße im PHPMyAdmin angezeigt wird.



*/

// PHP-Konfiguration optimieren
#######################################################################
#######################################################################
#######################################################################
// Warnung= Nicht jeder Hoster erlaubt eine derartige Maximierung!!!!!!
#######################################################################
#######################################################################
#######################################################################
@error_reporting(E_ALL ^ E_WARNING ^ E_DEPRECATED);
@ini_set("max_execution_time", 300);
@ini_set("memory_limit", "256M");
$home = $_SERVER[ 'DOCUMENT_ROOT' ];



######## einstellungen #############################################
// Verwenden Sie die exakte Bezeichnung der Datenbank aus dem kasserver unter DATENBANK
$db_name = "";
// Verwenden Sie das exakte Passwort Ihrer Datenbank aus dem kasserver unter DATENBANK
$db_passwd = "";
// Backup-Bezeichnung sollte keine Leerzeichen enthalten!
$backup_name = "";
// Der gewünsche Ordnername - relativ zum Abglageort des Sicherungsskriptes=
$ordner = "sql";
#####################################################################

// Wenn der totale Pfad notwendig ist ???
// $ordner = "/www/htdocs/w00XXXX/shop/001-backup/sql";


$downloadlink_erstellen = "ja";
$bestaetigungsmail_senden = "nein";

$bestaetigungsmail_adresse = "";

#######################################################################
################## Bitte nicht aendern !!!! ###########################
$bestaetigungsmail_betreff = "Datenbank von ---$backup_name--- wurde gesichert";

# Original war= $sql_file = "dump_" . $db_name . "_" . date('Ymd_Hi') . ".sql";
$ordner/$sql_file = $backup_name."--". $db_name . "_" . date('Ymd_Hi') . ".sql";

#######################################################################
################## AB HIER BITTE NICHTS MEHR ÄNDERN!!! ################

### daten ueberpruefen
if ( $db_name == "IhreDatenBank" or $db_passwd == "IhrDatenBankPasswort" or $backup_name == "datenbank-beispieldomain")
{
die("FEHLER: Sie m&uuml;ssen zun&auml;chst Ihre Datenbankdaten und / oder Ihre eigene Backup-Bezeichnung im Script eingeben! Bitte korrigieren");
}
if ( file_exists($ordner/$sql_file) or file_exists($ordner/$sql_file . ".gz") )
{
die("FEHLER: Das zu erstellende Dump existiert bereits!");
}

### dump erstellen
exec("mysqldump -u $db_name -p'$db_passwd' --quick --allow-keywords --add-drop-table --complete-insert --quote-names $db_name >$ordner/$sql_file");
exec("gzip $ordner/$sql_file");

### groesse der datei ermitteln
$datei = $sql_file . ".gz";
$size = filesize($datei);
$i = 0;
while ( $size > 1024 )
{
$i++;
$size = $size / 1024;
}
$fileSizeNames = array(" Bytes", " KiloBytes", " MegaBytes", " GigaBytes", " TerraBytes");
$size = round($size,2);
$size = str_replace(".", ",", $size);
$groesse = "$size $fileSizeNames[$i]";

### nachricht erstellen
$message = "Ihr Backup der Datenbank <b>" . $db_name . "</b> wurde durchgef&uuml;hrt.<br>";
$message .= "Die Gr&ouml;&szlig;e des erstellten Dumps betr&auml;gt <b>" . $groesse . "</b>.<br>";

if ($downloadlink_erstellen == "yes" or $downloadlink_erstellen == "ja" or $downloadlink_erstellen == "1")
{
$link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
$link = str_replace(basename(__FILE__),$datei,$link);
$message .= "Downloadlink: <a href=" . $link . ">" . $datei . "</a>";
}

## nachricht ausgeben
echo $message;

### mail versenden
if ($bestaetigungsmail_senden == "yes" or $bestaetigungsmail_senden == "ja" or $bestaetigungsmail_senden == "1")
{
if(!preg_match( '/^([a-zA-Z0-9])+([.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-]+)+/' , $bestaetigungsmail_adresse))
{
echo "<br>FEHLER: Mail konnte nicht versendet werden, da die Adresse ung&uuml;ltig ist!";
}
else
{
mail($bestaetigungsmail_adresse, $bestaetigungsmail_betreff,
$message,"From: backupscript@{$_SERVER['SERVER_NAME']}\r\n" . "Reply-To: backupscript@{$_SERVER['SERVER_NAME']}\r\n" . "Content-Type: text/html\r\n")
or die("FEHLER: Mail konnte wegen eines unbekannten Fehlers nicht versendet werden");
echo "<br>Best&auml;tigungsmail wurde erfolgreich versandt!";
}
}
?>

Last edited by better-work (10.04.2017 12:38:14)


Gruß Jörg

Offline

#2 10.04.2017 20:14:02

norhei
Developer

Re: Backup Skript (PHP-Syntax) leicht anpassen (MySQL Backup per Cronjob)

Jetzt mal so am Rande gefragt:
Hast Du Shell Zugriff auf den Server ?

Also ... so auf die schnelle , wenn ich das richtig verstehe ist das Hauptproblem das der Relative Pfad nicht funktioniert ?

Hast Du es schon mal mit vollständigen Pfaden probiert ?

Offline

#3 11.04.2017 08:14:40

better-work
Member

Re: Backup Skript (PHP-Syntax) leicht anpassen (MySQL Backup per Cronjob)

Hallo norhei,

der Shell Zugriff ist teilweise vorhanden, allerdings kann ich es nicht für jeden Kunden-Account einrichten.
Dies wird über ein GUI-Interface eingestellt, dann muss ich wieder zurück zum Kunden-Account, etc.
Dies würde bei manchem Kunden jeden Rahmen sprengen.

Das Skript als solches funktioniert einwandfrei.
Ich möchte jedoch das es sich oberhalb des Sicherungsverzeichnisses befindet.
In meinem Fall also=

Verzeichnis:
001-backup/sql
001-backup/webspace
001-backup/name.phpx (Skriptname oberhalb von= 001-backup/sql

Die Struktur ist immer=

(Name der Website oder eigene Bezeichnung)/001-backup/"sql-backup-skript"(=name.phpx)/sql
(Name der Website oder eigene Bezeichnung)/001-backup/"webspace-backup-skript"(=name.phpx)/webspace

Bisher ist es jedoch so das es sich im selben Verzeichnis befindet, wie der Backup Ordner, in meinem Fall also:

(Name der Website oder eigene Bezeichnung)/001-backup/sql/sql-backup-skript.phpx

Dies macht jedoch eine automatische Bereinigung nach Datum der Erstellung unmöglich.
Und einen Filter pro Namen des Backup-Skriptes wieder zu aufwendig.

Thema vollständige Pfade=

Offenbar wird das im webspace Backup automatisch eingefügt=

// PEAR-Klasse einbinden und Archiv erstellen
$pfad = preg_replace('/(\/www\/htdocs\/\w+\/).*/', '$1', realpath(__FILE__));
include "Archive/Tar.php";
// Der Domain- oder Backupname kann ergänzt werden
$archivname = $backup_name."--".preg_replace('/.+\/(.+)\/$/', '$1', $pfad).date('---Y-m-d---His').".tar.gz";  

Dies müsste dann ja auch in dem SQL Backup Skript ersetzt werden...

Last edited by better-work (11.04.2017 08:26:22)


Gruß Jörg

Offline

#4 11.04.2017 23:41:23

bernd
Developer

Re: Backup Skript (PHP-Syntax) leicht anpassen (MySQL Backup per Cronjob)

Ich probier mal ob ichs richtig verstanden hab (alte Männer und denken und so ... big_smile )

Dein Script soll in /001-backup/ liegen und das dump-file soll in  /001-backup/sql/ gespeichert werden?

Dann müßte nur die Zeile

[== PHP ==]
# Original war= $sql_file = "dump_" . $db_name . "_" . date('Ymd_Hi') . ".sql";
$ordner/$sql_file = $backup_name."--". $db_name . "_" . date('Ymd_Hi') . ".sql"

so aussehen:

[== PHP ==]
$sql_file = $ordner."/".$backup_name."--". $db_name . "_" . date('Ymd_Hi') . ".sql"

Und das ganze andere Geraffel bei dem du irgendwas mit $ordner/... versucht hast, wieder rückgängig machen.


2 x ROT13 hält besser ...

Offline

#5 12.04.2017 16:23:16

better-work
Member

Re: Backup Skript (PHP-Syntax) leicht anpassen (MySQL Backup per Cronjob)

Hallo Bernd,

vielen Dank für Deine Hilfe, Du hast es genau richtig erkannt.

Dein Script soll in /001-backup/ liegen und das dump-file soll in  /001-backup/sql/ gespeichert werden?

Ich werde es über Ostern mal testen.
Deine Änderung erscheint mir aber auch logisch, soweit meine bescheidenen Kenntnisse dafür ausreichen.

-----------------------------------------------------------

alte Männer und denken und so ...

... willkommen im Club, werde demnächst auch 50...  devil  devil  devil


Gruß Jörg

Offline

#6 08.06.2017 10:55:52

better-work
Member

Re: Backup Skript (PHP-Syntax) leicht anpassen (MySQL Backup per Cronjob)

@bernd

erst einmal vielen Dank für Deine Hilfe.
Da das Skript allerdings auch prüft, ob die Sicherung erfolgreich war, ggf eine Mail verschickt und einen Downloadlink erzeugt, falls gewünscht, müssten dann auch alle anderen Verweise auf den entsprechenden Unterordner zeigen.
Daher scheitert es bei mir an der Anpasssung, und ich sehe da leider auch nicht durch, Sorry.

--------

@All

Ich hätte gerne ein Sicherungsprogramm mit mehr "Intelligenz"...
Da die Verzeichnisstruktur immer die Gleiche ist, wäre es doch einfacher wenn das SQL-Sicherungsskript die Daten direkt aus der oberhalb liegenden (wbce) config.php ausliest.
Das reduziert schon einmal mögliche Fehler.
Der Pfad hierfür wäre dann ../config.php

[== PHP ==]
define('DB_NAME', 'XXXXX');
define('DB_PASSWORD', 'XXXXXXXXXXXXXXX');

001-backup/sql
001-backup/webspace
001-backup/dbsicherung.phpx
001-backup/ftpsicherung.phpx

Die beiden Verzeichnisse=

001-backup/sql
001-backup/webspace

sollten ausschließlich die Sicherungsdateien enthalten!
Dies hätte auch den Vorteil das eine Bereinigung der Ordner möglich wäre, als Beispiel maximal 30 Sicherungsdateien, ältere Sicherungen werden gelöscht!

Selbstverständlich ist das Verzeichnis 001-backup per .htaccess und .htpasswd geschützt!

Wer kann helfen, selbstverständlich gegen entsprechende Aufwandsentschädigung...


Gruß Jörg

Offline

Liked by:

rollo49

#7 25.07.2017 11:00:21

webbird
Developer

Re: Backup Skript (PHP-Syntax) leicht anpassen (MySQL Backup per Cronjob)

SyncData funktioniert wohl nicht?


Some people just need a high-five. In the face. With a chair.

Offline

#8 25.07.2017 11:26:49

florian
Projektmanagement und Support WBCE CMS

Re: Backup Skript (PHP-Syntax) leicht anpassen (MySQL Backup per Cronjob)

Ich glaube, es gab bei SyncData leider eine Inkompatibilität, oder bringe ich gerade etwas durcheinander?
https://forum.wbce.org/viewtopic.php?pid=8921#p8921

Offline

#9 25.07.2017 12:38:48

webbird
Developer

Re: Backup Skript (PHP-Syntax) leicht anpassen (MySQL Backup per Cronjob)

Ahja. Schade.


Some people just need a high-five. In the face. With a chair.

Offline

#10 25.07.2017 13:10:28

better-work
Member

Re: Backup Skript (PHP-Syntax) leicht anpassen (MySQL Backup per Cronjob)

Soo, da es ja offenbar auch Bedarf gibt, kann das von Norhei angepasste Skript heruntergeladen werden.
Bei technischen Rückfragen kann ich jedoch nicht weiterhelfen, da ich davon wenig Ahnung habe.

Die Zip-Datei enthält auch bereits die Dateien und die Verzeichnisstruktur.
001-backup/sql
001-backup/webspace
001-backup/dbsicherung.phpx
001-backup/ftpsicherung.phpx

https://drive.google.com/file/d/0B7M2Ms … sp=sharing

GANZ WICHTIG:
Das Verzeichnis 001-backup muss per .htaccess vor unberechtigtem Zugriff geschützt werden!!!!!!!
Die meisten Provider bieten hierfür ein Tool an, mit dem Benutzername und Passwort generiert werden können.

Weiterhin erlaubt auch nicht jeder Provider die Anpassung der nachfolgenden Werte=

[== PHP ==]
@ini_set("max_execution_time", 300);
@ini_set("memory_limit", "256M");

Ggf. also besser nachfragen!!!


Gruß Jörg

Offline

Liked by:

florian

#11 25.07.2017 20:28:39

evaki
Banned

Re: Backup Skript (PHP-Syntax) leicht anpassen (MySQL Backup per Cronjob)

Oder vorher und anschließend auslesen -falls sich der Provider den Arm gebrochen hat.
echo ini_get("max_execution_time");
echo ini_get("memory_limit");
MfG. Evaki

Offline

Board footer

Powered by FluxBB

up