Hi,
How to take full MySQL backup daily using shell script ?
First we need to create the shell script on the server and add below code in it. After creating the shell script. After this you can add this shell script to daily crons to perform daily backup automatically. You can directly put the above code in the daily cron for example :
vi /etc/cron.daily/mysqlbackup.sh
Here is the code :
======================================
#!/bin/bash
# Simple script to backup MySQL databases
# Parent backup directory
backup_parent_dir=”/home/backups/mysql”
# MySQL settings
mysql_user=”root”
mysql_password=$(cat /root/.my.cnf | grep pass | sed ‘s/^pass=//g’ | tr -d ‘\”‘)
mysql_password=$(cat /root/.my.cnf | grep pass | sed ‘s/^password=//g’ | tr -d ‘\”‘)
# Read MySQL password from stdin if empty
if [ -z “${mysql_password}” ]; then
echo -n “Enter MySQL ${mysql_user} password: ”
read -s mysql_password
echo
fi
# Check MySQL password
echo exit | mysql –user=${mysql_user} –password=${mysql_password} -B 2>/dev’/null
if [ “$?” -gt 0 ]; then
echo “MySQL ${mysql_user} password incorrect”
exit 1
else
echo “MySQL ${mysql_user} password correct.”
fi
# Create backup directory and set permissions
backup_date=`date +%Y_%m_%d_%H_%M`
backup_dir=”${backup_parent_dir}/${backup_date}”
echo “Backup directory: ${backup_dir}”
mkdir -p “${backup_dir}”
chmod 700 “${backup_dir}”
# Get MySQL databases
mysql_databases=`echo ‘show databases’ | mysql –user=${mysql_user} –password=${mysql_password} -B | sed /^Database$/d`
# Backup and compress each database
for database in $mysql_databases
do
if [ “${database}” == “information_schema” ] || [ “${database}” == “performance_schema” ]; then
additional_mysqldump_params=”–skip-lock-tables”
else
additional_mysqldump_params=””
fi
echo “Creating backup of \”${database}\” database”
mysqldump ${additional_mysqldump_params} –user=${mysql_user} –password=${mysql_password} ${database} | gzip > “${backup_dir}/${database}.gz”
chmod 600 “${backup_dir}/${database}.gz”
done
======================================
This will simply run your MySQL on daily basis and keeps your System updated in case of MySQL crash or requirement of Old Data.
In addition to this, to save the disk space you can remove old database backup by adding simple 2 lines to above code :
# Terminate old backup
find /home/backups/mysql/ -mtime +10 -exec rm -rf {} \;
done
This will delete the backup which is older than 10 days.
YouTube SEO Secrets That Actually Work in 2026 YouTube SEO 2026 YouTube SEO Secrets That Actually Work in 2026 If…
Live video commerce is transforming how small businesses sell products online. Instead of relying only on static product pages or…
Digital marketing directly impacts revenue, brand positioning, and customer acquisition cost. Choosing the wrong agency can result in wasted budgets,…
The release of WordPress 6.9 introduces meaningful enhancements focused on performance, block editing flexibility, design precision, and long-term scalability. This…
The wp-content/uploads folder is the core storage location for media files in WordPress. Every image, PDF, video, or document uploaded…