Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- ###
- # Backup Script
- ###
- # Toggle debug mode for CLI output - "YES" or "NO"
- DEBUG="YES"
- # Command locations
- MYSQL="$(which mysql)"
- MYSQLDUMP="$(which mysqldump)"
- RCLONE="$(which rclone)"
- TAR="$(which tar)"
- GZIP="$(which gzip)"
- MKDIR="$(which mkdir)"
- RM="$(which rm)"
- DATE=`$(which date) +%Y%m%d`
- # Check if date is correctly calculated
- if [ "$DATE" == "" ]; then
- if [ "$DEBUG" == "YES" ]; then
- echo "Unable to calculate the date";
- fi
- exit 1
- fi
- # Backup directory - where .tar.gz of WWW_DIR is stored temporarily
- BACKUP_DIR="/root/backup_data"
- # Domain name for backup - used on backup archive filenames
- BACKUP_DOMAIN_NAME="domain.tld"
- # Amazon S3 settings
- AWS_S3_BUCKET_WWW=""
- AWS_S3_BUCKET_CONTENT=""
- # Paths (exclude trailing slash)
- WWW_DIR="/path/to/www"
- CONTENT_DIR="/path/to/content"
- # MySQL settings
- MYSQL_HOST=""
- MYSQL_USER=""
- MYSQL_PASS=""
- MYSQL_DATABASE=""
- # Rclone options
- RCLONE_CONFIG_PATH="/root/.config/rclone/rclone.conf"
- RCLONE_OPTIONS="--config $RCLONE_CONFIG_PATH" #RCLONE_OPTIONS="--dry-run --config $RCLONE_CONFIG_PATH"
- RCLONE_REMOTE_NAME="remote"
- ###
- # Start the script
- ###
- # Make sure all required applications are installed
- if [ "$MYSQLDUMP" == "" ] || [ "$RCLONE" == "" ] || [ "$TAR" == "" ] || [ "$GZIP" == "" ] || [ "$RM" == "" ] || [ "$MKDIR" == "" ]; then
- if [ "$DEBUG" == "YES" ]; then
- echo "At least one of the required applications does not exist:"
- echo " mysqldump: $MYSQLDUMP"
- echo " rclone: $RCLONE"
- echo " tar: $TAR"
- echo " gzip: $GZIP"
- echo " mkdir: $MKDIR"
- echo " rm: $RM"
- fi
- exit 1
- fi
- # Script introduction
- if [ "$DEBUG" == "YES" ]; then
- echo "Starting $BACKUP_DOMAIN_NAME backup script...";
- echo " date: $DATE"
- echo " rclone remote: $RCLONE_REMOTE_NAME"
- echo " www path: $WWW_DIR"
- echo " www bucket: $AWS_S3_BUCKET_WWW"
- echo " mysql database: $MYSQL_DATABASE"
- echo " content path: $CONTENT_DIR"
- echo " content bucket: $AWS_S3_BUCKET_CONTENT"
- fi
- # Make sure backup directory exists for temporarily storing files generated by this script
- if [ ! -d "$BACKUP_DIR" ]; then
- if [ "$DEBUG" == "YES" ]; then
- echo "Creating backup directory '$BACKUP_DIR'"
- fi
- $MKDIR -p "$BACKUP_DIR"
- if [ ! -d "$BACKUP_DIR" ]; then
- if [ "$DEBUG" == "YES" ]; then
- echo "Directory '$BACKUP_DIR' doesn't exist and was unable to be created"
- fi
- exit 1
- fi
- fi
- # MOVE processed MySQL Dump + WWW directory
- if [ -d "$WWW_DIR/" ]; then
- # MySQL dump
- if [ "$DEBUG" == "YES" ]; then
- echo "Dumping MySQL database..."
- fi
- MYSQL_BACKUP_DIR="$WWW_DIR/dev/mysql_data"
- if [ ! -d "$MYSQL_BACKUP_DIR" ]; then
- $MKDIR -p "$MYSQL_BACKUP_DIR"
- fi
- if [ "$MYSQL_PASS" != "" ]; then
- MYSQL_CONNECTION_OPTIONS="--host=$MYSQL_HOST --user=$MYSQL_USER --password=$MYSQL_PASS"
- else
- MYSQL_CONNECTION_OPTIONS="--host=$MYSQL_HOST --user=$MYSQL_USER"
- fi
- for MYSQL_TABLE_NAME in `$MYSQL $MYSQL_CONNECTION_OPTIONS -D$MYSQL_DATABASE -N -B -e 'show tables'`; do
- $MYSQLDUMP $MYSQL_CONNECTION_OPTIONS --opt $MYSQL_DATABASE $MYSQL_TABLE_NAME | $GZIP -c > "$MYSQL_BACKUP_DIR/$MYSQL_DATABASE.$MYSQL_TABLE_NAME.sql.gz"
- done
- if [ "$DEBUG" == "YES" ]; then
- echo "Done!"
- fi
- # Backup WWW directory
- if [ "$DEBUG" == "YES" ]; then
- echo "Creating backup file of WWW directory..."
- fi
- BACKUP_FILE_WWW_PATH="$BACKUP_DIR/$BACKUP_DOMAIN_NAME.$DATE.tar.gz"
- $TAR -czf "$BACKUP_FILE_WWW_PATH" "$WWW_DIR/" --exclude "$CONTENT_DIR"
- if [ "$DEBUG" == "YES" ]; then
- echo "Done!"
- fi
- if [ -f "$BACKUP_FILE_WWW_PATH" ]; then
- if [ "$DEBUG" == "YES" ]; then
- echo "Uploading www file..."
- fi
- RCLONE_WWW_DEST="$RCLONE_REMOTE_NAME:$AWS_S3_BUCKET_WWW"
- $RCLONE $RCLONE_OPTIONS move "$BACKUP_FILE_WWW_PATH" $RCLONE_WWW_DEST
- # Remove backup file of WWW folder if rclone didn't delete it
- if [ -f "$BACKUP_FILE_WWW_PATH" ]; then
- $RM -f "$BACKUP_FILE_WWW_PATH"
- fi
- if [ "$DEBUG" == "YES" ]; then
- echo "Done!"
- fi
- fi
- fi
- # SYNC content directory
- if [ -d "$CONTENT_DIR/" ]; then
- if [ "$DEBUG" == "YES" ]; then
- echo "Syncing content directory..."
- fi
- RCLONE_CONTENT_DEST="$RCLONE_REMOTE_NAME:$AWS_S3_BUCKET_CONTENT"
- $RCLONE $RCLONE_OPTIONS sync "$CONTENT_DIR" $RCLONE_CONTENT_DEST
- if [ "$DEBUG" == "YES" ]; then
- echo "Done!"
- fi
- fi
- if [ "$DEBUG" == "YES" ]; then
- echo "Script finished!"
- fi
- exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement