Linux shell script for database backup

后端 未结 10 1672
忘了有多久
忘了有多久 2020-12-02 04:59

I tried many scripts for database backup but I couldn\'t make it. I want to backup my database every hour.
I added files to \"/etc/cron.hourly/\" folder, changed its chm

相关标签:
10条回答
  • 2020-12-02 05:40

    I have prepared a Shell Script to create a Backup of MYSQL database. You can use it so that we have backup of our database(s).

        #!/bin/bash
        export PATH=/bin:/usr/bin:/usr/local/bin
        TODAY=`date +"%d%b%Y_%I:%M:%S%p"`
    
        ################################################################
        ################## Update below values  ########################
        DB_BACKUP_PATH='/backup/dbbackup'
        MYSQL_HOST='localhost'
        MYSQL_PORT='3306'
        MYSQL_USER='auriga'
        MYSQL_PASSWORD='auriga@123'
        DATABASE_NAME=( Project_O2 o2)
        BACKUP_RETAIN_DAYS=30   ## Number of days to keep local backup copy; Enable script code in end of th script
    
        #################################################################
        { mkdir -p ${DB_BACKUP_PATH}/${TODAY}
            echo "
                                    ${TODAY}" >> ${DB_BACKUP_PATH}/Backup-Report.txt
        } || {
            echo "Can not make Directry"
            echo "Possibly Path is wrong"
        }
        { if ! mysql -u ${MYSQL_USER} -p${MYSQL_PASSWORD} -e 'exit'; then
            echo 'Failed! You may have Incorrect PASSWORD/USER ' >> ${DB_BACKUP_PATH}/Backup-Report.txt
            exit 1
        fi
    
            for DB in "${DATABASE_NAME[@]}"; do
                if ! mysql -u ${MYSQL_USER} -p${MYSQL_PASSWORD} -e "use "${DB}; then
                    echo "Failed! Database ${DB} Not Found on ${TODAY}" >> ${DB_BACKUP_PATH}/Backup-Report.txt
    
                else
                    # echo "Backup started for database - ${DB}"            
                    # mysqldump -h localhost -P 3306 -u auriga -pauriga@123 Project_O2      # use gzip..
    
                    mysqldump -h ${MYSQL_HOST} -P ${MYSQL_PORT} -u ${MYSQL_USER} -p${MYSQL_PASSWORD} \
                              --databases ${DB} | gzip > ${DB_BACKUP_PATH}/${TODAY}/${DB}-${TODAY}.sql.gz
    
                    if [ $? -eq 0 ]; then
                        touch ${DB_BACKUP_PATH}/Backup-Report.txt
                        echo "successfully backed-up of ${DB} on ${TODAY}" >> ${DB_BACKUP_PATH}/Backup-Report.txt
                        # echo "Database backup successfully completed"
    
                    else
                        touch ${DB_BACKUP_PATH}/Backup-Report.txt
                        echo "Failed to backup of ${DB} on ${TODAY}" >> ${DB_BACKUP_PATH}/Backup-Report.txt
                        # echo "Error found during backup"
                        exit 1
                    fi
                fi
            done
        } || {
            echo "Failed during backup"
            echo "Failed to backup on ${TODAY}" >> ${DB_BACKUP_PATH}/Backup-Report.txt
            # ./myshellsc.sh 2> ${DB_BACKUP_PATH}/Backup-Report.txt
        }
    
        ##### Remove backups older than {BACKUP_RETAIN_DAYS} days  #####
    
        # DBDELDATE=`date +"%d%b%Y" --date="${BACKUP_RETAIN_DAYS} days ago"`
    
        # if [ ! -z ${DB_BACKUP_PATH} ]; then
        #       cd ${DB_BACKUP_PATH}
        #       if [ ! -z ${DBDELDATE} ] && [ -d ${DBDELDATE} ]; then
        #             rm -rf ${DBDELDATE}
        #       fi
        # fi
    
        ### End of script ####
    

    In the script we just need to give our Username, Password, Name of Database(or Databases if more than one) also Port number if Different.

    To Run the script use Command as:

    sudo ./script.sc
    

    I also Suggest that if You want to see the Result in a file Like: Failure Occurs or Successful in backing-up, then Use the Command as Below:

    sudo ./myshellsc.sh 2>> Backup-Report.log
    

    Thank You.

    0 讨论(0)
  • #!/bin/bash
    
    # Add your backup dir location, password, mysql location and mysqldump        location
    DATE=$(date +%d-%m-%Y)
    BACKUP_DIR="/var/www/back"
    MYSQL_USER="root"
    MYSQL_PASSWORD=""
    MYSQL='/usr/bin/mysql'
    MYSQLDUMP='/usr/bin/mysqldump'
    DB='demo'
    
    #to empty the backup directory and delete all previous backups
    rm -r $BACKUP_DIR/*  
    
    mysqldump -u root -p'' demo | gzip -9 > $BACKUP_DIR/demo$date_format.sql.$DATE.gz
    
    #changing permissions of directory 
    chmod -R 777 $BACKUP_DIR
    
    0 讨论(0)
  • 2020-12-02 05:43

    Create a script similar to this:

    #!/bin/sh -e
    
    location=~/`date +%Y%m%d_%H%M%S`.db
    
    mysqldump -u root --password=<your password> database_name > $location
    
    gzip $location
    

    Then you can edit the crontab of the user that the script is going to run as:

    $> crontab -e
    

    And append the entry

    01 * * * * ~/script_path.sh
    

    This will make it run on the first minute of every hour every day.

    Then you just have to add in your rolls and other functionality and you are good to go.

    0 讨论(0)
  • 2020-12-02 05:44

    Here is my mysql backup script for ubuntu in case it helps someone.

    #Mysql back up script
    
    start_time="$(date -u +%s)"
    
    now(){
    date +%d-%B-%Y_%H-%M-%S
    }
    
    ip(){
    /sbin/ifconfig eth0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://'
    }
    
    filename="`now`".zip
    backupfolder=/path/to/any/folder
    fullpathbackupfile=$backupfolder/$filename
    db_user=xxx
    db_password=xxx
    db_name=xxx
    
    printf "\n\n"
    printf "******************************\n"
    printf "Started Automatic Mysql Backup\n"
    printf "******************************\n"
    printf "TIME: `now`\n"
    printf "IP_ADDRESS: `ip` \n"
    printf "DB_SERVER_NAME: DB-SERVER-1\n"
    
    printf "%sBACKUP_FILE_PATH $fullpathbackupfile\n"
    
    printf "Starting Mysql Dump \n"
    
    mysqldump -u $db_user -p$db_password $db_name| pv | zip > $fullpathbackupfile
    
    end_time="$(date -u +%s)"
    
    elapsed=$(($end_time-$start_time))
    
    printf "%sMysql Dump Completed In $elapsed seconds\n"
    
    printf "******************************\n"
    

    PS: Rememember to install pv and zip in your ubuntu

    sudo apt install pv
    sudo apt install zip
    

    Here is how I set crontab by using crontab -e in ubuntu to run every 6 hours

    0 */6 * * * sh /path/to/shfile/backup-mysql.sh >> /path/to/logs/backup-mysql.log 2>&1
    

    Cool thing is it will create a zip file which is easier to unzip from anywhere

    0 讨论(0)
提交回复
热议问题