Linux shell script for database backup

后端 未结 10 1671
忘了有多久
忘了有多久 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条回答
  • After hours and hours work, I created a solution like the below. I copy paste for other people that can benefit.

    First create a script file and give this file executable permission.

    # cd /etc/cron.daily/
    # touch /etc/cron.daily/dbbackup-daily.sh
    # chmod 755 /etc/cron.daily/dbbackup-daily.sh
    # vi /etc/cron.daily/dbbackup-daily.sh
    

    Then copy following lines into file with Shift+Ins

    #!/bin/sh
    now="$(date +'%d_%m_%Y_%H_%M_%S')"
    filename="db_backup_$now".gz
    backupfolder="/var/www/vhosts/example.com/httpdocs/backups"
    fullpathbackupfile="$backupfolder/$filename"
    logfile="$backupfolder/"backup_log_"$(date +'%Y_%m')".txt
    echo "mysqldump started at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
    mysqldump --user=mydbuser --password=mypass --default-character-set=utf8 mydatabase | gzip > "$fullpathbackupfile"
    echo "mysqldump finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
    chown myuser "$fullpathbackupfile"
    chown myuser "$logfile"
    echo "file permission changed" >> "$logfile"
    find "$backupfolder" -name db_backup_* -mtime +8 -exec rm {} \;
    echo "old files deleted" >> "$logfile"
    echo "operation finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
    echo "*****************" >> "$logfile"
    exit 0
    

    Edit:
    If you use InnoDB and backup takes too much time, you can add "single-transaction" argument to prevent locking. So mysqldump line will be like this:

    mysqldump --user=mydbuser --password=mypass --default-character-set=utf8
              --single-transaction mydatabase | gzip > "$fullpathbackupfile"
    
    0 讨论(0)
  • 2020-12-02 05:27

    As a DBA, You must schedule the backup of MySQL Database in case of any issues so that you can recover your databases from the current backup.

    Here, we are using mysqldump to take the backup of mysql databases and the same you can put into the script.

    [orahow@oradbdb DB_Backup]$ cat .backup_script.sh

    #!/bin/bash
    # Database credentials
    user="root"
    password="1Loginxx"
    db_name="orahowdb"
    v_cnt=0
    logfile_path=/DB_Backup
    touch "$logfile_path/orahowdb_backup.log"
    # Other options
    backup_path="/DB_Backup"
    date=$(date +"%d-%b-%Y-%H-%M-%p")
    # Set default file permissions
    

    Continue Reading .... MySQL Backup

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

    I got the same issue. But I manage to write a script. Hope this would help.

    #!/bin/bash
    # Database credentials
    user="username"
    password="password"
    host="localhost"
    db_name="dbname"
    # Other options
    backup_path="/DB/DB_Backup"
    date=$(date +"%d-%b-%Y")
    # Set default file permissions
    umask 177
    # Dump database into SQL file
    mysqldump --user=$user --password=$password --host=$host $db_name >$backup_path/$db_name-$date.sql
    
    # Delete files older than 30 days
    find $backup_path/* -mtime +30 -exec rm {} \;
    
    
    #DB backup log
    echo -e "$(date +'%d-%b-%y  %r '):ALERT:Database has been Backuped"    >>/var/log/DB_Backup.log
    
    0 讨论(0)
  • 2020-12-02 05:33

    Now, copy the following content in a script file (like: /backup/mysql-backup.sh) and save on your Linux system.

        #!/bin/bash
    
        export PATH=/bin:/usr/bin:/usr/local/bin
        TODAY=`date +"%d%b%Y"`
    
        DB_BACKUP_PATH='/backup/dbbackup'
        MYSQL_HOST='localhost'
        MYSQL_PORT='3306'
        MYSQL_USER='root'
        MYSQL_PASSWORD='mysecret'
        DATABASE_NAME='mydb'
        BACKUP_RETAIN_DAYS=30   
    
        mkdir -p ${DB_BACKUP_PATH}/${TODAY}
        echo "Backup started for database - ${DATABASE_NAME}"
    
        mysqldump -h ${MYSQL_HOST} \
       -P ${MYSQL_PORT} \
       -u ${MYSQL_USER} \
       -p${MYSQL_PASSWORD} \
       ${DATABASE_NAME} | gzip > ${DB_BACKUP_PATH}/${TODAY}/${DATABASE_NAME}-${TODAY}.sql.gz
    
    if [ $? -eq 0 ]; then
      echo "Database backup successfully completed"
    else
      echo "Error found during backup"
      exit 1
    fi
    
    
    ##### 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
    

    After creating or downloading script make sure to set execute permission to run properly.

    $ chmod +x /backup/mysql-backup.sh
    

    Edit crontab on your system with crontab -e command. Add following settings to enable backup at 3 in the morning.

    0 3 * * * root /backup/mysql-backup.sh
    
    0 讨论(0)
  • 2020-12-02 05:36
    #!/bin/sh
    #Procedures = For DB Backup
    #Scheduled at : Every Day 22:00
    
    v_path=/etc/database_jobs/db_backup
    logfile_path=/etc/database_jobs
    v_file_name=DB_Production
    v_cnt=0
    
    MAILTO="abc@as.in"
    touch "$logfile_path/kaka_db_log.log"
    
    #DB Backup
    mysqldump -uusername -ppassword -h111.111.111.111 ddbname > $v_path/$v_file_name`date +%Y-%m-%d`.sql 
    if [ "$?" -eq 0 ]
      then
       v_cnt=`expr $v_cnt + 1`
      mail -s "DB Backup has been done successfully" $MAILTO < $logfile_path/db_log.log
     else
       mail -s "Alert : kaka DB Backup has been failed" $MAILTO < $logfile_path/db_log.log
       exit
    fi
    
    0 讨论(0)
  • 2020-12-02 05:36

    You might consider this Open Source tool, matiri, https://github.com/AAFC-MBB/matiri which is a concurrent mysql backup script with metadata in Sqlite3. Features:

    • Multi-Server: Multiple MySQL servers are supported whether they are co-located on the same or separate physical servers.
    • Parallel: Each database on the server to be backed up is done separately, in parallel (concurrency settable: default: 3)
    • Compressed: Each database backup compressed
    • Checksummed: SHA256 of each compressed backup file stored and the archive of all files
    • Archived: All database backups tar'ed together into single file
    • Recorded: Backup information stored in Sqlite3 database

    Full disclosure: original matiri author.

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