-
-
Save markstreich/1387793 to your computer and use it in GitHub Desktop.
Script to run innobackupex script (for all databases on server), check for success, and apply logs to backups.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# | |
# Script to run innobackupex script (for all databases on server), check for success, and apply logs to backups. | |
# | |
# (C)2010 Owen Carter @ Mirabeau BV | |
# This script is provided as-is; no liability can be accepted for use. | |
# You are free to modify and reproduce so long as this attribution is preserved. | |
# | |
INNOBACKUPEX=innobackupex-1.5.1 | |
INNOBACKUPEXFULL=/usr/bin/$INNOBACKUPEX | |
USEROPTIONS="--user=root --password=XXXXXX" | |
BACKUPDIR=/backup | |
TMPFILE="/tmp/innobackupex-runner.$$.tmp" | |
# Age of oldest retained backups in minutes. | |
AGE=5000 | |
# Some info output | |
echo "----------------------------" | |
echo | |
echo "innobackupex-runner.sh: MySQL backup script" | |
echo "started: `date`" | |
echo | |
# Check options before proceeding | |
if [ ! -x $INNOBACKUPEXFULL ]; then | |
error | |
echo "$INNOBACKUPEXFULL does not exist."; echo | |
exit 1 | |
fi | |
if [ ! -d $BACKUPDIR ]; then | |
error | |
echo "Backup destination folder: $BACKUPDIR does not exist."; echo | |
exit 1 | |
fi | |
if [ -z "`/sbin/service mysql status | grep 'MySQL running (.*)'`" ] ; then | |
echo "HALTED: MySQL does not appear to be running."; echo | |
exit 1 | |
fi | |
if ! `echo 'exit' | /usr/bin/mysql -s $USEROPTIONS` ; then | |
echo "HALTED: Supplied mysql username or password appears to be incorrect (not copied here for security, see script)"; echo | |
exit 1 | |
fi | |
# Now run the command to produce the backup; capture it's output. | |
echo "Check completed OK; running $INNOBACKUPEX command." | |
$INNOBACKUPEXFULL $USEROPTIONS --defaults-file=/etc/my.cnf $BACKUPDIR > $TMPFILE 2>&1 | |
if [ -z "`tail -1 $TMPFILE | grep 'completed OK!'`" ] ; then | |
echo "$INNOBACKUPEX failed:"; echo | |
echo "---------- ERROR OUTPUT from $INNOBACKUPEX ----------" | |
cat $TMPFILE | |
rm -f $TMPFILE | |
exit 1 | |
fi | |
THISBACKUP=`awk -- "/Backup created in directory/ { split( \\\$0, p, \"'\" ) ; print p[2] }" $TMPFILE` | |
rm -f $TMPFILE | |
echo "Databases backed up successfully to: $THISBACKUP" | |
echo | |
echo "Now applying logs to the backuped databases" | |
# Run the command to apply the logfiles to the backup directory. | |
$INNOBACKUPEXFULL --apply-log --use-memory=1024 --defaults-file=/etc/my.cnf $THISBACKUP > $TMPFILE 2>&1 | |
if [ -z "`tail -1 $TMPFILE | grep 'completed OK!'`" ] ; then | |
echo "$INNOBACKUPEX --apply-log failed:"; echo | |
echo "---------- ERROR OUTPUT from $INNOBACKUPEX --apply-log ----------" | |
cat $TMPFILE | |
rm -f $TMPFILE | |
exit 1 | |
fi | |
echo "Logs applied to backuped databases" | |
echo | |
# Cleanup | |
echo "Cleaning up old backups (older than $AGE minutes) and temporary files" | |
rm -f $TMPFILE | |
cd /tmp ; find $BACKUPDIR -maxdepth 1 -type d -mmin +$AGE -exec echo "removing: "{} \; -exec rm -rf {} \; | |
echo | |
echo "completed: `date`" | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment