MySQL (und MongoDB) Backup automatisch zu Amazon S3 (AWS) hochladen


  • by Tom Beyer
  • 2014-12-16
  •  Server 

Um die Daten seines Servers möglichst sicher zu "backuppen" sollten die Sicherungsdateien des Servers geographisch getrennt vom Server abgespeichert werden. Damit auch im "Katastrophenfall" die Sicherungsdateien zur Verfügung stehen.

Hierfür ist der Dienst "S3" von Amazon ideal geeignet. Um die Daten automatisch zu sichern hab ich mir ein kleines Bash Skript geschrieben. Dies möchte ich euch nicht vorenthalten...

MySQL Backup

#!/bin/bash

MYSQLDUMP_PATH="/usr/bin/mysqldump"
MYSQL_HOST="localhost"
MYSQL_USER="root"
MYSQL_PASSWORD="passwort"

TIMESTAMP=`date +%F-%H%M`
S3_BUCKET_NAME="solarisproject" #replace with your bucket name on Amazon S3
S3_BUCKET_PATH="mysql-backups"

# Create backup
$MYSQLDUMP_PATH -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASSWORD --all-databases > mysql-$TIMESTAMP.sql

7z a -mx=9 mysql-$TIMESTAMP.7z mysql-$TIMESTAMP.sql

# Upload to S3
/usr/local/bin/aws s3 cp mysql-$TIMESTAMP.7z s3://$S3_BUCKET_NAME/$S3_BUCKET_PATH/mysql-$TIMESTAMP.7z

#Delete Files
rm -R mysql-$TIMESTAMP*

Damit das Skript funktioniert müssen folgende Programme installiert werden:

MongoDB Backup

Hier noch das Skript für das automatische MongoDB Backup

#!/bin/bash

#Force file syncronization and lock writes
echo "Lock mongodb"
mongo admin --eval "printjson(db.fsyncLock())"

MONGODUMP_PATH="/usr/bin/mongodump"
MONGO_HOST="localhost"
MONGO_PORT="27017"

TIMESTAMP=`date +%F-%H%M`
S3_BUCKET_NAME="solarisproject"
S3_BUCKET_PATH="mongodb-backups"

# Create backup
$MONGODUMP_PATH -h $MONGO_HOST:$MONGO_PORT

# Add timestamp to backup
mv dump mongodb-$HOSTNAME-$TIMESTAMP

# 7z the Backup
7z a -mx=9 mongodb-$HOSTNAME-$TIMESTAMP.7z mongodb-$HOSTNAME-$TIMESTAMP

# Upload to S3
/usr/local/bin/aws s3 cp mongodb-$HOSTNAME-$TIMESTAMP.7z s3://$S3_BUCKET_NAME/$S3_BUCKET_PATH/mongodb-$HOSTNAME-$TIMESTAMP.7z

#Unlock database writes
mongo admin --eval "printjson(db.fsyncUnlock())"

#Delete Files
rm -R mongodb-$HOSTNAME-$TIMESTAMP*

Cron Jobs einrichten

Damit die Skripts nun auch regelmäßig ausgeführt werden, müssen noch Cron-Jobs eingerichtet werden:

# Daily 1am - Backup MongoDB
0 1 * * * tom export LC_ALL=C; /bin/bash /home/tom/solarisproject-server-configs/backup_scripts/backup_mongodb_to_s3.sh > ~/solarisproject-server-configs/logs/backup_mongo.log

# Weekly 2am Wednesday - Backup MySQL
0 2 * * 3 tom export LC_ALL=C; /bin/bash /home/tom/solarisproject-server-configs/backup_scripts/backup_mysql_to_s3.sh > ~/solarisproject-server-configs/logs/backup_mysql.log

Viel Spaß mit sehr ausfallsicheren Backups.

Ich werde demnächst auch noch ein Skript veröffentlichen um die Daten in Amazon S3 zu reorganisieren.


Comments