How to backup your webserver files using rsync.net
I am very happy with my provider, but if you don't have backup server for your account, you need another service to backup your files.
After a little research, i found rsync.net. Their price is acceptable ($0.80-1.4 gb/mounth | static - global redundant) , and the service is really fine.
I want to backup my dbs every night, but files; every two weeks. My model is like this:
- Backup every database individually to /mybackups/db
- Backup every vhost folder individually /mybackups/vhosts
- Than mount rsync.net filesystem to the webserver
- Syncronize local backup folder to the mounted filesystem
Here is how i setup my server.
You need to install sshfs to your server first, than
sudo apt-get install sshfs
due to a bug
sudo modprobe fuse
If rsync is not installed
sudo apt-get install rsync
After you make your purchase from rsync.net, they will send you an email regarding to your account information. I choosed tp pay with paypal and subscribed, so it will be paid monthly.
We are going to use automated scripts, so, it is better to use ssh keys. Type
ssh-keygen -t rsa
Do not enter a pass phrase, just hit enter twice.
Now we need to send it to the rsync.net server. Type something like this:
scp ~/.ssh/id_rsa.pub 123@tv-s009.rsync.net:.ssh/authorized_keys
Of course change 123@tv-s009.rsync.net with your rsync.net user info.
To backup my databases i use this bashscript (autodb.sh)
#!/bin/bash ### MySQL Server Login Info ### MUSER="yourmysqluser" MPASS="yourmysqlpass" MHOST="localhost" MYSQLDUMP="$(which mysqldump)" BAK="/your/backup/path/to/db" GZIP="$(which gzip)" MOUNT="/mnt/your-rsync-backup-folder" #name whatever you want find $BAK -type d -mtime +30 -exec rm -rf {} \; #delete anything older than 30 days. you can change this one whatever you want. DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')" for db in $DBS do $MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE done sshfs your-rsync-net-username@your-rsync-net-server: $MOUNT rsync -az --delete --force --stats /your/backup/path $MOUNT fusermount -u $MOUNT
Now save it wherever you want (not under anywhere web accesible!) and change its writing permissions to 755
To backup my files (autofiles.sh) i use something like this
#!/bin/bash mark_file=/tmp/job-run-marker # check whether the job runned last week if [ -e $mark_file ] ; then rm -f $mark_file else touch $mark_file exit 0 fi #above part is for only to run this script once in two weeks BAK="/your/backup/path/to/vhosts" VHOSTS="/your/path/to/vhosts" MOUNT="/mnt/your-rsync-backup-folder" #name same as the above one find $BAK -type d -mtime +46 -exec rm -rf {} \; #delete anything older than 46 days. since we backup our files every two weeks, we will have 4 versions of each cd $VHOSTS for files in * do set $files #echo $OF tar -czvf $OF $files done # exiting for loop sshfs -o nonempty your-rsync-net-username@your-rsync-net-server: $MOUNT rsync -az --delete --force --stats /your/backup/path $MOUNT fusermount -u $MOUNT
Save this file like the other one and change write permission of course.
Now we need to tell the machine to run these scripts automatically. Type
crontab -e
At the end of the file add these lines and press kntrl+o and enter (i mean save it)
01 02 * * * /your/path/to/autodb.sh 01 03 * * 7 /your/path/to/autofiles.sh
First line will execute the db bash script every day at 02:01 am, the second one execute files bash script every sunday at 03:01, but the file control in the script cause it to run only once in two weeks.
I think that's all. If you face any problems, feel free to let me know.
