{"id":395,"date":"2012-07-10T10:25:10","date_gmt":"2012-07-10T10:25:10","guid":{"rendered":"http:\/\/pheonixsolutions.com\/?p=395"},"modified":"2026-08-31T17:33:53","modified_gmt":"2026-08-31T12:03:53","slug":"ftp-backup-scipt-for-all-the-mysql-databases","status":"publish","type":"post","link":"https:\/\/pheonixsolutions.com\/blog\/ftp-backup-scipt-for-all-the-mysql-databases\/","title":{"rendered":"FTP Backup Script for All MySQL Databases"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Regular database backups are essential for protecting your data and ensuring quick recovery in the event of data loss. If you maintain an FTP server for offsite backups, you can automate the process of backing up all MySQL databases and uploading them daily.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This guide demonstrates a simple shell script that creates backups of all MySQL databases, uploads them to an FTP server, and removes old backup directories.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before you begin, ensure you have:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A Linux server with MySQL installed<\/li>\n\n\n\n<li>Root or sudo access<\/li>\n\n\n\n<li>FTP server credentials<\/li>\n\n\n\n<li><code>lftp<\/code>\u00a0installed on the server<\/li>\n\n\n\n<li>A backup directory (or permission to create one)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Implementation<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Configure FTP Authentication<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Create or edit the&nbsp;<code>.netrc<\/code>&nbsp;file with your FTP credentials.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Note:<\/strong>&nbsp;Ensure the file permission is set to&nbsp;<strong>600<\/strong>.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">machine IPADDRESS<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">login username<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">password password<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Set the appropriate permissions:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">chmod 600 ~\/.netrc<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Create the Backup Script<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Create a shell script (for example,&nbsp;<code>mysql-backup.sh<\/code>) and add the following content.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">#!\/bin\/bash<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">### MySQL Setup ###<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">MUSER=&#8221;root&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">MPASS=&#8221;mysqlpassword&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">MHOST=&#8221;127.0.0.1&#8243;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">MYSQL=&#8221;$(which mysql)&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">MYSQLDUMP=&#8221;$(which mysqldump)&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">BAK=&#8221;\/backup\/mysql&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">NOW=$(date +&#8221;%F&#8221;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DEL=$(date &#8211;date=&#8217;4 days ago&#8217; +%F)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">### FTP Server Info ###<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">FTPU=&#8221;FTPusername&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">FTPP=&#8221;FTPpassword&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">FTPS=&#8221;IPaddress&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">[ ! -d $BAK ] &amp;&amp; mkdir -p $BAK || \/bin\/rm -f $BAK\/*<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DBS=&#8221;$($MYSQL -Bse &#8216;show databases&#8217;)&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>for<\/strong> db <strong>in<\/strong> $DBS<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>do<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">cd $BAK<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">$MYSQLDUMP $db &gt; $db.sql<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">done<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"># Upload backups to FTP<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">lftp -u $FTPU,$FTPP -e &#8220;mkdir mysql\/$NOW; cd mysql\/$NOW; mput \/backup\/mysql\/*; quit&#8221; $FTPS<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"># Remove old backup directory<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">lftp -u $FTPU,$FTPP -e &#8220;cd mysql; rmdir $DEL; quit&#8221; $FTPS<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">echo &#8220;Completed&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Update the following values before running the script:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>MySQL username and password<\/li>\n\n\n\n<li>FTP username and password<\/li>\n\n\n\n<li>FTP server IP or hostname<\/li>\n\n\n\n<li>Backup directory path (if required)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Make the Script Executable<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Grant execute permission:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">chmod +x mysql-backup.sh<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Run the script manually to verify it completes without errors:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">.\/mysql-backup.sh<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Automate the Backup Using Cron<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Edit the crontab:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">crontab -e<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Add a daily cron job, for example:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">0 2 * * * \/path\/to\/mysql-backup.sh<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This schedules the backup to run every day at&nbsp;<strong>2:00 AM<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">By automating MySQL backups with a shell script and uploading them to an FTP server, you can maintain regular offsite backups with minimal manual effort. Scheduling the script through cron ensures backups are performed consistently, helping improve disaster recovery and data protection.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Related Article <\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/pheonixsolutions.com\/blog\/how-to-connect-ftp-and-sftp-via-terminal-and-filezilla\/\">How to connect FTP and SFTP via Terminal and Filezilla<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Talk to our experts:<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Our DevOps experts can help with cloud infrastructure, server management, automation, and other DevOps requirements. Get in touch with our team&nbsp;<a href=\"https:\/\/pheonixsolutions.com\/contact\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Regular database backups are essential for protecting your data and ensuring quick recovery in the event of data loss. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1020],"tags":[239,185,179],"class_list":["post-395","post","type-post","status-publish","format-standard","hentry","category-containers-kubernetes","tag-backup-sript","tag-ftp-2","tag-mysql-2","psol-cat-containers-kubernetes"],"jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/phn2x7-6n","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/395","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/comments?post=395"}],"version-history":[{"count":2,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/395\/revisions"}],"predecessor-version":[{"id":11219,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/395\/revisions\/11219"}],"wp:attachment":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/media?parent=395"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/categories?post=395"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/tags?post=395"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}