首页 > 数据库 > MySQL > 正文

MySQL自动化 全量+增量 配备脚本

2024-07-24 12:36:05
字体:
来源:转载
供稿:网友
        MySQL自动化 全量+增量 配备脚本:

  一、MySQL的日常备份方案:
 
  全备+增量备份:
 
  1、周日凌晨三点进行全备;
 
  2、周一到周日增量备份。
 
  不是往常的周日全备份,周一到周六增量备份,这样如果周日数据库在完全备份前出问题,恢复完成后,会少周日一天的数据量,所以七天增量备份,周日全备可以更好的保全数据。
 
  这是备份周期演示表:
 
  Sun 3:00------Mon 3:00-----------------Tue 3:00----------Wed 3:00----------Thu 3:00----------Fri 3:00----------Sat 3:00----------Sun 3:00
  (flush)Sun full---(flush)Sun->Mon binlog---(flush)Mon->Tue---(flush)Tue->Wed---(flush)Wed->Thu---(flush)Thu->Fri---(flush)Fri->Sat---(flush)Sun full---(flush)Sun->Mon binlog---(flush)Mon->Tue---(flush)Tue->Wed---(flush)Wed->Thu---(flush)Thu->Fri---(flush)Fri->Sat---(flush)Sun full
  二、备份脚本:
 
  模块化定制,可以随意移动,调节备份策略!
 
  变量栏的帐号密码,文件路径根据自己实际环境可以进行修改,自由度比较高,模块函数全变量,适用度较高,但是可能还有不完善的地方,欢迎提出,谢谢!
 
  vim /root/mysql_bakup.sh
 
  #!/bin/bash
  #Date:2017/5/2
  #Author:wangpengtai
  #Blog:http://wangpengtai.blog.51cto.com
  #At Sunday, we will backup the completed databases and the incresed binary log during Saturday to Sunday.
  #In other weekdays, we only backup the increaing binary log at that day!
  ################################
  #the globle variables for MySQL#
  ################################
  DB_USER='root'
  DB_PASSWORD='123456'
  DB_PORT='3306'
  BACKUPDIR='/tmp/mysqlbakup'
  BACKUPDIR_OLDER='/tmp/mysqlbakup_older'
  DB_PID='/data/mysql/log/mysqld.pid'
  DB_SOCK='/data/mysql/log/mysql.sock'
  LOG_DIR='/data/mysql/log'
  BACKUP_LOG='/tmp/mysqlbakup/backup.log'
  DB_BIN='/usr/local/mysql/bin'
  #time variables for completed backup
  FULL_BAKDAY='Sunday'
  TODAY=`date +%A`
  DATE=`date +%Y%m%d`
  ###########################
  #time variables for binlog#
  ###########################
  #liftcycle for saving binlog
  DELETE_OLDLOG_TIME=$(date "-d 14 day ago" +%Y%m%d%H%M%S)
  #The start time point to backup binlog, the usage of mysqlbinlog is --start-datetime, --stop-datetime, time format is %Y%m%d%H%M%S, eg:20170502171054, time zones is  [start-datetime, stop-datetime)
  #The date to start backup binlog is yesterday at this very moment!
  START_BACKUPBINLOG_TIMEPOINT=$(date "-d 1 day ago" +"%Y-%m-%d %H:%M:%S")
 
  #BINLOG_LIST=`cat /data/mysql/log/mysql-bin.index`
 
  #注意在my.cnf中配置binlog文件位置时需要使用绝对路径,一定想成好习惯,不要给别人挖坑!!
  #####################举例########################
  #[mysqld]
  #log_bin = /var/lib/mysql/mysql-bin
  #####################举例########################
  BINLOG_INDEX='/data/mysql/log/mysql-bin.index'
  ##############################################
  #Judge the mysql process is running or not.  #
  #mysql stop return 1, mysql running return 0.#
  ##############################################
  function DB_RUN(){
      if test -a $DB_PID && test -a $DB_SOCK;then
          return 0
 
  function OLDER_BACKDIR_EXSIT(){
      if test -d $BACKUPDIR_OLDER;then
  #        echo "$BACKUPDIR_OLDER was exist."
          return 0
      else
          echo "$BACKUPDIR_OLDER is not exist, now create it."
          mkdir -pv $BACKUPDIR_OLDER
  #        return 1
      fi
  }
  function BAKUP_CLEANER(){
      #move the backuped file that created time out of 7 days to the BACKUPDIR_OLDER directory
      returnkey=`find $BACKUPDIR -name "*.sql.gz" -mtime +7 -exec ls -lh {} /;`
      returnkey_old=`find $BACKUPDIR_OLDER -name "*.sql.gz" -mtime +14 -exec ls -lh {} /;`
      if [[ $returnkey != '' ]];then
 
          echo "----------------------"
          echo "Moving the older backuped file out of 7 days to $BACKUPDIR_OLDER."
          echo "The moved file list is:"
          find $BACKUPDIR -name "*.sql.gz" -mtime +7 -exec mv {} $BACKUPDIR_OLDER /;
          echo "-----------------------"
      elif [[ $returnkey_old != '' ]];then
          #delete the backuped file that created time out of 14 days from BACKUPDIR_OLDER directory.
          echo "Delete the older backuped file out of 14 days from $BACKUPDIR_OLDER."
          echo "The deleted files list is:"
          find $BACKUPDIR_OLDER -name "*.sql.gz" -mtime +14 -exec rm -fr {} /;
 
  三、测试方法:
 
  使用了一个测试脚本,修改日期,达到一个月的演示效果。
 
  #!/bin/bash
  for day in {1..30}
  do
      date -s "2017-06-$day 12:00:00"
      /bin/bash /root/bakup/mysql_backup.sh
  done
  四、脚本使用方法:
 
  crontab -e
  0 3 * * *  /bin/bash /root/bakup/mysql_bakup.sh > /dev/null 2>&1 空格
 
  #加个空格,不然有些机器不能执行脚本。

(编辑:武林网)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表