Created
January 6, 2022 19:09
-
-
Save gagan0123/654a1d7eb35a5e22ad3a845959ffc376 to your computer and use it in GitHub Desktop.
Backup Script
This file contains hidden or 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 | |
| set -e | |
| export BACKUP_SERVER="{IP of server}" | |
| export BACKUP_SERVER_NAME="{Any-name-you-want-to-give-it}" | |
| export BORG_REPO={borg-repo-path} | |
| export BACKUP_DIR={backup-directory-path} | |
| export BACKUP_USER="root" | |
| export EXCLUDE_DBS=("information_schema" "performance_schema") | |
| # Create backup Directory if it does not exists | |
| [ ! -d "$BACKUP_DIR" ] && mkdir -p "$BACKUP_DIR" && cp excludes.txt $BACKUP_DIR/excludes.txt | |
| # Create borg repo if it does not exists | |
| [ ! -d "$BORG_REPO" ] && borg init -e=none | |
| cd $BACKUP_DIR | |
| # Sync files | |
| echo "Backing up home directory" | |
| rsync --bwlimit=100000 -avz --exclude-from 'excludes.txt' --delete $BACKUP_USER@$BACKUP_SERVER:/home $BACKUP_DIR/ | |
| echo "Backing up etc directory" | |
| rsync --bwlimit=100000 -avz --exclude-from 'excludes.txt' --delete $BACKUP_USER@$BACKUP_SERVER:/etc $BACKUP_DIR/ | |
| echo "Backing up databases" | |
| # Fetch databases | |
| DATABASES=($(ssh root@${BACKUP_SERVER} 'mysql -e "show databases" -s --skip-column-names')) | |
| # Remove excluded DBs from Database array | |
| for target in "${EXCLUDE_DBS[@]}"; do | |
| for i in "${!DATABASES[@]}"; do | |
| if [[ ${DATABASES[i]} = $target ]]; then | |
| unset 'DATABASES[i]' | |
| fi | |
| done | |
| done | |
| # Create database directory if it does not exists | |
| [ ! -d "$BACKUP_DIR/databases" ] && mkdir -p "$BACKUP_DIR/databases" | |
| # Fetch all databases | |
| for DB in "${DATABASES[@]}" ; do | |
| echo "$DB..." | |
| ssh root@$BACKUP_SERVER "mysqldump --single-transaction --skip-lock-tables --quick $DB | gzip -c" | gunzip > databases/$DB.sql; | |
| done | |
| # Create borg snapshot | |
| export NOW="$(date +"%Y-%m-%d-%H%M%S")" | |
| echo "Creating Borg Backup $BACKUP_SERVER_NAME-$NOW" | |
| cd $BACKUP_DIR | |
| borg create --stats --list --filter=AME ::$BACKUP_SERVER_NAME-$NOW . |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment