123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- #!/bin/bash
- #/###################################################################\
- #| Make backup of castanedo.es server compressed with 7Z and |
- #| encrypted with $pass7z password. |
- #| Help: |
- #| -$mysqluser: admin user for MySQL. |
- #| -$mysqlpass: admin password form MySQL (Caution: check read |
- #| permissions for this file, password save in plain text) |
- #| -$pass7z: password used for encrypting 7Z archive. |
- #| -$backupDir: directory where 7Z is saved, normally is a folder |
- #| served for a web server (with BasicAuth for more security). |
- #| -$backupName: 7Z archive name. Prefix-Date-6 alphanumeric |
- #| random digits.7z |
- #| -$deleteDays: remove 7Z archives older than this days. |
- #| |
- #| Guzmán Castanedo (guzman@castanedo.es) |
- #| March 2017 |
- #| Licence: GPL v3.0 -> https:
- #\###################################################################/
- #Check things (root, 7z, mysql, ...)
- startTime=$(date +"%s")
- if [ $(whoami) != "root" ]; then
- printf "ERROR:\tTienes que ser root :O\n"
- exit 1
- fi
- if [ ! -x /usr/bin/7z ]; then
- printf "ERROR:\t7z Not Installed :O\n"
- exit 1
- fi
- if [ ! -x /usr/bin/mysql ]; then
- printf "ERROR:\tMySQL Not Installed :O\n"
- exit 1
- fi
- if [ ! -x /usr/bin/mysqldump ]; then
- printf "ERROR:\tMySQL Not Installed :O\n"
- exit 1
- fi
- #Data
- mysqluser="root"
- mysqlpass="mysqlpasswd"
- pass7z="7zencryptionpasswd"
- backupDir=/usr/share/nginx/backup
- backupName=backup-castanedo.es-$(date +"%Y-%m-%d")-$(cat /dev/urandom | tr -dc 'a-z0-9' | fold -w 6 | head -n 1).7z
- backupOutput=$backupDir/$backupName
- deleteDays="+15"
- #Destination file
- printf "Archivo Backup:\t%s\n" $backupOutput
- #Copy webpages code (except backup and main/public)
- printf "Comprimiendo:\t/usr/share/nginx\n"
- #cd /usr/share/nginx
- tempfile=$(mktemp -t exclude-XXX)
- echo "nginx/backup" > $tempfile
- echo "nginx/main/public" >> $tempfile
- 7z a -t7z -mx=9 -p$pass7z -mhe $backupOutput /usr/share/nginx -x@$tempfile > /dev/null
- if [ $? != 0 ];then
- printf "WARNING:\tError copiando paginas web (Ejecucion continua).\n"
- fi
- rm $tempfile
- #Copy MySQL databases (mysqldump)
- lista=$(mysql -u $mysqluser -p$mysqlpass -e "show DATABASES;")
- #Parse databases expect information_schema, mysql & performance_schema
- for database in $lista; do
- valid=true
- for excep in Database information_schema mysql performance_schema; do
- if [ $database = $excep ]; then
- valid=false
- break
- fi
- done
- if [ $valid = true ]; then
- printf "Comprimiendo MySQL database:\t%s\n" $database.sql
- mysqldump -u $mysqluser -p$mysqlpass $database | 7z a -t7z -mx=9 -p$pass7z -mhe $backupOutput -simysql/$database.sql > /dev/null
- if [ $? != 0 ];then
- printf "WARNING:\tError copiando database (%s) (Ejecucion continua).\n" $database
- fi
- fi
- done
- #Copy nginx configuration (sites-available)
- printf "Comprimiendo:\t/etc/nginx/sites-available\n"
- 7z a -t7z -mx=9 -p$pass7z -mhe $backupOutput /etc/nginx/sites-available > /dev/null
- if [ $? != 0 ];then
- printf "WARNING:\tError copiando paginas web (Ejecucion continua).\n"
- fi
- #Copy Email (this could be heavy in the future)
- printf "Comprimiendo:\t%s\n" /var/mail
- 7z a -t7z -mx=9 -p$pass7z -mhe $backupOutput /var/mail > /dev/null
- if [ $? != 0 ];then
- printf "WARNING:\tError copiando emails (Ejecucion continua).\n"
- fi
- #Copy Certificates (LetsEncrypt)
- printf "Comprimiendo:\t%s\n" /etc/letsencrypt
- 7z a -t7z -mx=9 -p$pass7z -mhe $backupOutput /etc/letsencrypt > /dev/null
- if [ $? != 0 ];then
- printf "WARNING:\tError copiando certificados (Ejecucion continua).\n"
- fi
- #Copy /home
- printf "Comprimiendo:\t%s\n" /home/
- 7z a -t7z -mx=9 -p$pass7z -mhe $backupOutput /home > /dev/null
- if [ $? != 0 ];then
- printf "WARNING:\tError copiando carpeta personal (Ejecucion continua).\n"
- fi
- #Permissions
- chown www-data:www-data $backupOutput
- chmod o= $backupOutput
- #Remove files older than 15 days
- printf "Eliminando backups antiguos (+15 dias)\n"
- find $backupDir -mindepth 1 -mtime $deleteDays -type f -delete
- if [ $? != 0 ];then
- printf "WARNING:\tError eliminando backup's antiguos (%s dias)\n" $deleteDays
- fi
- #End
- finalTime=$(date +"%s")
- echo "------------------------------------------------"
- printf "Backup completado con exito en %s segundos :)\n" $((finalTime-startTime))
- echo "------------------------------------------------"
|