Auto Backup MySQL Database to FTP Server using cURL

RAID is not a backup. RAID arrays can fail just like single drives, RAID is designed for fault tolerance NOT backups.

I wrote this script to backup MySQL databases and than upload it to FTP server using cURL.

Create and make it executable:

vi /root/

chmod +x /root/

Copy paste the following and change it with your credentials:


# Set up all the variables

# Database name
databases="db1 db2"

# Current date

# Mysql user, password

# FTP user, password, and host (you can specify the port also eg.

# Local backup folder

# Create the backup dir if doesn't exist
if [ ! -d $bPath ]; then
    mkdir -p $bPath

# Delete backup file older than 3 days (local backup)
find $bPath/*.sql.gz -mtime +3 -exec rm {} \;

# Backup the database
for db in $databases; do
    # Database backup name

    # Do the mysql database backup (mysqldump)
    echo "Starting to dump the $db database as $file"
    mysqldump --user=$user --password=$pass $db | gzip -9 > $bPath/$file

    # Upload it via curl
    echo "Starting to upload the $file to FTP server"
    curl --ftp-create-dirs -T $bPath/$file -u $ftpUser:$ftpPass ftp://$ftpHost/$ftpFolder

# Clear the cache (not work on OpenVZ)
free && sync && echo 3 > /proc/sys/vm/drop_caches && echo "" && free

Create cron job and execute the script. On this example the script will run everyday @ 2am.

crontab -e

Write the crontab command and save it.

 00 02 * * * /root/

I have simple backup system for my databases and files but it safe enough.

  1. The FTP server is in my Windows 10 dedicated server and I use it mostly for backup and RDP (HW Raid 1).

  2. Sync the uploaded file automatically to my Google Drive with unlimited storage and to my ownCloud server (also use HW Raid 1).

Author: danpros


Comments on “Auto Backup MySQL Database to FTP Server using cURL”