Register for your free account! | Forgot your password?

You last visited: Today at 10:14

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

Advertisement



[RELEASE]Backup Shell

Discussion on [RELEASE]Backup Shell within the Metin2 PServer Guides & Strategies forum part of the Metin2 Private Server category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Apr 2011
Posts: 587
Received Thanks: 672
[RELEASE]Backup Shell

Hi,

Mit der Shell im Anhang, ist es möglich, regelmäßig Backups der Datenbank/enzu machen.
Diese werden dann auf euren Backup Server via FTP geladen.
Das ganze basiert auf Bash, das heißt, ihr braucht das Package "Bash".
Zum installieren von Bash gebt ihr folgendes ein:

PHP Code:
pkg_add -r bash
rehash 
Sollte der Befehl oben nicht klappen, installiert sie über die Ports.

PHP Code:
cd /usr/ports/shells/bash && make install clean && rehash 
Vorraussetzung dafür ist, dass die Ports bereits installiert sind.

So, nun ist Bash installiert.
Nun passt ihr alle Einstellunge an, und führt die Shell mit "bash backup.sh" aus, NICHT mit "sh backup.sh".

Die Shell ist auf meinem Pc so halb am vergammeln gewesen, deswegen publiziere ich sie.
Sollte jemand Fehler entdecken, bitte ich sie zu posten, habe sie eben getestet und bis jetzt funktioniert sie noch, sofern man nicht start rumbastelt.

Sämtliche Vorgänge werden geloggt und in die "backup.log" geschrieben.
Falls Fehler auftauchen, wird dies in der "backup.log" erwähnt - nährere Informationen zu den gewisse n Fehlern stehen in der "backup.err" - die beiden Dateien sind im gleichen Verzeichnis wie die Shell.

Es gibt eine Mail Funktion, bedeutet, wenn SEND_MAIL auf 1 gestellt ist, werden euch alle nötigen Informationen via E-Mail zugesendet.

Achja, die Backups werden sicherheitshalber nochmals auf dem Root selbst gelagert, man kann aber einstellen, dass diese nach x Tagen automatisch gelöscht werden.
Wenn DELETE_OLD_BACKUPS auf 0 gestellt ist, werden keine alten Backups gelöscht.
Außerdem ist NUR der Root-Benutzer fähig, in die Backup Directory zu switchen, heißt, kein anderer hat zugriff auf die Backups.
Sollte jemand versuchen, die Backups von eurem FTP zu ziehen, wird es ihm nicht gelingen, dank den CHMOD Rechten.

PHP Code:
#!/bin/bash
# MySQL Backup Shell
#--
# by aiiR7
#--

#-- General Settings
NOW="$(date +"%Y%m%d")"                 # Date im YYYYMMDD Format
HOST="$(hostname)"                         # Hostname
DUMP_OPTS="-Q --single-transaction"             # MySQL Dump Parameter
TAR_OPTS="-cvzf"                         # Tar Parameter


#-- MySQL Settings
MyUSER="root"                             # MYSQL Benutzer.
MyPASS="passwort"                         # MYSQL Passwort.
MyHOST="localhost"                             # MYSQL Host.

#-- FTP Settings
FTPUSER="ftpuser"                          # FTP Benutzer.
FTPPASS="ftppass"                         # FTP Password.
FTPHOST="ipoderhostname"                 # FTP IP/Host.
FTPDEST="verzeichnis"                       # FTP Verzeichnis, wo die Backups hinterlegt werden sollen.

#-- Log & Error File
LOG="backup.log"                         # Jeder Vorgang wird geloggt, diese kann man in dieser Datei finden.
ERR="backup.err"                         # Sämtliche Fehler werden in dieser Datei hinterlegt.


#-- Bin Pfad - ändere diese nur, wenn sie nicht via "which" erkannt werden.
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
GREP="$(which grep)"
CHOWN="$(which chown)"
CHMOD="$(which chmod)"
TAR="$(which tar)"
MAIL="$(which mail)"
FIND="$(which find)"
DF="$(which df)"

# ----------
# Trage hier ein, welche Datenbanken gesichert werden sollen. Wenn die untere Option aktiviert ist, muss diese auskommentiert werden.
DBS="account"
# Der unten stehende und auskommentierte Befehl kann aktiviert werden, wenn alle Datenbanken gesichert werden sollen. 
# Dazu aber die obere Option "DBS" auskommentieren.
#DBS="$($MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -Bse 'show databases')"
# Trage hier die Datenbanken ein, die NICHT gesichert werden sollen (Diese Option wird nur dann aktiviert, wenn der obere Befehl aktiviert ist.
#DNB="common information_schema mysql performance_schema test"
# ----------

# In diesem Ordner werden alle Backups hinterlegt.
DEST="/backup"




# Wenn "SEND_MAIL" auf "1" gestellt ist, werden dir sämtliche Informationen via E-Mail zugesendet.
SEND_EMAIL=1
NOTIFY_EMAIL
=""
NOTIFY_SUBJECT="MySQL Backup Notification"

#-- Backups Löschen
# Wenn "DELETE_OLD_BACKUPS" auf 1 gestellt ist, werden Backups, die älter als "DELETE_BACKUPS_OLDER_THAN_DAYS=x" gelöscht.
DELETE_OLD_BACKUPS=1
# Die Angabe wird in Tagen berechnet. Momentan werden die Backups nach 10 Tagen gelöscht, diese Angabe kann auf Wunsch geändert werden.
DELETE_BACKUPS_OLDER_THAN_DAYS=10


#-- E-Mail Funktion
function gen_email {
  
DO_SEND=$1
  TMP_FILE
=$2
  NEW_LINE
=$3
  LINE
=$4
  
if [ $DO_SEND -eq 1 ]; then
    
if [ $NEW_LINE -eq 1 ]; then
      
echo "$LINE>> $TMP_FILE
    
else
      echo -
"$LINE>> $TMP_FILE
    fi
  fi
}

#-- Hier werden die Backups hinterlegt
if [ ! -d $DEST ]; then 
  
echo "$(date) :: Das '$DEST' Verzeichnis existiert nicht." >> $LOG
  
echo "$(date) :: Erstelle '$DEST' Verzeichnis ..." >> $LOG
  mkdir 
-p $DEST
  
echo "$(date) :: Das '$DEST' Verzeichnis wurde erstellt." >> $LOG
  
# Nur der Root Benutzer ist berechtigt, auf die Backups zuzugreifen.
  
echo "$(date) :: Verteile die Besitzer und Chmod Rechte für das Verzeichnis '$DEST' ..." >> $LOG
  $CHOWN 0
:0 $DEST
  $CHMOD 0750 $DEST
  
echo "$(date) :: Die nötigen Rechte für das Verzeichnis '$DEST' wurden vergeben." >> $LOG
fi

#-- Backup Verzeichnis wird erstellt (bezieht sich auf die einzelnen Backups).
MBD="$DEST/$NOW"

[ ! -d $MBD ] && mkdir -p $MBD || :

 
$CHOWN 0:0 $MBD
 $CHMOD 0750 $MBD


#-- Temp Message Datei
TMP_MSG_FILE="/tmp/$RANDOM.msg"
if [ $SEND_EMAIL -eq 1 --"$TMP_MSG_FILE]; then
  rm 
-"$TMP_MSG_FILE"
fi

set 
-o pipefail

#-- Beginne mit Backup der zu sicherten Datenbanken.
echo "$(date) :: Beginne mit der Sicherung der Datenbanken ..." >> $LOG
for db in $DBS
do
    
skipdb=-1
    
if [ "$DNB!= "" ];
    
then
    
for i in $DNB
    
do
        [ 
"$db== "$i] && skipdb=|| :
    
done
    fi
    
if [ "$skipdb== "-1" ] ; then
    BACKUP
="mysql_backup.`date +%d.%m.%Y-%H:%M:%S`.tgz"
        
$MYSQLDUMP $DUMP_OPTS -u $MyUSER -h $MyHOST -p$MyPASS --log-error=$ERR $db $MBD/$db.sql
        RESULT
=$?
        if [ 
$RESULT != ]; then
        rm $MBD
/*.sql
      NOTIFY_MESSAGE="$(date) :: Error: Fehler '$RESULT' ist aufgetreten."    
      echo $NOTIFY_MESSAGE >> $LOG
    else
      NOTIFY_MESSAGE="$(date) :: Die Datenbanken '$db' wurden erfolgreich gedumpt und im '$MBD' Verzeichnis hinterlegt."
      echo $NOTIFY_MESSAGE >> $LOG 
    fi    
        gen_email $SEND_EMAIL $TMP_MSG_FILE 1 "$NOTIFY_MESSAGE"
        echo $NOTIFY_MESSAGE
    fi
done

$TAR $TAR_OPTS $MBD/$BACKUP $MBD/*.sql

  if [ $? -ne 0 ] ; then  
     echo "$(date) :: Backup konnte nicht archiviert werden." >> $LOG
  else
     echo "$(date) :: Backup wurde erfolgreich archiviert." >> $LOG
     rm $MBD/*.sql
     echo "$(date) :: Bereite Backup zum transferieren vor ..." >> $LOG
     echo "$(date) :: Verbinde mit Backup Server ..." >> $LOG
  fi
  


#-- Empty line in email and stdout
gen_email $SEND_EMAIL $TMP_MSG_FILE 1 ""
echo ""

#-- Alte Backups löschen
if [ $DELETE_OLD_BACKUPS -eq 1 ]; then
  find "$DEST" -maxdepth 1 -mtime +$DELETE_BACKUPS_OLDER_THAN_DAYS -type d | $GREP -v "^$DEST$" | while read DIR; do
    gen_email $SEND_EMAIL $TMP_MSG_FILE 0 "Deleting: '$DIR': "
    echo -n "Deleting: $DIR: "
    echo "$(date) :: Bereite das alte Backupverzeichnis '$DIR' zum löschen vor, da es älter als '$DELETE_BACKUPS_OLDER_THAN_DAYS' ist." >> $LOG
    rm -rf "$DIR" 
    RESULT=$?
    if [ $RESULT != 0 ]; then
      NOTIFY_MESSAGE="$(date) :: Error : Das alte Backupverzeichnis '$DIR' konnte nicht gelöscht werden."
      echo $NOTIFY_MESSAGE >> $LOG
      echo $NOTIFY_MESSAGE >> $ERR
    else
      NOTIFY_MESSAGE="$(date) :: Das alte Backupverzeichnis '$DIR' wurde erfolgreich gelöscht."
      echo $NOTIFY_MESSAGE >> $LOG
    fi
    gen_email $SEND_EMAIL $TMP_MSG_FILE 1 "$NOTIFY_MESSAGE"
    echo "$NOTIFY_MESSAGE"
  done
fi



#-- Empty line in email and stdout
gen_email $SEND_EMAIL $TMP_MSG_FILE 1 ""
echo ""



#-- Festplatten Statistik wird via E-Mail übermittelt
if [ $SEND_EMAIL -eq 1 ]; then
  $DF -h "$DEST" >> "$TMP_MSG_FILE"  
fi
$DF -h "$DEST"



#-- Versenden der E-Mail in welcher alle Informationen vorzufinden sind.
if [ $SEND_EMAIL -eq 1 ]; then
  $MAIL -s "$NOTIFY_SUBJECT" "$NOTIFY_EMAIL" < "$TMP_MSG_FILE"
  rm -f "$TMP_MSG_FILE"
fi


#-- Hier verbindet sich der Server mit dem Backup Server und hinterlegt dort die Backups, sofern die letzten Vorgänge erfolgreich waren.
# Sollte ein Fehler während der Übertragung auftauchen, wird dieser in der $ERR (backup.err) hinterlegt.

ftp -inv $FTPHOST << EOF 2> $ERR
user $FTPUSER $FTPPASS
bin
prompt off
$CHMOD 0600 $FTPDEST
cd $FTPDEST
mkdir $NOW
cd $NOW
lcd $MBD
mput $BACKUP
$CHMOD 0600 $BACKUP
EOF

  if $GREP "ftp" $ERR 
   then
    echo "$(date) :: Error : Es ist ein Fehler während der FTP Übertragung aufgetreten, siehe mehr in '$ERR'" >> $LOG
  else
    echo "$(date) :: Backup wurde soeben auf den Backup Server transferiert." >> $LOG
    echo "$(date) :: Das aktuelle Backup Verzeichnis lautet '$NOW'." >> $LOG
    echo "$(date) :: Backup Erfolgreich Abgeschlossen." >> $LOG
    echo "" >> $LOG
    echo "----------------------" >> $LOG
    echo "" >> $LOG
  fi 
Die letzten Zeilen werden nur Orange dargestellt, weil der PHP-Code /* -- CODE -- */ nicht ausführt.
Ladet sie bitte aus dem Anhang, ich zeige den Code nur, damit ihr sichergehen könnt, dass es sich nicht um einen Virus o.a. handelt!
Attached Files
File Type: rar backup.rar (2.7 KB, 156 views)
'aiiR7 is offline  
Thanks
34 Users
Old 06/17/2011, 20:46   #2
 
elite*gold: 0
Join Date: Jan 2011
Posts: 1,484
Received Thanks: 3,151
Gut gemacht
Daroolein is offline  
Thanks
1 User
Old 06/17/2011, 20:47   #3
 
~LuckyStrike~'s Avatar
 
elite*gold: 0
Join Date: Jul 2008
Posts: 1,812
Received Thanks: 1,977
n1 !
~LuckyStrike~ is offline  
Thanks
1 User
Old 06/17/2011, 20:49   #4
 
elite*gold: 0
Join Date: Apr 2011
Posts: 587
Received Thanks: 672
Auf Wunsch kann ich noch Funktionen hinzufügen,

btw - es gibt eine Mail Funktion, wenn SEND_EMAIL auf 1 gestellt ist, werden sämtliche E-Mail an die hinterlegte E-Mail Adresse gesendet.
Wenn auf 0, dann nicht.
'aiiR7 is offline  
Thanks
1 User
Old 06/17/2011, 20:52   #5
 
~LuckyStrike~'s Avatar
 
elite*gold: 0
Join Date: Jul 2008
Posts: 1,812
Received Thanks: 1,977
Quote:
Error: FTP Unable to get ftp://ftp.freebsd.org/pub/FreeBSD/po...test/bash.tbz: File unavailable (e.g., file not found, no access)
pkg_add: unable to fetch 'ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-7.1-release/Latest/bash.tbz' by URL
Kann Bash nicht installen .. verbindung ist logischerweise da..
~LuckyStrike~ is offline  
Old 06/17/2011, 20:55   #6
 
elite*gold: 0
Join Date: Apr 2011
Posts: 587
Received Thanks: 672
Quote:
Originally Posted by ~LuckyStrike~ View Post
Kann Bash nicht installen .. verbindung ist logischerweise da..
PHP Code:
cd /usr/ports/shells/bash && make install clean && rehash 
'aiiR7 is offline  
Thanks
1 User
Old 06/17/2011, 20:58   #7
 
~LuckyStrike~'s Avatar
 
elite*gold: 0
Join Date: Jul 2008
Posts: 1,812
Received Thanks: 1,977
Quote:
hellraiser-nw# sh backup.sh
function: not found
[: -eq: unexpected operator
backup.sh: 82: Syntax error: "}" unexpected
Next fail beim ausführen :P
~LuckyStrike~ is offline  
Old 06/17/2011, 20:59   #8
 
.Risan.'s Avatar
 
elite*gold: 30
Join Date: Jul 2010
Posts: 1,627
Received Thanks: 1,450
Nice, bin gerade nur drübergeflogen.
Ich muss es umschreiben und anpasse, aber anonsten nice.
.Risan. is offline  
Old 06/17/2011, 20:59   #9
 
elite*gold: 0
Join Date: Apr 2011
Posts: 587
Received Thanks: 672
Quote:
Originally Posted by ~LuckyStrike~ View Post
Next fail beim ausführen :P
Richtig lesen!

PHP Code:
bash backup.sh 
NICHT(!)
PHP Code:
sh backup.sh 
'aiiR7 is offline  
Thanks
1 User
Old 06/17/2011, 21:00   #10
 
~LuckyStrike~'s Avatar
 
elite*gold: 0
Join Date: Jul 2008
Posts: 1,812
Received Thanks: 1,977
Quote:
Originally Posted by 'aiiR7 View Post
Richtig lesen!

PHP Code:
bash backup.sh 
NICHT(!)
PHP Code:
sh backup.sh 
Ouh Holy **** :P Tschuldigung naja trotzdem danke
~LuckyStrike~ is offline  
Old 06/17/2011, 21:02   #11
 
elite*gold: 0
Join Date: Jan 2011
Posts: 1,484
Received Thanks: 3,151
Maybe is Ports outdated?
PHP Code:
portsnap fetch update 
Wenn du Ports nicht mit portsnap installiert hast:
PHP Code:
rm -/usr/ports && portsnap fetch extract && portsnap fetch update 
or per pkg

PHP Code:
pkg_add -r bash 
Daroolein is offline  
Old 06/17/2011, 21:10   #12
 
elite*gold: 120
Join Date: Jul 2008
Posts: 2,403
Received Thanks: 1,594
Nice..
THX!
anil the alpacino is offline  
Thanks
1 User
Old 06/17/2011, 21:17   #13
 
elite*gold: 0
Join Date: Jan 2011
Posts: 1,484
Received Thanks: 3,151
PHP Code:
daroo# pkg_delete -x bash
daroo# pkg_add -r bash
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.2-release/Latest/bash.tbz... Done.
daroo
geht doch.
Daroolein is offline  
Old 06/17/2011, 21:36   #14
 
elite*gold: 0
Join Date: Jul 2009
Posts: 1,702
Received Thanks: 1,468
Sehr schöner Release
Kind Regards,
Aliyana
.Awesoome is offline  
Thanks
1 User
Old 06/17/2011, 21:38   #15



 
CHXMVN's Avatar
 
elite*gold: 20
The Black Market: 354/0/0
Join Date: Mar 2009
Posts: 4,526
Received Thanks: 4,618
Ist gut zu gebrauchen, danke dir.

Gruß,
CHMarvin.
CHXMVN is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
[Release/Guide] Bot GUI Shell
08/18/2011 - Mabinogi Hacks, Bots, Cheats & Exploits - 16 Replies
http://img233.imageshack.us/img233/383/mabinogibot shellv10.png Mabinogi Bot Shell v1.0 Hey all, I made this a while ago and never got around to releasing it but anyways; it is just a basic GUI that you can add your own code too, or you can always examine the functions as there are comments on nearly every line. #include <GuiConstantsEx.au3> ;This include is required for basic GUI functions to be accessible. #include <EditConstants.au3> ;This include is necessary for the modification and...
[Shell/Bash]MySQL BackUp Script
02/20/2011 - Web Development - 8 Replies
Hallo, ich möchte mir ein BackUp Script für MySQL schreiben. Das Packen des MySQL Ordners habe ich schon hinbekommen, leider habe ich da 2 Probleme. Dies hier Funktioniert, aber ich möchte ja halt noch die MySQL Tabelle leeren und somit zuerst eine Verbindung zum MySQL Server aufbauen. #!/bin/sh cd /var/db tar -czf "/var/db/BackUp/SQL_"`date +"%d.%m.%Y"`".tar.gz" "/var/db/mysql"
[Shell Beta Release]AIO V.003
11/04/2009 - 12Sky2 Hacks, Bots, Cheats & Exploits - 8 Replies
AIO(Shell)Beta Links: Private Online Game Community <-----My site, i can now post it here, because i have a link back :) ShareCash.Org <----- Sign up, you will make 30-60 cents everytime somebody downloads your file :P Type /help ;) remeber this is a beta SHell, meaning the hacks arent working, only for command testing etc,



All times are GMT +1. The time now is 10:14.


Powered by vBulletin®
Copyright ©2000 - 2025, 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 ©2025 elitepvpers All Rights Reserved.