WBCE CMS – Way Better Content Editing.
You are not logged in.
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üssen zunä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ührt.<br>";
$message .= "Die Größe des erstellten Dumps beträ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ü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ätigungsmail wurde erfolgreich versandt!";
}
}
?>
Last edited by better-work (10.04.2017 11:38:14)
Gruß Jörg
Offline
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
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 07:26:22)
Gruß Jörg
Offline
Ich probier mal ob ichs richtig verstanden hab (alte Männer und denken und so ... )
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.
... nein in Europa verwenden wir beim Programmieren nicht € statt $ ...
Offline
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...
Gruß Jörg
Offline
@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
rollo49
SyncData funktioniert wohl nicht?
Ich habe eine Amazon-Wishlist. Oder spende an das Projekt.
Ich kann, wenn ich will, aber wer will, dass ich muss, kann mich mal
Offline
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
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
Ahja. Schade.
Ich habe eine Amazon-Wishlist. Oder spende an das Projekt.
Ich kann, wenn ich will, aber wer will, dass ich muss, kann mich mal
Offline
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
florian
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