Skip to content

Instantly share code, notes, and snippets.

@antonshell
Last active September 24, 2020 11:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save antonshell/b85783f7484cda7573c7e63486cf29dd to your computer and use it in GitHub Desktop.
Save antonshell/b85783f7484cda7573c7e63486cf29dd to your computer and use it in GitHub Desktop.
Backup MySQL databases to external server via SFTP
#! /bin/bash
TIMESTAMP=$(date +"%F-%T")
BACKUP_DIR="/var/backups/databases/my_website_backups/$TIMESTAMP"
MYSQL_USER="root"
MYSQL=/usr/bin/mysql
MYSQL_PASSWORD="password"
MYSQL_HOST="localhost"
REMOTE_HOST="192.168.1.55"
REMOTE_USER="backup"
REMOTE_PASSWORD="password"
REMOTE_DIR=/home/backup/db_backups/
REMOTE_PORT="22"
SSHPASS=/usr/bin/sshpass
RSYNC=/usr/bin/rsync
MYSQLDUMP=/usr/bin/mysqldump databases=`$MYSQL --user=$MYSQL_USER -h$MYSQL_HOST -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)"`
mkdir -p "$BACKUP_DIR"
for db in $databases; do
echo $db
time $MYSQLDUMP -Qc --add-drop-table --single-transaction --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/$db.gz"
done
$SSHPASS -p $REMOTE_PASSWORD $RSYNC -r -e "ssh -p $REMOTE_PORT" $BACKUP_DIR $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR
rm -rf /var/backups/databases/my_website_backups/*
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment