I am trying to use a backup script that will backup my sql database and website files. I am running Ubuntu 12.04 32 bit version and zPanel.
Also what are these variables:
MYSQL="$()"
MYSQLDUMP="$()"
GZIP="$()"
I assume the first one is DB name.
Here is the script:
#!/bin/sh #---------------------------------------------------------------- # Daily Backup Routine - Backup and Sync to Dropbox # This script creates a backup using today's date, then deleted # any backups made 3 days ago. If run every day it will ensure # you have a week's worth of backups of your MySQL databases and # zPanel web directories. # # Uses whatever Dropbox account is running on the server. # # Written by Richard Ferreira for the backup of zPanel websites. # Contact me - richard[at]beetle001.com #---------------------------------------------------------------- # # Before we get started, we should set some parameters. We'll need these for later. # The webserver's datafiles: WEBDIR="/var/zpanel/hostdata/" # Where do we want the backup to go? (SET THIS - IT'S A TEMP FOLDER) BACKUP="/root/backup-temp" # Where is our dropbox folder? (SET THIS TO YOUR ABSOLUTE BACKUP PATH) DROPBOX="/root/Dropbox/Backups # What do we want our date to look like? NOW=$(date +"%d-%m-%Y") # We need to know the date 3 days ago to purge any backups that were made 3 days ago. # This ensures we don't keep unnecessarily old backups. # It doesn't matter if it skips one every now and then - we'll just have to check manually from time to time. # If you want to keep more days backups, change the "3 days ago" to "x days ago" DAYSAGO=$(date --date="3 days ago" +"%d-%m-%Y") # What should our file backup look like? WEBFILE="webdirs-full-$NOW.tar.gz" # Our MySQL Login information and some paths (we'll use 'which' to make sure we get them): SQLUSER="root" # Don't forget to change the root password here! SQLPASS="xxxxxxxxxxxx" SQLHOST="localhost" MYSQL="$(db-name)" MYSQLDUMP="$(db-name)" GZIP="$(.gz)" # # Let's just, for sanity's sake, make sure our temp backup folder exists. mkdir $BACKUP # DON'T EDIT ANYTHING BELOW THIS LINE #---------------------------------------------------------------- # Now let's start! # Let's get the databases that we want to backup. DBS="$($MYSQL -u $SQLUSER -h $SQLHOST -p$SQLPASS -Bse 'show databases')" # Now let's dump them to .sql files and put them in our backup directory. for db in $DBS do FILE=$BACKUP/mysql-$db.$NOW.gz $MYSQLDUMP -u $SQLUSER -h $SQLHOST -p$SQLPASS $db | $GZIP -9 > $FILE done # # Let's shove the whole webserver directory into a tarball and throw that in with the sql files: tar -zcvf /root/backup/$WEBFILE $WEBDIR # That's all done - we should put the backups on Copy by putting them into our Copy folder. # First let's make a folder for today. mkdir $DROPBOX/$NOW # Copy our backups into it. cp -R $BACKUP/* $DROPBOX/Asterix/$NOW # We can delete the backup we made 3 days ago from Copy now. rm -rf $DROPBOX/$DAYSAGO # And clear out the temporary director for next time. rm $BACKUP/* # Job well done! # Have a beer and relax! Here is my problem: When I try to run the script I get this error: ./backup.sh: 66: ./backup.sh: Syntax error: Unterminated quoted string
If anyone could help me with this would appreciate it a lot!
12 Answers
The line with
DROPBOX="/root/Dropbox/Backups does not have a " at the end.
The MYSQL, MYSQLDUMP and GZIP variables refer to the programs used to execute various commands. So they should contain the path of those programs:
MYSQL="/usr/bin/mysql" MYSQLDUMP="/usr/bin/mysqldump" GZIP="/bin/gzip" You can use the output of which <program name> to see what to put there:
$ which mysql /usr/bin/msql $ which gzip /bin/gzip 2I faced the same issue as seen below.
MY_VAR="123"#comments then I put a space before # character, then solved.