tecmint.com-How to Automate MySQL Database Backups with Shell Script and Cron
tecmint.com-How to Automate MySQL Database Backups with Shell Script and Cron
Backups are essential for keeping your data safe, and automating the backup process
can save you both time and effort. If your database is ever lost or corrupted, having a
recent backup can be a lifesaver.
Regular backups are crucial for any website or application using a MySQL database.
Automating this process ensures that backups occur regularly, without the need to
remember to perform them manually.
In this guide, we’ll show you how to create a simple Bash script to automate MySQL
database backups. Then, we’ll set up a Cron job to run this backup script automatically at
scheduled times, ensuring that your databases are backed up without fail.
nano backup_mysql.sh
Copy and paste the following script into the backup_mysql.sh file:
1/4
#!/bin/bash
# MySQL Credentials
MYSQL_USER="your_mysql_username"
MYSQL_PASS="your_mysql_password"
MYSQL_HOST="localhost"
# Email settings
EMAIL_TO="[email protected]"
EMAIL_SUBJECT="MySQL Backup Report - $(date +"%Y-%m-%d %H:%M:%S")"
EMAIL_BODY=""
# Databases to back up (list the names of the databases you want to back up)
DATABASES=("db1" "db2" "db3")
MySQL Credentials: You need to provide your MySQL username, password, and
host (usually localhost).
Backup Directory: This is where your backups will be stored. Make sure this
directory exists on your system.
Timestamped Backup: The script creates backups with a timestamp (e.g., 2025-
04-28_12-30-00.sql) to avoid overwriting old backups.
Databases to Back Up: In the DATABASES array, list the names of the databases
you want to back up. You can add or remove databases as needed.
2/4
Backup Command: The script uses mysqldump to create backups of your
databases.
Old Backup Cleanup: The script also deletes backups older than 30 days (you can
adjust this time as needed).
Email Alerts: After running the backup, the script sends an email with the results –
whether each database backup succeeded or failed.
Here’s the rsync command you can add to the end of your backup script:
rsync -avz \
-e "ssh -i $SSH_KEY -o StrictHostKeyChecking=no" \
--delete-after \
"$BACKUP_DIR/" \
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
Make sure the remote server is reachable, and the destination directory exists with proper
write permissions.
Once you’ve saved your script, make it executable by running chmod command:
chmod +x backup_mysql.sh
./backup_mysql.sh
Check your backup directory to ensure the backups are created successfully. If everything
looks good, proceed to the next step.
crontab -e
3/4
Add a Cron job to run the backup script automatically. For example, to run the script every
day at 2 AM, add the following line:
0 2 * * * /bin/bash /path/to/your/backup_mysql.sh
To verify that your Cron job is running, you can check the system logs or temporarily set
the script to run at a closer time to see if it works.
Additional Considerations
Security: Storing your MySQL password in the script is convenient but not secure.
For better security, you can store your credentials in a .my.cnf file in your home
directory and configure the script to read from there.
Backup Location: Make sure that the backup directory has enough space for your
backups. If you’re running multiple backups, it’s a good idea to set up a separate
storage location (like an external hard drive or cloud storage).
Backup Frequency: Depending on how often your data changes, you might want
to adjust the Cron job schedule. For example, you could run the backup every hour,
every week, or only on certain days.
Conclusion
By automating MySQL backups with a simple Bash script and Cron job, you ensure that
your databases are safely backed up regularly without needing to remember to do it
manually. With just a few lines of code, you can set up an automatic backup system that
runs at your preferred intervals.
4/4