Last active
December 12, 2015 09:18
-
-
Save marklindhout/4749944 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Author: Mark P. Lindhout | |
# Date: 2013-02-10 | |
# Remarks: | |
# This file can be used for backing up servers to an RSYNC server. It assumes: | |
# 1. The existence of the /var/mysqldumps/ and /var/installed-packages/ folders | |
# 2. An SSH key already exchanged with the $REMOTE_HOST | |
# 3. Existing folders on the $REMOTE_HOST for each daily, weekly and monthly backups. | |
# 4. The possibility to do mysql and mysqldump commands without needing a password. | |
# See: http://www.techiecorner.com/1619/how-to-setup-mysqldump-without-password-in-cronjob/ | |
# Set all kinds of neat variables | |
REMOTE_USER="username" # Username (no spaces) | |
REMOTE_HOST="server.domain.tld" # Server URL (no spaces) | |
REMOTE_HOME="/home/$REMOTE_USER/" # Path based on username | |
KEYFILE="/root/.ssh/${REMOTE_HOST}_rsa" # Keyfile is based on host | |
BACKUP_START=`date +%s` | |
# Provide general info on this backup | |
echo "" | |
echo "[Backup Overview]" | |
echo " - Backup start ....: `date -d @${BACKUP_START}`" | |
echo " - Server ..........: $REMOTE_HOST" | |
echo " - Username ........: $REMOTE_USER" | |
echo " - Key file ........: $KEYFILE" | |
# Decide what do do per backup type | |
echo "" | |
echo "[Backup Type]" | |
# Check that the type of backup is given, otherwise assume daily | |
if [ $1 ] | |
then | |
BACKUP_TYPE="$1" # from the command line: daily, weekly, monthly | |
else | |
BACKUP_TYPE="daily" | |
echo " - No backup type selected. Assuming 'daily'" | |
fi | |
# Handle command line arguments | |
case $BACKUP_TYPE in | |
daily) | |
echo " - Backup type .....: $BACKUP_TYPE" | |
;; | |
weekly) | |
echo " - Backup type .....: $BACKUP_TYPE" | |
;; | |
monthly) | |
echo " - Backup type .....: $BACKUP_TYPE" | |
;; | |
*) | |
echo " * [Error] Unknown backup type or wrong arguments provided." | |
exit | |
;; | |
esac | |
# and now GO! | |
# MYSQL | |
# ---------------------------------------------------------------------------- | |
echo "" | |
echo "[MySQL]" | |
MYSQL_DUMP_PATH="/var/mysqldumps" | |
DATABASES=`mysql --user=root -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|phpmyadmin|mysql)"` | |
for db in $DATABASES; | |
do | |
mysqldump --force --opt --user=root --databases $db > "$MYSQL_DUMP_PATH/$db.sql" | |
echo " - Exporting: $MYSQL_DUMP_PATH/$db.sql" | |
done | |
# PACKAGES | |
# ---------------------------------------------------------------------------- | |
echo "" | |
echo "[Packages]" | |
DPKG_DUMP_PATH="/var/installed-packages/installed-packages.txt" | |
dpkg --get-selections > $DPKG_DUMP_PATH | |
echo " - Installed packages list exported to: $DPKG_DUMP_PATH" | |
# RSYNC | |
# ---------------------------------------------------------------------------- | |
# First we build the complete path from above variables and the local hostname | |
REMOTE_PATH="${REMOTE_HOME}`hostname`-${BACKUP_TYPE}" | |
echo "" | |
echo "[Rsync]" | |
echo " - Path for backups : $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH" | |
echo " - Keyfile used ....: $KEYFILE" | |
echo " - Remote path .....: $REMOTE_PATH" | |
# Define the paths we want to backup | |
# Loop through them and sync | |
for p in "/var" "/etc" "/usr" "/home"; | |
do | |
rsync -a -e "ssh -i $KEYFILE" ${p} ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH} | |
echo " - Sync done .......: $p" | |
done | |
function show_duration () { | |
num=$1 | |
min=0 | |
hour=0 | |
day=0 | |
if((num>59));then | |
((sec=num%60)) | |
((num=num/60)) | |
if((num>59));then | |
((min=num%60)) | |
((num=num/60)) | |
if((num>23));then | |
((hour=num%24)) | |
else | |
((hour=num)) | |
fi | |
else | |
((min=num)) | |
fi | |
else | |
((sec=num)) | |
fi | |
echo "${hour}:${min}:${sec}" | |
} | |
# Info about duration | |
echo "" | |
echo "[Backup Duration]" | |
BACKUP_END=`date +%s` | |
BACKUP_DURATION=`expr $BACKUP_END - $BACKUP_START` | |
echo " - Backup start ....: `date -d @${BACKUP_START}`" | |
echo " - Backup end ......: `date -d @${BACKUP_START}`" | |
echo " - Backup duration .: $(show_duration $BACKUP_DURATION)" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment