Backup Script for CentMinMod

I have written a backup script for centminmod users to backup their sites Locally, Amazons3, Dropbox or FTP. Also Centminmod to Centminmod site migration for WordPress is supported

The script is also available on Github from https://github.com/Brijendrasial/CentMinMod_Backup/blob/master/CMM_backup.sh

To download simply run below commands.

git clone https://github.com/Brijendrasial/CentMinMod_Backup.git
cd CentMinMod_Backup
chmod 0777 CMM_backup.sh
./CMM_backup.sh
To make all database Backup
./CMM_backup.sh -f

To make Single Database Backup
./CMM_backup.sh -u Database_Name

To make all files and all Database Backup
./CMM_backup.sh -b 
#!/bin/bash

# Backup Script CentMinMod [Local Drive Backup, Amazon Backup, FTP Backup & Restore]

# Scripted by Brijendra Sial @ Bullten Web Hosting Solutions [https://www.bullten.com]

RED='\033[01;31m'
RESET='\033[0m'
GREEN='\033[01;32m'
YELLOW='\e[93m'
WHITE='\e[97m'
BLINK='\e[5m'

#set -e
#set -x

echo " "
echo -e "$GREEN*******************************************************************************$RESET"
echo " "
echo -e $YELLOW"Backup & Restoration Script for CentMinMod Installer [CMM]$RESET"
echo " "
echo -e $YELLOW"Local, Amazon S3, FTP Backup & Restoration"$RESET
echo " "
echo -e $YELLOW"By Brijendra Sial @ Bullten Web Hosting Solutions [https://www.bullten.com]"$RESET
echo " "
echo -e $YELLOW"Web Hosting Company Specialized in Providing Managed VPS and Dedicated Server's"$RESET
echo " "
echo -e "$GREEN*******************************************************************************$RESET"

echo " "

BACKUP_PATH_DEFINED=/home/centminmodbackup
MAX_BACKUPS=5
time=$(date +"%m_%d_%Y-%H.%M.%S")
mkdir -p $BACKUP_PATH_DEFINED
mkdir -p $BACKUP_PATH_DEFINED/$time/mysql
mkdir -p $BACKUP_PATH_DEFINED/$time/files


function backup_retension
{

function number_of_backups() {
    echo `ls -1 $BACKUP_PATH_DEFINED | wc -l`
}

function oldest_backup() {
    echo -n `ls -1 $BACKUP_PATH_DEFINED | head -1`
}

while [[ $(number_of_backups) -gt $MAX_BACKUPS ]]; do
    rm -rf "$BACKUP_PATH_DEFINED/$(oldest_backup)"
done
}


function backup_all_db
{
        echo -e $YELLOW"Full Database Backup in Progress"$RESET
        echo " "
        password=$(cat /root/.my.cnf | grep password | cut -d' ' -f1 | cut -d'=' -f2)
        dbs=$(mysql -u root --password=$password -B -N -e 'show databases;' | egrep -v '^mysql|_schema$')
                if [ $? = '0' ]; then
                        for db in $dbs; do
                        sleep 1
                        xyz=$(mysql -u root --password=$password -B -N -e 'show databases;' | egrep -v '^mysql|_schema$' | wc -l)
                                        /usr/bin/mysqldump -u root --password=$password $db | gzip > $BACKUP_PATH_DEFINED/$time/mysql/$db.sql.gz
                                        x=$((x + 1))
                                        echo -e $GREEN"Database Backup Completed in $BACKUP_PATH_DEFINED/$time/mysql/$db.sql.gz"$RESET
                                        echo " "
                                done
                else
                        echo -e $RED"Database Connection Failed. Please check Your Database Password in /root/.my.cnf File"$RESET
                        echo " "
                        exit
                fi

}


function backup_all_files_uncompressed
{
echo " "
echo -e $GREEN"Making Files Backup"$RESET
echo " "
rsync -vr /home/nginx/domains/* $BACKUP_PATH_DEFINED/$time/files/
echo " "
echo -e $GREEN"All Files Backup Completed in $BACKUP_PATH_DEFINED/$time/files/"$RESET
echo " "
}

        case $1 in




                -f )
                        backup_all_db
                        backup_retension
                        exit
                ;;

                -u )
                        password=$(cat /root/.my.cnf | grep password | cut -d' ' -f1 | cut -d'=' -f2)
                        dbs=$(mysql -u root --skip-column-names -B -N -e "SHOW DATABASES LIKE '$2'")
                                if [ "$dbs" == "$2"  ]; then
                                        echo " "
                                        echo -e $YELLOW"Making Database Backup $dbs"$RESET
                                        echo " "
                                        sleep 1
                                        /usr/bin/mysqldump -u root --password=$password $dbs | gzip > $BACKUP_PATH_DEFINED/$time/mysql/$dbs.sql.gz
                                        echo -e $GREEN"Database Backup Completed $BACKUP_PATH_DEFINED/$time/mysql/$dbs.sql.gz"$RESET
                                        echo " "
                                else
                                        echo -e $RED"Database Not Found. Please Recheck"$RESET
                                        echo " "
                                fi

                        exit
                ;;


                -b )
                        echo " "
                        echo "Backup All Files and Database"
                        echo " "
                        backup_all_db
                        backup_all_files_uncompressed
                        backup_retension
                        exit
                ;;

                -h )

                                echo "This is Help Section for CMM Backup by Brijendra Sial"
                                echo " "
                                echo "-f  | Force Full Database Backup Saved (/home/)"
                                echo " "
                                echo "-u DB_NAME | Make Single Database Backup"
                                echo " "
                                echo "-b | Backup All Database and Files Uncompressed"
                                echo " "
                                echo "-h | Help Section"
                                echo " "
                                exit
                ;;

        esac
bs=1
b=1
bsc=1
bsf=1
bb=2
cc=1
s3cmd_name="s3cmd-2.0.2-1.el7.noarch.rpm"
backup_path=$(grep "Backup_Path" /usr/local/src/centminmod_backup/backup_path.conf 2>/dev/null | cut -d":" -f2)

function create_path
{
        echo " "
        echo -e $RED"Backup Path Doesnt Exist"$RESET
        echo " "
        read -p "$(echo -e $GREEN"Enter Path Where You Want To Store Backups e.g /backup || /home/backup :"$RESET) " backup_path
        mkdir -p $backup_path
        cat > /usr/local/src/centminmod_backup/backup_path.conf <<EOF
        Backup_Path:$backup_path
EOF
        echo " "
        start_display
}


function check_ssh_connection
{
        ssh -o PasswordAuthentication=no -i ~/.ssh/cmm.key $destination_ip /bin/true
        if [ $? -eq 0 ]; then
                echo " "
                echo -e $GREEN"Passworless SSH Connection is successfully without Password."$RESET
                echo " "
                site_copy
        else
                echo " "
                echo -e $RED"SSH Connection is not Possible.."$RESET
                rm -rf ~/.ssh/cmm.key
                read -p "$(echo -e $GREEN"Enter Destination Root Password:"$RESET) " destination_password
                ssh-keygen -t rsa -N "" -f ~/.ssh/cmm.key
                #sshpass -p "$destination_password"  ssh -i ~/.ssh/cmm.key root@$destination_ip
                sshpass -p "$destination_password" ssh-copy-id -i ~/.ssh/cmm.key root@$destination_ip
                #ssh -i ~/.ssh/cmm.key root@$destination_ip
                create_connection
        fi

}


function create_connection
{
        echo " "
        read -p "$(echo -e $GREEN"Enter Destination IP:"$RESET) " destination_ip
        check_ssh_connection
}

function site_copy
{
        read -p "$(echo -e $GREEN"Enter Domain Your Want to Copy:"$RESET) " domain_name
        if [ -f /home/nginx/domains/$domain_name/public/wp-config.php ]; then
                echo " "
                echo  -e $YELLOW"Wordpress Installation Found"$RESET
                echo " "
                echo "Moving Site In Progress"
                if ssh -qnx -i ~/.ssh/cmm.key root@$destination_ip "test -d /home/nginx/domains/$domain_name" ; then
                        echo " "
                        echo -e $RED"Site already exist on Destination Server. Quitting copy"$RESET
                        echo " "
                        exit
                else
                        echo " "
                        echo -e $GREEN"Site doesnt exist on Destination Server. Copying in Progress"$RESET
                        echo " "
                        ssh -qnx -i ~/.ssh/cmm.key root@$destination_ip "mkdir -p /home/nginx/domains/$domain_name"
                        mkdir -p /home/nginx/domains/$domain_name/vhosts
                        mkdir -p /home/nginx/domains/$domain_name/mysql
                        mkdir -p /home/nginx/domains/$domain_name/ftp
                        cp /usr/local/nginx/conf/conf.d/$domain_name* /home/nginx/domains/$domain_name/vhosts
                        DATABASE_NAME=$(grep -ir "DB_NAME" /home/nginx/domains/$domain_name/public/wp-config.php | awk {'print $3'} | sed -n "s/^.*'\(.*\)'.*$/\1/ p")
                        DATABASE_USER=$(grep -ir "DB_USER" /home/nginx/domains/$domain_name/public/wp-config.php | awk {'print $3'} | sed -n "s/^.*'\(.*\)'.*$/\1/ p")
                        DATABASE_PASSWORD=$(grep -ir "DB_PASSWORD" /home/nginx/domains/$domain_name/public/wp-config.php | awk {'print $3'} | sed -n "s/^.*'\(.*\)'.*$/\1/ p")
                        mysqldump -u $DATABASE_USER --password=$DATABASE_PASSWORD $DATABASE_NAME > /home/nginx/domains/$domain_name/mysql/$DATABASE_NAME.sql
                        ftp_details=$(grep -ri "$domain_name" /etc/pure-ftpd/pureftpd.passwd)
                        echo $ftp_details > /home/nginx/domains/$domain_name/ftp/pureftpd.passwd
                        rsync -hrtplu  -e 'ssh -p 22 -i ~/.ssh/cmm.key' --ignore-existing --progress /home/nginx/domains/$domain_name root@$destination_ip:/home/nginx/domains/
                        ssh -qnx -i ~/.ssh/cmm.key root@$destination_ip "chown -R nginx:nginx /home/nginx/domains/$domain_name"
                        site_restore
                fi
        else
                echo " "
                echo -e $RED"Wordpress Installation Not Found"$RESET
                echo " "
        fi
}

function site_restore
{
        ROOT_PASSWORD=$(ssh -i ~/.ssh/cmm.key root@$destination_ip "cat /root/.my.cnf | grep password | cut -d' ' -f1 | cut -d'=' -f2")
        #ssh -i ~/.ssh/cmm.key root@$destination_ip "mysql -u root -p$ROOT_PASSWORD -e 'DROP USER $DATABASE_USER@localhost;'"
        ssh -i ~/.ssh/cmm.key root@$destination_ip "mysql -u root -p$ROOT_PASSWORD -e 'CREATE DATABASE $DATABASE_NAME /*\!40100 DEFAULT CHARACTER SET utf8 */;'"
        ssh -i ~/.ssh/cmm.key root@$destination_ip "mysql -u root -p$ROOT_PASSWORD -e 'CREATE USER '$DATABASE_USER'@'localhost' IDENTIFIED BY \"$DATABASE_PASSWORD\";'"
        ssh -i ~/.ssh/cmm.key root@$destination_ip "mysql -u root -p$ROOT_PASSWORD -e 'GRANT ALL PRIVILEGES ON $DATABASE_NAME.* TO '$DATABASE_USER'@'localhost';'"
        ssh -i ~/.ssh/cmm.key root@$destination_ip "mysql -u root -p$ROOT_PASSWORD -e 'FLUSH PRIVILEGES;'"
        ssh -i ~/.ssh/cmm.key root@$destination_ip "mysql -u $DATABASE_USER --password=$DATABASE_PASSWORD $DATABASE_NAME < /home/nginx/domains/$domain_name/mysql/$DATABASE_NAME.sql"
        ssh -i ~/.ssh/cmm.key root@$destination_ip "cp /home/nginx/domains/$domain_name/vhosts/* /usr/local/nginx/conf/conf.d/"
        FTP_USER=$(ssh -i ~/.ssh/cmm.key root@$destination_ip "cat /home/nginx/domains/$domain_name/ftp/pureftpd.passwd | cut -d":" -f1")
        RANDOM_PASS=$(ssh -i ~/.ssh/cmm.key root@$destination_ip "pwgen 8 1")
        ssh -i ~/.ssh/cmm.key root@$destination_ip "(echo $RANDOM_PASS;echo $RANDOM_PASS) | pure-pw useradd $FTP_USER -u nginx -g nginx -d /home/nginx/domains/$domain_name"
        ssh -i ~/.ssh/cmm.key root@$destination_ip "pure-pw mkdb"
        echo " "
        echo "New FTP Password is $RANDOM_PASS"
        echo " "
        echo -e $GREEN"Restore is Successfull"$RESET
        echo " "
}

function site_migration
{
        echo " "
        if  rpm -q sshpass > /dev/null ; then
                echo -e $YELLOW"sshpass Installation Found. Skipping Its Installation"$RESET
                create_connection
        else
        echo -e $RED"sshpass Installation Not Found. Installing it"$RESET
        echo " "
        yum install sshpass -y
        echo " "
        create_connection
        fi

}


function ftp_backup_restore
{
        rm -f /usr/local/src/centminmod_backup/backup-list.conf
        FTP_HOST=$(grep "FTP_HOST" /usr/local/src/centminmod_backup/$backup_domain-ftp_path.conf 2>/dev/null | cut -d":" -f2)
        FTP_PATH=$(grep "FTP_PATH" /usr/local/src/centminmod_backup/$backup_domain-ftp_path.conf 2>/dev/null | cut -d":" -f2)
        FTP_USER=$(grep "FTP_USER" /usr/local/src/centminmod_backup/$backup_domain-ftp_path.conf 2>/dev/null | cut -d":" -f2)
        FTP_PASSWORD=$(grep "FTP_PASSWORD" /usr/local/src/centminmod_backup/$backup_domain-ftp_path.conf 2>/dev/null | cut -d":" -f2)
        old_backup_content=$(grep "Backup_Path" /usr/local/src/centminmod_backup/backup_path.conf 2>/dev/null | cut -d":" -f2)
        for bsss in $FTP_PATH;do
                echo "Listing Content of $bsss file."
                echo " "
                cfz=$(lftp -c "open -u $FTP_USER,$FTP_PASSWORD $FTP_HOST; ls $bsss" | awk '{print $9}' | sed -r '/^\s*$/d' | wc -l)
                for ((j=2; j<$cfz; j++)); do
                        display_backup_files=$(lftp -c "open -u $FTP_USER,$FTP_PASSWORD $FTP_HOST; ls -lht $bsss" | awk '{print $9}' | sed -r '/^\s*$/d' | sed -n $bb'p')
                        cat >> /usr/local/src/centminmod_backup/backup-list.conf<<EOF
                        $cc) $display_backup_files
EOF
                        cc=$((cc + 1))
                done
        done
        echo -e $GREEN"Saved List Of Backups in /usr/local/src/centminmod_backup/backup-list.conf"$RESET
        echo ""
        cat /usr/local/src/centminmod_backup/backup-list.conf
        echo " "
        echo -e $YELLOW"Select The Number of Which You Want To Restore Backup?"$RESET
        echo " "

        read -p "$(echo -e $GREEN"Enter Which Backup Number You Want to Rest e.g 1 , 2 , 3 ..:"$RESET) " bn
        fetch_backup=$(grep -i "$bn)" /usr/local/src/centminmod_backup/backup-list.conf | awk '{print $2}')
        echo " "
        echo "Fetched Backup is $fetch_backup"
        echo " "
        fetch_domain=$(grep -i "$bn)" /usr/local/src/centminmod_backup/backup-list.conf | awk '{print $2}' | awk -F'[-]' '{print $1"-"$2"-"$3}' | cut -d"-" -f2)
        echo " "
        echo "Backup Restoration for $fetch_domain"

        if [ -e "/home/nginx/domains/$fetch_domain" ]; then
                echo " "
                echo -e $RED"Domain Already Exist on Server /home/nginx/domains/$fetch_domain .Delete It First to Continue Backup Restoration"$RESET
                echo " "
        else
                echo "Restoring Backup Please Wait.."
                new_name=$(grep -i "$bn)" /usr/local/src/centminmod_backup/backup-list.conf | awk '{print $2}' | awk -F'[-]' '{print $1"-"$2"-"$3}')
                mkdir -p $old_backup_content/$new_name
                tar -zxvf $old_backup_content/$fetch_backup -C $old_backup_content/$new_name
                cp -r $old_backup_content/$new_name/$fetch_domain /home/nginx/domains/
                cp -r $old_backup_content/$new_name/nginx_vhost/* /usr/local/nginx/conf/conf.d/
                res_database_name=$(grep "Database_Name" $old_backup_content/$new_name/mysql/mysql.conf 2>/dev/null | cut -d":" -f2)
                res_database_user=$(grep "Database_User" $old_backup_content/$new_name/mysql/mysql.conf 2>/dev/null | cut -d":" -f2)
                res_database_password=$(grep "Database_Password" $old_backup_content/$new_name/mysql/mysql.conf 2>/dev/null | cut -d":" -f2)

                if [  -d "/var/lib/mysql/$res_database_name" ] ; then
                        echo " "
                        echo "Database ALready Exist. Delete It to Continue The installation"
                        echo " "
                else
                echo " "
                echo "Creating Database, User & Password Using Root Login"

                                root_password=$(cat /root/.my.cnf | grep password | cut -d' ' -f1 | cut -d'=' -f2)
                                if [ -z "$root_password" ]; then
                                        echo " "
                                        echo -e $RED"Mysql Root Password Not Found in /root/.my.cnf. Exiting Restoration"$RESET
                                        echo " "
                                else
                                        mysql -uroot -p$root_password -e "DROP USER $res_database_user@localhost;"
                                        mysql -uroot -p$root_password -e "CREATE DATABASE $res_database_name /*\!40100 DEFAULT CHARACTER SET utf8 */;"
                                        mysql -uroot -p$root_password -e "CREATE USER $res_database_user@localhost IDENTIFIED BY '$res_database_password';"
                                        mysql -uroot -p$root_password -e "GRANT ALL PRIVILEGES ON $res_database_name.* TO '$res_database_user'@'localhost';"
                                        mysql -uroot -p$root_password -e "FLUSH PRIVILEGES;"
                                        echo " "
                                        echo "Restoring Mysql Database $res_database_name"
                                        echo " "
                                        mysql -u $res_database_user -p$res_database_password $res_database_name < $old_backup_content/$new_name/mysql/$res_database_name.sql
                                        echo "Success"
                                        echo " "
                                fi

                echo "Changing Permission of files to nginx:nginx"
                chown -R nginx:nginx /home/nginx/domains/$fetch_domain
                rm -rf $old_backup_content/$new_name
                echo " "
                echo "Success"
                echo  " Restarting Server"
                nprestart
                echo " "
                echo -e $YELLOW"Restoration Completed Successfully."$RESET
                echo " "
                fi
        fi
                ftp_display
}


function local_backup_restore
{
        rm -f /usr/local/src/centminmod_backup/backup-list.conf
        export old_backup_path=/usr/local/src/centminmod_backup/backup_path.conf
        old_backup_content=$(grep "Backup_Path" /usr/local/src/centminmod_backup/backup_path.conf 2>/dev/null | cut -d":" -f2)
        files=$old_backup_content
        for bss in $files;do
                echo "Listing Content of $bss file."
                echo " "
                cf=$(ls -lht $bss | awk '{print $9}' | sed -r '/^\s*$/d' | wc -l)
                for ((i=0; i<$cf; i++)); do
                        display_backup_files=$(ls -lht $bss | awk '{print $9}' | sed -r '/^\s*$/d' | sed -n $b'p')
                        cat >> /usr/local/src/centminmod_backup/backup-list.conf<<EOF
                        $b) $display_backup_files
EOF
                        b=$((b + 1))
                done
        done
        echo -e $GREEN"Saved List Of Backups in /usr/local/src/centminmod_backup/backup-list.conf"$RESET
        echo ""
        cat /usr/local/src/centminmod_backup/backup-list.conf
        echo " "
        echo -e $YELLOW"Select The Number of Which You Want To Restore Backup?"$RESET
        echo " "

        read -p "$(echo -e $GREEN"Enter Which Backup Number You Want to Rest e.g 1 , 2 , 3 ..:"$RESET) " bn
        fetch_backup=$(grep -i "$bn)" /usr/local/src/centminmod_backup/backup-list.conf | awk '{print $2}')
        echo " "
        echo "Fetched Backup is $fetch_backup"
        echo " "
        fetch_domain=$(grep -i "$bn)" /usr/local/src/centminmod_backup/backup-list.conf | awk '{print $2}' | awk -F'[-]' '{print $1"-"$2"-"$3}' | cut -d"-" -f2)
        echo " "
        echo "Backup Restoration for $fetch_domain"

        if [ -e "/home/nginx/domains/$fetch_domain" ]; then
                echo " "
                echo -e $RED"Domain Already Exist on Server /home/nginx/domains/$fetch_domain .Delete It First to Continue Backup Restoration"$RESET
                echo " "
        else
                echo "Restoring Backup Please Wait.."
                new_name=$(grep -i "$bn)" /usr/local/src/centminmod_backup/backup-list.conf | awk '{print $2}' | awk -F'[-]' '{print $1"-"$2"-"$3}')
                mkdir -p $old_backup_content/$new_name
                tar -zxvf $old_backup_content/$fetch_backup -C $old_backup_content/$new_name
                cp -r $old_backup_content/$new_name/$fetch_domain /home/nginx/domains/
                cp -r $old_backup_content/$new_name/nginx_vhost/* /usr/local/nginx/conf/conf.d/
                res_database_name=$(grep "Database_Name" $old_backup_content/$new_name/mysql/mysql.conf 2>/dev/null | cut -d":" -f2)
                res_database_user=$(grep "Database_User" $old_backup_content/$new_name/mysql/mysql.conf 2>/dev/null | cut -d":" -f2)
                res_database_password=$(grep "Database_Password" $old_backup_content/$new_name/mysql/mysql.conf 2>/dev/null | cut -d":" -f2)

                if [  -d "/var/lib/mysql/$res_database_name" ] ; then
                        echo " "
                        echo "Database ALready Exist. Delete It to Continue The installation"
                        echo " "
                else
                echo " "
                echo "Creating Database, User & Password Using Root Login"

                                root_password=$(cat /root/.my.cnf | grep password | cut -d' ' -f1 | cut -d'=' -f2)
                                if [ -z "$root_password" ]; then
                                        echo " "
                                        echo -e $RED"Mysql Root Password Not Found in /root/.my.cnf. Exiting Restoration"$RESET
                                        echo " "
                                else
                                        mysql -uroot -p$root_password -e "DROP USER $res_database_user@localhost;"
                                        mysql -uroot -p$root_password -e "CREATE DATABASE $res_database_name /*\!40100 DEFAULT CHARACTER SET utf8 */;"
                                        mysql -uroot -p$root_password -e "CREATE USER $res_database_user@localhost IDENTIFIED BY '$res_database_password';"
                                        mysql -uroot -p$root_password -e "GRANT ALL PRIVILEGES ON $res_database_name.* TO '$res_database_user'@'localhost';"
                                        mysql -uroot -p$root_password -e "FLUSH PRIVILEGES;"
                                        echo " "
                                        echo "Restoring Mysql Database $res_database_name"
                                        echo " "
                                        mysql -u $res_database_user -p$res_database_password $res_database_name < $old_backup_content/$new_name/mysql/$res_database_name.sql
                                        echo "Success"
                                        echo " "
                                fi

                echo "Changing Permission of files to nginx:nginx"
                chown -R nginx:nginx /home/nginx/domains/$fetch_domain
                rm -rf $old_backup_content/$new_name
                echo " "
                echo "Success"
                echo  " Restarting Server"
                nprestart
                echo " "
                echo -e $YELLOW"Restoration Completed Successfully."$RESET
                echo " "
                fi
        fi
}


function local_backup_auto
{
        mkdir -p $pre_backup_path/$backup_domain/mysql
        mkdir -p $pre_backup_path/$backup_domain/nginx_vhost
        echo " "
        echo "Copying All Files From /home/nginx/domains/$backup_domain/ to $pre_backup_path/$backup_domain"
        rsync -vr /home/nginx/domains/$backup_domain $pre_backup_path/$backup_domain/

        echo " "
        echo "Copying Virtual Host File For $backup_domain"
        rsync -vr /usr/local/nginx/conf/conf.d/$backup_domain*.conf $pre_backup_path/$backup_domain/nginx_vhost/

        echo " "
        echo "Copying FTP Details From /etc/pure-ftpd/pureftpd.passwd to $pre_backup_path/$backup_domain/pureftpd.passwd"
        ftp_details=$(grep -ri "$backup_domain" /etc/pure-ftpd/pureftpd.passwd)
        echo $ftp_details > $pre_backup_path/$backup_domain/pureftpd.passwd

        echo " "
        echo "Creating Database Backup"
        mysqldump -u $pre_database_user -p$pre_database_password $pre_database_name > $pre_backup_path/$backup_domain/mysql/$pre_database_name.sql

        cat > $pre_backup_path/$backup_domain/mysql/mysql.conf<<EOF
        Domain_Name:$backup_domain
        Database_Name:$pre_database_name
        Database_User:$pre_database_user
        Database_Password:$pre_database_password
EOF

        mkdir -p $pre_backup_path/$backup_domain/ftp_path
        rsync -vr /usr/local/src/centminmod_backup/$backup_domain-ftp_path.conf $pre_backup_path/$backup_domain/ftp_path/

        echo " "
        echo "Compressing Backup.."
        tar -zcf $pre_backup_path/CMMBACKUP-$backup_domain-$time.tar.gz -C $pre_backup_path/$backup_domain/ .
        echo " "
        echo -e $YELLOW"Final Compressed Backup Created: $pre_backup_path/CMMBACKUP-$backup_domain-$time.tar.gz"$RESET
        rm -rf $pre_backup_path/$backup_domain
        echo " "
        echo " "

                        if [[ $inputs = '1' ]]; then
                                echo " "
                                echo "Sending Generated Backup CMMBACKUP-$backup_domain-$time.tar.gz to s3://$bucket_name"
                                aws s3 cp $backup_path/CMMBACKUP-$backup_domain-$time.tar.gz s3://$bucket_name
                                echo " "
                                echo "Backup Sent To Amazon s3://$bucket_name/$backup_domain-$time.tar.gz"
                                echo " "
                        elif [[ $inputss = '1' ]]; then
                                echo " "
                                echo "FTP Upload In Progress"
                                echo " "
                                lftp -c "open -u $FTP_USER,$FTP_PASSWORD $FTP_HOST; put -O $FTP_PATH $pre_backup_path/CMMBACKUP-$backup_domain-$time.tar.gz"

                        elif [[ $inputss = '1' ]]; then
                                echo " "
                                echo "FTP Upload In Progress"
                                echo " "
                                lftp -c "open -u $FTP_USER,$FTP_PASSWORD $FTP_HOST; put -O $FTP_PATH $pre_backup_path/CMMBACKUP-$backup_domain-$time.tar.gz"

                        elif [[ $input = '6' ]]; then
                                echo " "
                                echo "Uploading backup to gdrive"
                                echo " "
                                gdrive upload $backup_path/CMMBACKUP-$backup_domain-$time.tar.gz
                        else
                                echo "Exiting..."
                                echo " "
                        fi
}


function local_dir_db_backup
{
        if [ -z "$pre_backup_path" ] || [ -z "$pre_domain_name" ] || [ -z "$pre_database_name" ] || [ -z "$pre_database_user" ] || [ -z "$pre_database_password" ]; then
                echo -e $RED"Previous Saved Backed File for $backup_domain Doesnt Exist. Creating New"$RESET
                echo ""
                mkdir -p $backup_path/$backup_domain/mysql
                mkdir -p $backup_path/$backup_domain/nginx_vhost
                read -p "$(echo -e $GREEN"Enter Database Name:"$RESET) " backup_domain_database
                read -p "$(echo -e $GREEN"Enter Database User:"$RESET) " backup_domain_user
                read -p "$(echo -e $GREEN"Enter Database Password:"$RESET) " backup_domain_password

                echo "Your Entered Database User is: $backup_domain_user"
                echo "Your Entered Database Name is: $backup_domain_database"
                echo "Your Entered Database User is: $backup_domain_password"
                echo " "

                echo " "
                echo "Copying All Files From /home/nginx/domains/$backup_domain/ to $backup_path/$backup_domain"
                rsync -vr /home/nginx/domains/$backup_domain $backup_path/$backup_domain/

                echo " "
                echo "Copying Virtual Host File For $backup_domain"
                rsync -vr /usr/local/nginx/conf/conf.d/$backup_domain*.conf $backup_path/$backup_domain/nginx_vhost/

                echo " "
                echo "Copying FTP Details From /etc/pure-ftpd/pureftpd.passwd to $backup_path/$backup_domain/pureftpd.passwd"
                ftp_details=$(grep -ri "$backup_domain" /etc/pure-ftpd/pureftpd.passwd)
                echo $ftp_details > $backup_path/$backup_domain/pureftpd.passwd

                echo " "
                echo "Creating Database Backup"
                mysqldump -u $backup_domain_user -p$backup_domain_password $backup_domain_database > $backup_path/$backup_domain/mysql/$backup_domain_database.sql

                cat > $backup_path/$backup_domain/mysql/mysql.conf<<EOF
                Domain_Name:$backup_domain
                Database_Name:$backup_domain_database
                Database_User:$backup_domain_user
                Database_Password:$backup_domain_password
EOF

                mkdir -p $backup_path/$backup_domain/ftp_path
                rsync -vr /usr/local/src/centminmod_backup/$backup_domain-ftp_path.conf $backup_path/$backup_domain/ftp_path/

                echo " "
                echo "Compressing Backup.."
                tar -zcf $backup_path/CMMBACKUP-$backup_domain-$time.tar.gz -C $backup_path/$backup_domain/ .
                echo " "
                echo -e $YELLOW"Final Compressed Backup Created: $backup_path/CMMBACKUP-$backup_domain-$time.tar.gz"$RESET

                echo " "

                cat > /usr/local/src/centminmod_backup/$backup_domain-backup.conf<<EOF
                Domain_Name:$backup_domain
                Database_Name:$backup_domain_database
                Database_User:$backup_domain_user
                Database_Password:$backup_domain_password
EOF


                echo -e $GREEN"Backup Entries Saved in /usr/local/src/centminmod_backup/$backup_domain-backup.conf"$RESET
                echo " "
                cat /usr/local/src/centminmod_backup/$backup_domain-backup.conf

                echo " "
                echo -e $GREEN"Backup Path Saved in /usr/local/src/centminmod_backup/backup_path.conf"$RESET
                echo " "

                rm -rf $backup_path/$backup_domain

                        if [[ $inputs = '1' ]]; then
                                echo " "
                                echo "Sending Generated Backup CMMBACKUP-$backup_domain-$time.tar.gz to s3://$bucket_name"
                                aws s3 cp $backup_path/CMMBACKUP-$backup_domain-$time.tar.gz s3://$bucket_name
                                echo " "
                                echo "Backup Sent To Amazon s3://$bucket_name/$backup_domain-$time.tar.gz"
                                echo " "
                        elif [[ $inputss = '1' ]]; then
                                echo " "
                                echo "FTP Upload In Progress"
                                echo " "
                                lftp -c "open -u $FTP_USER,$FTP_PASSWORD $FTP_HOST; put -O $FTP_PATH $backup_path/CMMBACKUP-$backup_domain-$time.tar.gz"

                        elif [[ $input = '6' ]]; then
                                echo " "
                                echo "Uploading backup to gdrive"
                                echo " "
                                gdrive upload $backup_path/CMMBACKUP-$backup_domain-$time.tar.gz
                        fi
        else
                local_backup_auto
                        fi


}

function local_disk_backup
{
        echo " "
        read -p "$(echo -e $GREEN"Enter The Domain Name You Want To Backup e.g domain.com:"$RESET) " backup_domain
        if [ $inputss = '2' ]; then
                ftp_backup_restore
        fi
        echo " "
        echo -e $BLINK"Domain You entered is $backup_domain"$RESET
        echo " "
                if [ -e "/home/nginx/domains/$backup_domain/public" ]; then
                        echo -e $WHITE"Your Domain $backup_domain exist"$RESET
                        echo " "
                        local_display_path=/home/nginx/domains/$backup_domain/public
                        echo $local_display_path
                        echo " "
                                if [ -e "/usr/local/src/centminmod_backup/backup_path.conf" ] && [ -e "/usr/local/src/centminmod_backup/$backup_domain-backup.conf" ]; then
                                        pre_backup_path=$(grep "Backup_Path" /usr/local/src/centminmod_backup/backup_path.conf 2>/dev/null | cut -d":" -f2)
                                        pre_domain_name=$(grep "Domain_Name" /usr/local/src/centminmod_backup/$backup_domain-backup.conf 2>/dev/null | cut -d":" -f2)
                                        pre_database_name=$(grep "Database_Name" /usr/local/src/centminmod_backup/$backup_domain-backup.conf 2>/dev/null | cut -d":" -f2)
                                        pre_database_user=$(grep "Database_User" /usr/local/src/centminmod_backup/$backup_domain-backup.conf 2>/dev/null | cut -d":" -f2)
                                        pre_database_password=$(grep "Database_Password" /usr/local/src/centminmod_backup/$backup_domain-backup.conf 2>/dev/null | cut -d":" -f2)
                                                if [ $inputss = '1' ]; then
                                                        ftp_connection_check
                                                fi
                                        local_dir_db_backup

                                else
                                                if [ $inputss = '1' ]; then
                                                        ftp_connection_check
                                                fi
                                        local_dir_db_backup
                                fi
                else
                        echo -e $RED"Your Domain $backup_domain Doesnt Exist"$RESET
                        echo " "
                fi
}

function amazon_backup_check
{
        echo " "
        bucket_name=$(grep -i "Bucket_Name" /usr/local/src/centminmod_backup/bucket_name.conf | cut -d':' -f2)
        check_bucket_names=$(aws s3api head-bucket --bucket $check_bucket_name 2> /tmp/bullten)
        if [ -z /tmp/bullten ]; then
                        echo " "
                        echo "Bucket Found. Creating Backup"
                        local_disk_backup
                else
                        echo " "
                        echo "Bucket Not Found. Creating Bucket"
                        aws s3 mb s3://$check_bucket_name
                        local_disk_backup
        fi

}

function amazon_aws_config
{
        echo -e $YELLOW"Checking If required Software is installed"$RESET
        echo " "
        if  rpm -q awscli > /dev/null ; then
                echo -e $GREEN"aws Installation Found. Skipping Its Installation"$RESET
        else
                echo -e $RED"aws Installation Not Found. Installing it"$RESET
                echo " "
                yum install awscli -y
                echo " "
        fi

        read -p "$(echo -e $GREEN"Enter Bucket Name:"$RESET) " bucket_name
        cat > /usr/local/src/centminmod_backup/bucket_name.conf <<EOF
                        Bucket_Name:$bucket_name
EOF
        if aws s3api head-bucket --bucket $bucket_name > /dev/null ; then
                echo " "
                echo "Configuration is Working Fine. "
                echo " "
                amazon_display
        else

                read -p "$(echo -e $GREEN"Enter Access Key:"$RESET) " access_key
                read -p "$(echo -e $GREEN"Enter Secret Key:"$RESET) " secret_key
                read -p "$(echo -e $GREEN"Enter Bucket Location e.g US:"$RESET) " bucket_location
                aws configure set aws_access_key_id $access_key
                aws configure set aws_secret_access_key $secret_key
                aws configure set output json --profile CMM
                aws configure set region $bucket_location --profile CMM
                aws configure set ca_bundle /etc/pki/tls/certs/ca-bundle.crt --profile CMM
                amazon_backup_check
        fi
}


function ftp_software_check
{
echo -e $YELLOW"Checking If required FTP Software is installed"$RESET
echo " "
        if  rpm -q lftp > /dev/null ; then
                echo -e $GREEN"lftp Installation Found. Skipping Its Installation"$RESET
                ftp_display
        fi
                echo -e $RED"lftp Installation Not Found. Installing it"$RESET
                echo " "
                yum install lftp -y
                echo "set ssl:verify-certificate no" >> /etc/lftp.conf
                echo " "
                ftp_display
}


function ftp_backup_check
{
        if [ -f /usr/local/src/centminmod_backup/$backup_domain-ftp_path.conf  ]; then
                echo "FTP configuration file exist. Check if variables are set right"

                FTP_HOST=$(grep -i "FTP_HOST" /usr/local/src/centminmod_backup/$backup_domain-ftp_path.conf | cut -d':' -f2)
                FTP_PATH=$(grep -i "FTP_PATH" /usr/local/src/centminmod_backup/$backup_domain-ftp_path.conf | cut -d':' -f2)
                FTP_USER=$(grep -i "FTP_USER" /usr/local/src/centminmod_backup/$backup_domain-ftp_path.conf | cut -d':' -f2)
                FTP_PASSWORD=$(grep -i "FTP_PASSWORD" /usr/local/src/centminmod_backup/$backup_domain-ftp_path.conf | cut -d':' -f2)

                wget --spider --tries=1 --user=$FTP_USER --password=$FTP_PASSWORD ftps://$FTP_HOST --no-check-certificate

                        if [ $? -ne 0 ]; then
                        echo -e $GREEN"Failed to connect to ftp host."$RESET
                                echo " "
                                echo "Create FTP config again"
                                ftp_backup_config
                        else
                                echo $RED"Connected to FTP host successfully."$RESET
                                echo " "
                                ftp_display
                        fi

        else
                echo "Making new ftp configuration file"
                ftp_backup_config
        fi

}


function ftp_connection_check
{
        FTP_HOST=$(grep -i "FTP_HOST" /usr/local/src/centminmod_backup/$backup_domain-ftp_path.conf | cut -d':' -f2)
        FTP_PATH=$(grep -i "FTP_PATH" /usr/local/src/centminmod_backup/$backup_domain-ftp_path.conf | cut -d':' -f2)
        FTP_USER=$(grep -i "FTP_USER" /usr/local/src/centminmod_backup/$backup_domain-ftp_path.conf | cut -d':' -f2)
        FTP_PASSWORD=$(grep -i "FTP_PASSWORD" /usr/local/src/centminmod_backup/$backup_domain-ftp_path.conf | cut -d':' -f2)

        wget --spider --tries=1 --user=$FTP_USER --password=$FTP_PASSWORD ftps://$FTP_HOST --no-check-certificate
                if [ $? -ne 0 ]; then
                        echo " "
                        echo -e $GREEN"Failed to connect to ftp host."$RESET
                        echo " "
                        echo "Create FTP config again"
                        ftp_backup_config
                else
                        echo $RED"Connected to FTP host successfully."$RESET
                        echo " "
                fi
}

function ftp_backup_config
{
        echo " "
        read -p "$(echo -e $GREEN"Enter FTP Hostname:"$RESET) " ftp_host
        read -p "$(echo -e $GREEN"Enter FTP Backup Path e.g /backup:"$RESET) " ftp_path
        read -p "$(echo -e $GREEN"Enter FTP user:"$RESET) " ftp_user
        read -p "$(echo -e $GREEN"Enter FTP password:"$RESET) " ftp_password

        cat > /usr/local/src/centminmod_backup/$backup_domain-ftp_path.conf <<EOF
        FTP_HOST:$ftp_host
        FTP_PATH:$ftp_path
        FTP_USER:$ftp_user
        FTP_PASSWORD:$ftp_password
EOF
        ftp_connection_check
}

function gdrive_software_check
{
if [ -f "/usr/bin/gdrive" ]; then
        echo " "
        echo "gdrive Exist"
        local_disk_backup
else
        echo " "
        wget "https://docs.google.com/uc?id=0B3X9GlR6EmbnQ0FtZmJJUXEyRTA&export=download" -O /usr/bin/gdrive
        chmod 777 /usr/bin/gdrive
        echo " "
        local_disk_backup
fi
}


function start_display
{
        if [ -e "/etc/centminmod" ]; then
                echo -e $BLINK"Centminmod Installation Detected"$RESET
                echo " "
                        while [ "$bs" = 1 ]; do
                                echo -e $YELLOW"Select Main Menu Backup & Restore Options From Below:"$RESET
                                echo " "
                                echo -e $GREEN"1) Do You Want Make Local Backup e.g [/home/backup]"$RESET
                                echo " "
                                echo -e $GREEN"2) Create or Restore Amazon S3 Backup i.e [s3://bucket_name]"$RESET
                                echo " "
                                echo -e $GREEN"3) Make Remote FTP Backup"$RESET
                                echo " "
                                echo -e $GREEN"4} Restore Backup From Local"$RESET
                                echo " "
                                echo -e $GREEN"5) Site Migration CMM Source to CMM Destination"$RESET
                                echo " "
                                echo -e $GREEN"6) Make Gdrive Backup"$RESET
                                echo " "
                                echo -e $GREEN"7) Exit"$RESET
                                echo "#?"

                                read input

                                        if [ "$input" = '1' ]; then
                                                echo " "
                                                echo -e $BLINK"You Have Selected to Make Local Hardisk Backup e.g /home/backup"$RESET
                                                time=$(date +"%m_%d_%Y-%H.%M.%S")
                                                local_disk_backup

                                        elif [ "$input" = '2' ]; then
                                                echo " "
                                                echo -e $BLINK"Making Amazon S3 Backup"$RESET
                                                echo " "
                                                amazon_aws_config

                                        elif [ "$input" = '3' ]; then
                                                echo " "
                                                echo -e $BLINK"Make FTP Backup"$RESET
                                                ftp_software_check

                                        elif [ "$input" = '4' ]; then
                                                echo " "
                                                echo -e $BLINK"Restore From Local Backup"$RESET
                                                echo " "
                                                local_backup_restore

                                        elif [ "$input" = '5' ]; then
                                                echo " "
                                                echo -e $BLINK"Site Migration from CMM to CMM"$RESET
                                                echo " "
                                                site_migration

                                        elif [ "$input" = '6' ]; then
                                                echo " "
                                                echo -e $BLINK"Making Gdrive Backup"$RESET
                                                echo " "
                                                time=$(date +"%m_%d_%Y-%H.%M.%S")
                                                gdrive_software_check

                                        elif [ "$input" = '7' ]; then
                                                echo " "
                                                echo -e $BLINK"Exiting"$RESET
                                                echo " "
                                                exit

                                        else
                                                echo " "
                                                echo -e $RED"You have Selected An Invalid Option"$RESET
                                                echo " "
                                        fi
                        done
        else

                echo " "
                echo -e $RED"Centminmod Installation Not Found"$RESET
                echo " "

        fi
}


function amazon_display
{
        while [ "$bsc" = 1 ]; do
             echo " "
             echo -e $YELLOW"Select Amazon Backup Options From Below:"$RESET
             echo " "
             echo -e $GREEN"1) Do You Want To Make Amazon Backup i.e [s3://bucket_name]"$RESET
             echo " "
             echo -e $GREEN"2) Do You Want To Restore Backup From Amazon [s3://bucket_name/backup_name]"$RESET
             echo " "
             echo -e $GREEN"3) Back To Previous Screen"$RESET
             echo "#?"

             read inputs

                if [ "$inputs" = '1' ]; then
                        echo " "
                        echo -e $BLINK"You Have Selected to Make Amazon Backup i.e [s3://BUCKET]"$RESET
                        time=$(date +"%m_%d_%Y-%H.%M.%S")
                        local_disk_backup

                elif [ "$inputs" = '2' ]; then
                        echo " "
                        echo "Restoring Amazon Backup"
                        echo " "
                        echo "Coming Soon"
                        echo " "

                elif [ "$inputs" = '3' ]; then
                        echo " "
                        start_display
                        echo " "
                else

                        echo " "
                        echo -e $RED"You Have Selected An Invalid Option"$RESET
                        echo " "
                fi
        done
}


function ftp_display

{
        while [ "$bsf" = 1 ]; do
             echo " "
             echo -e $YELLOW"Select FTP Backup Options From Below:"$RESET
             echo " "
             echo -e $GREEN"1) Do You Want To Make FTP Backup"$RESET
             echo " "
             echo -e $GREEN"2) Do You Want To Restore FTP Backup"$RESET
             echo " "
             echo -e $GREEN"3) Back To Previous Screen"$RESET
             echo "#?"

             read inputss

                if [ "$inputss" = '1' ]; then
                        echo " "
                        echo -e $BLINK"You Have Selected to Make FTP Backup i.e [s3://BUCKET]"$RESET
                        time=$(date +"%m_%d_%Y-%H.%M.%S")
                        local_disk_backup

                elif [ "$inputss" = '2' ]; then
                        echo " "
                        echo "Restoring fTP Backup"
                        echo " "
                        local_disk_backup
                       echo " "

                elif [ "$inputss" = '3' ]; then
                        echo " "
                        start_display
                        echo " "
                else

                        echo " "
                        echo -e $RED"You Have Selected An Invalid Option"$RESET
                        echo " "
                fi
        done
}

mkdir -p /usr/local/src/centminmod_backup

        if [ -e "/usr/local/src/centminmod_backup/backup_path.conf" ]; then
                check_backup_path=$(grep "Backup_Path" /usr/local/src/centminmod_backup/backup_path.conf 2>/dev/null | cut -d":" -f2)

                        if [ -n "$check_backup_path" ]; then
                                echo -e $BLINK"Backup Path Exist: $check_backup_path"$RESET

                                        if [ -e "$check_backup_path" ]; then
                                                echo " "
                                                start_display
                                                echo " "
                                        else
                                                echo " "
                                                mkdir -p $check_backup_path
                                                echo  " "
                                                start_display
                                        fi
                        fi
        else
                create_path
        fi

Related posts

Leave a Comment