This is a plain and simple way to manage old mysql EBS snapshots. Maintain the latest five recent snapshots of a specific volume. You don’t want to mess with other existing volume snapshots, right? 🙂
1. Install Eric Hammond’s ec2-consistent snapshot
codename=$(lsb_release -cs) echo "deb http://ppa.launchpad.net/alestic/ppa/ubuntu $codename main" | sudo tee /etc/apt/sources.list.d/alestic-ppa.list sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys BE09C571 sudo apt-get update sudo apt-get install -y ec2-consistent-snapshot sudo PERL_MM_USE_DEFAULT=1 cpan Net::Amazon::EC2
2. Copy the lines below to a file $HOME/.my.cnf, (make sure to change file permission to read only using chmod 600)
[client] user=root password=MYPASSWORD
3. Just copy your AWS access and secret key to $HOME/.awssecret separated by a linefeed.(make sure to change file permission to read only using chmod 600)
aws_accesskey aws_secretkey
4. Download Tim Kay’s AWS tool and make the file executable.
sudo wget https://github.com/timkay/aws/raw/master/aws -O /usr/local/sbin/aws sudo chmod +x /usr/local/sbin/aws
Updated 12/13-2010: URL for Tim Kay’s aws program.
5. Setup a cronjob. Adjust cronjob to your backup schedules. If you want to maintain 10 snapshots, replace the 5 at sed command. The one-liner code was posted here.
# to snapshot your mysql 0 0 * * * /usr/bin/ec2-consistent-snapshot --mysql --xfs-filesystem /vol vol-XXXXXX >> /mnt/backup.log 2>&1 # Delete the last 5 old snapshots. 0 2 * * * /usr/local/sbin/aws dsnap | grep vol-XXXXXXX | sort -r -k 5 | sed 1,5d | awk '{print "Deleting snapshot: " $2 " Dated:" $8}; system("/usr/local/sbin/aws delsnap " $2 )' >> /mnt/backup.log 2>&1
Code Updated fixing redirection.
I’m using Eric Hammond’s Ubuntu Jaunty: ami-ed46a784 for this setup. Note that this ami-ed46a784 is using an older kernel with bug that pose possible access to root account in a multiuser environment.
New Releases of Ubuntu Images for Amazon EC2 (Kernels, Security, Tools, PPA, runurl)
New 2.6.21 kernel+modules: XFS breaks on Ubuntu Hardy, Intrepid
Pingback: Amazon Relational Data Service
It’s worth noting that placing .my.cnf and .awssecret in $HOME will lead to them getting bundled with any AMI you create from that server.
To prevent accidental exposure of the secret keys and passwords should you make that AMI public I would recommend placing them in /mnt and symlinking them to the $HOME directory.
ln -s /mnt/.my.cnf /home/ubuntu/.my.cnf
ln -s /mnt/.awssecret /home/ubuntu/.awssecret
Bob,
Good point.
Another note is for multi user server, these files even if they are at /mnt must be secured also for read only on root and no access to other users which is easily be fixed using chmod command.
It’s always best to review and double check your private AMI settings before making them public.
http://www.sambastream.com/blogs/dgildeh/12-03-10/implementing-revolving-backups-aws-ec2
i required script for Amazon EC2 Daily Snapshot Script for Windows
You can create an image of a Windows instance via the AWS Management Console but I don’t know how to do it on Windows system. Maybe a scheduled task on Windows can make a daily snapshot.
Pingback: » Script to automate creation and management of EC2 EBS snapshots