I need help with a cron job. A automatic ftp backup will pickup sql.tar.gz and upload to remote ftp server under CentOS Linux. How do I automate entire procedure to upload file /tmp/backup/sql.tar.gz?
You can use standard ftp client for File transfer protocol. The program allows a user to transfer files to and from a remote network site. However, modern FTP client follows little different syntax to upload file.
Here is a quick script to upload file:
#!/bin/sh USERNAME="your-ftp-user-name" PASSWORD="your-ftp-password" SERVER="your-ftp.server.com" # local directory to pickup *.tar.gz file FILE="/tmp/backup" # remote server directory to upload backup BACKUPDIR="/pro/backup/sql" # login to remote server ftp -n -i $SERVER <<EOF user $USERNAME $PASSWORD cd $BACKUPDIR mput $FILE/*.tar.gz quit EOF |
#!/bin/sh
USERNAME="your-ftp-user-name"
PASSWORD="your-ftp-password"
SERVER="your-ftp.server.com" # local directory to pickup *.tar.gz file
FILE="/tmp/backup" # remote server directory to upload backup
BACKUPDIR="/pro/backup/sql" # login to remote server
ftp -n -i $SERVER <<EOF
user $USERNAME $PASSWORD
cd $BACKUPDIR
mput $FILE/*.tar.gz
quit
EOF
Make sure script has executable permissions:
$ chmod +x /path/to/ftp.backup.script.sh
Setup a cron job to run script at 15:30 (24 hr clock time) times:
30 15 * * * /path/to/ftp.backup.script.sh
Above script should work with all modern ftp client under any Linux / UNIX version.
A shell script to dump all mysql database and upload them via lftp program
Make sure you have lftp client installed:
# yum install lftp
#!/bin/bash ### MySQL Server Login Info ### MUSER="root" MPASS="MYSQL-ROOT-PASSWORD" # mysql server MHOST="localhost" ### FTP SERVER Login info ### FTPU="FTP-SERVER-USER-NAME" FTPP="FTP-SERVER-PASSWORD" FTPS="FTP-SERVER-IP-ADDRESS" MYSQL="$(which mysql)" MYSQLDUMP="$(which mysqldump)" BAK="/backup/mysql" GZIP="$(which gzip)" NOW=$(date +"%d-%m-%Y") [ ! -d $BAK ] && mkdir -p $BAK || /bin/rm -f $BAK/* DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')" for db in $DBS do FILE=$BAK/$db.$NOW-$(date +"%T").gz $MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE done lftp -u $FTPU,$FTPP -e "mkdir /mysql/$NOW;cd /mysql/$NOW; mput /backup/mysql/*; quit" $FTPS |
#!/bin/bash
### MySQL Server Login Info ###
MUSER="root"
MPASS="MYSQL-ROOT-PASSWORD"
# mysql server
MHOST="localhost" ### FTP SERVER Login info ###
FTPU="FTP-SERVER-USER-NAME"
FTPP="FTP-SERVER-PASSWORD"
FTPS="FTP-SERVER-IP-ADDRESS" MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
BAK="/backup/mysql"
GZIP="$(which gzip)"
NOW=$(date +"%d-%m-%Y") [ ! -d $BAK ] && mkdir -p $BAK || /bin/rm -f $BAK/* DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse ‘show databases’)"
for db in $DBS
do
FILE=$BAK/$db.$NOW-$(date +"%T").gz
$MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
done lftp -u $FTPU,$FTPP -e "mkdir /mysql/$NOW;cd /mysql/$NOW; mput /backup/mysql/*; quit" $FTPS
Set a cron job:
# crontab -e
Run mysql backup ftp script everyday at midnight:
@midnight /path/to/mysql.backup.sh >/dev/null 2>&1
Related: Increase productivity with FTP autologin and macros and backup related shell script.
(adsbygoogle = window.adsbygoogle || []).push({});