Script - Backup Script for Home Directories and MySQL Databases
#!/bin/sh
# Home directory to backup must be absolute path, with trailing slash
home_dir='/home/'
# Target backup directory, must be absolute path, with trailing slash
backup_dir='/backups/'
# Database user
db_user='root'
# Database Password
db_pwd=''
cd "$home_dir"
# Get list of users based on home dir
users=`find . -maxdepth 1 -type d \( -iname "*" ! -iname "backups" ! -iname "lost+found" \) -exec echo {} \; | sed "s#./##" | grep -v '^/home$'`
for user in $users; do
# Skip if user string is empty
if [ $user == "" -o $user == ".." -o $user == "." ]; then
continue
fi
# Archive all files in directory
archive="$backup_dir`date +%Y%m%d`.$user.tar.gz"
tar czf "$archive" "$user"
done
# Database backup script
if [ ! -z "$db_pwd" ]; then
databases=`mysql -u$db_user -p$db_pwd -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`
else
databases=`mysql -u$db_user -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`
fi
cd $backup_dir
for db in $databases; do
if [[ "$db" != "information_schema" ]] && [[ "$db" != "performance_schema" ]] && [[ "$db" != "mysql" ]] && [[ "$db" != _* ]] ; then
sql="`date +%Y%m%d`.$db.sql"
echo "Dumping database: $db"
if [ -z "$db_pwd" ]; then
mysqldump -u$db_user $db > $sql
else
mysqldump -u$db_user -p$db_pwd $db > $sql
fi
tar -czf "`date +%Y%m%d`.$db.sql.tar.gz" $sql
rm $sql
fi
done
NOTE: Add this to cronjob
to delete backups older than 90 days: find . -type d -mtime +90 -exec rm {}\;