This is a simple script that can be used to take backups of your MySQL databases, it can be run as a cron job and outputs enough of a log to allow you to keep track of what’s going on.
There’s a few sections you’ll need to edit and an extra stage that uses rsync to send the backups to a remote server which you may or may not need. If you’re running this on a MySQL replication slave (recommended) then leave the stop/start slave lines in place. If you’re running this on a master or single server then you can comment those lines out.
#!/bin/bash # Author: Grant MacDonald # Purpose: MySQL backup script # Version: 1.0 # Date: 14/04/2012 # Version History # 1.0 Initial version # Options # BACKUPDIR Location to store backups # DBLIST Space separated list of database names to backup # USEROPTIONS If you need to set a username / password do it here. # DUMPOPTIONS Any options you wish mysqldump to use # BINDIR Path to mysql executables mysqladmin / mysqldump BACKUPDIR=/backup DBLIST="your list of databases here" #It's good practise to create a user with backup rights to use. #USEROPTIONS="-ubackup -pQwErTy123" USEROPTIONS="" DUMPOPTIONS="--lock-all-tables" BINDIR=/usr/bin ## Script Logic Starts Here echo $(date) MySQL Backup START # Date to append to database names # Uncomment the line below to use full dates # Remember to make the day of week line a comment if you want to use the full dates. #BACKUPDATE=$(/bin/date +%Y%m%d) # The versions gives day of the week backups, eg mydatabase.Mon.sql, mydatabase.Tue.sql BACKUPDATE=$(/bin/date +%a) # Stop accepting replication while we backup echo $(date) Stop replication ${BINDIR}/mysqladmin ${USEROPTIONS} stop-slave # Iterate through the list of databases and take a dump for DATABASE in ${DBLIST} ; do echo $(date) Dumping ${DATABASE} START ${BINDIR}/mysqldump ${USEROPTIONS} ${DUMPOPTIONS} ${DATABASE} > ${BACKUPDIR}/${DATABASE}_${BACKUPDATE}.sql echo $(date) Dumping ${DATABASE} FINISH done # Start accepting replication echo $(date) Start replication ${BINDIR}/mysqladmin ${USEROPTIONS} start-slave # Compress the backups echo $(date) Compress Backup START ${BINDIR}/gzip -f ${BACKUPDIR}/*_${BACKUPDATE}.sql echo $(date) Compress Backup FINISH echo $(date) MYSQL RSYNC REMOTE_SERVER START rsync -avz --delete -e "ssh -i /root/.ssh/vps" ${BACKUPDIR}/* remote_server:/data/backup/ echo $(date) MYSQL RSYNC REMOTE_SERVER FINISH # Thank you and goodnight echo $(date) MySQL Backup FINISH # Elvis Has Left The Building
And that’s it.
Comments are closed, but trackbacks and pingbacks are open.