暫時性備份 MySQL DB 到 Dropbox


詳細使用方法請參閱 Github.熱備份最好使用 Xtrabackup

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/bin/bash

# Settings
TIMESTAMP=$(date +"%F")

BACKUP_DIR="backup/$TIMESTAMP"
MYSQL_USER="BACKUP_USER"
MYSQL_PASS="BACKUP_PASSWORK"
MYSQL_SELF="/usr/local/mysql/bin/mysql"
MYSQL_DUMP="/usr/local/mysql/bin/mysqldump"

DROPBOX_PATH="/Backup/MySQL/All"

# Create backup directory
mkdir -p $BACKUP_DIR

# Get all database
databases=`$MYSQL_SELF -u $MYSQL_USER -p"$MYSQL_PASS" -e 'SHOW DATABASES;' | grep -Ev "(Database|information_schema)"`

for database in $databases; do
echo "Dumping $database"
$MYSQL_DUMP --force --opt -u $MYSQL_USER -p"$MYSQL_PASS" --database $database | gzip > "$BACKUP_DIR/$database.gz"
done

# Zip databases to one file then remove all databases
tar zcvf $BACKUP_DIR.tar.gz $BACKUP_DIR
rm -rf $BACKUP_DIR

# Put to dropbox
put_cmd="/opt/dropbox_uploader.sh upload $BACKUP_DIR.tar.gz $DROPBOX_PATH/$TIMESTAMP.tar.gz"
echo $put_cmd && `$put_cmd`

# Remove from dropbox (expire 6 day files)
delete_cmd="/opt/dropbox_uploader.sh delete $DROPBOX_PATH/$(date -v -6d +'%F').tar.gz"
echo $delete_cmd && `$delete_cmd`

# Remove backup zip file
rm -rf $BACKUP_DIR