1. #!/bin/bash
  2.  
  3. # Ryan Lewis
  4. # April 22, 2006
  5. # sql-backup: create sql backups for selected databases
  6.  
  7. # == USER CONFIGURABLE == #
  8.  
  9.   # SQL HOSTNAME
  10.   HOST="localhost"
  11.  
  12.   # SQL USERNAME
  13.   UN=""
  14.  
  15.   # SQL PASSWORD
  16.   PW=""
  17.  
  18.   # DATABASES TO BACKUP
  19.   # DB_NAMES="db1 db2 db3"
  20.   DB_NAMES=""
  21.  
  22.   # BACKUP DESTINATION
  23.   BACKUP_DIR="/backup/dir"
  24.  
  25.   # BACKUP FOLDER
  26.   FOLDER="folder"
  27.  
  28.   # COMPRESSION
  29.   # gzip, bzip2, or none
  30.   COMP="bzip2"
  31.  
  32.   # DATE FORMAT
  33.   # Default Ex. 10-11-2006_14h59m
  34.   DATE=`date +%m-%d-%Y_%Hh%Mm`
  35.  
  36.   # EMAIL BACKUPS?
  37.   EMAIL="yes"
  38.  
  39.   # SEND-TO ADDRESS
  40.   TO=""
  41.  
  42.   # SUBJECT
  43.   SUB="backup - $DATE"
  44.  
  45. # == END == #
  46.  
  47.  
  48. # Mount Testing
  49. MNT_INFO=$(mount | awk -v mnt=$BACKUP_DIR '{ if ($3 == mnt) print $0 }')
  50.  
  51.  
  52. if [ "$MNT_INFO" == "" ]; then
  53.   echo "";
  54.   echo "--------------------------------------------------"
  55.   echo "ERROR:" $BACKUP_DIR " is not mounted."
  56.   echo "       Please mount before continuing."
  57.   echo "--------------------------------------------------"
  58.   echo "";
  59.   exit 1;
  60. fi
  61.  
  62. # Folder testing
  63. if [ -d $BACKUP_DIR/$FOLDER ]; then
  64.   echo ""
  65.   echo "--------------------------------------------------"
  66. else
  67.   echo ""
  68.   echo "--------------------------------------------------"
  69.   echo "$FOLDER does not exist, creating it"
  70.   echo "--------------------------------------------------"
  71.   MKDIR=`which mkdir`
  72.   $MKDIR $BACKUP_DIR/$FOLDER
  73. fi
  74.  
  75. # Backup function
  76. backup () {
  77.   mysqldump --user=$UN --password=$PW --host=$HOST $1 > $2
  78.   return 0
  79. }
  80.  
  81. # Compress function
  82. compress () {
  83.   EXTEN=""
  84.   if [ "$COMP" = "gzip" ]; then
  85.     gzip -f "$1"
  86.     EXTEN=".gz"
  87.     echo "gzip compression done"
  88.     echo "--------------------------------------------------"
  89.   elif [ "$COMP" = "bzip2" ]; then
  90.     bzip2 -f $1
  91.     EXTEN=".bz2"
  92.     echo "bzip2 compression done"
  93.     echo "--------------------------------------------------"
  94.   else
  95.     echo "no compression"
  96.     echo "--------------------------------------------------"
  97.   fi
  98.   return 0
  99. }
  100.  
  101. # Backup the databases
  102. MYSQL=`which mysql`
  103. RM=`which rm`
  104.  
  105. BACKUP_FILES=""
  106.  
  107. # Leave only one backup in the folder
  108. cd $BACKUP_DIR/$FOLDER
  109. $RM -rf *
  110.  
  111. for DB in $DB_NAMES
  112.   do
  113.     echo "backing up the "$DB" database"
  114.     echo "--------------------------------------------------"
  115.     backup "$DB" "$BACKUP_DIR/$FOLDER/${DB}_$DATE.sql"
  116.     compress "$BACKUP_DIR/$FOLDER/${DB}_$DATE.sql"
  117.     BACKUP_FILES="$BACKUP_FILES $BACKUP_DIR/$FOLDER/${DB}_$DATE.sql$EXTEN"
  118. done
  119.  
  120. # Email the backups as attachments
  121. if [ "$EMAIL" = "yes" ]; then
  122.   MUTT=`which mutt`
  123.   echo "$BACKUP_FILES" > backup_content
  124.   BACKUP_FILES=`echo "$BACKUP_FILES" | sed -e "s# # -a #g"`
  125.   $MUTT -s "$SUB" $BACKUP_FILES $TO < backup_content
  126.   echo "emailed backups to $TO"
  127.   echo "--------------------------------------------------"
  128.   rm -f backup_content
  129. fi
  130. echo ""
  131.