MySQL——全库备份和增量备份——一键执行脚本

x33g5p2x  于2021-10-31 转载在 Mysql  
字(1.9k)|赞(0)|评价(0)|浏览(549)

1.全量备份

  1. vim all_db_bak.sh
  2. #!/bin/bash
  3. #MySQL 全库备份
  4. PATH="/usr/local/mysql/bin:$PATH"
  5. BAK1=/bak1
  6. BAK2=/bak2
  7. TIME=$(date +"%F:%H:%M:%S")
  8. USER=root
  9. PASS=123456
  10. if [ ! -d $BAK1 -o ! -d $BAK2 ];then
  11. mkdir $BAK1
  12. mkdir $BAK2
  13. mysqldump -u$USER -p$PASS --all-databases > /$BAK1/all_${TIME}.sql
  14. cp $BAK1/all_${TIME}.sql $BAK2
  15. echo -e "\033[32mMySQL数据已全库备份到 ${BAK2} 目录\033[0m"
  16. else
  17. mysqldump -u$USER -p$PASS --all-databases > /$BAK1/all_${TIME}.sql
  18. cp $BAK1/all_${TIME}.sql $BAK2
  19. echo -e "\033[32mMySQL数据已全库备份到 ${BAK2} 目录\033[0m"
  20. fi

2.增量备份

  • 开启mysql 的 logbin日志功能
  1. [mysqld]
  2. log-bin = "/home/mysql/logbin.log"
  3. binlog-format = ROW
  4. log-bin-index = "/home/mysql/logindex"
  5. binlog_cache_size=32m
  6. max_binlog_cache_size=512m
  7. max_binlog_size=512m
  • 重启 mysql,其中路径 /home/mysql 的用户和组要改成 mysql
  • 建立以下目录
  1. mkdir -p /home/mysql/backup/daily
  • 增量脚本
  1. vim binlogbak.sh
  2. #!/bin/bash
  3. PATH="/usr/local/mysql/bin:$PATH"
  4. export LANG=en_US.UTF-8
  5. BakDir=/home/mysql/backup/daily
  6. BinDir=/home/mysql
  7. LogFile=/home/mysql/backup/binlog.log
  8. BinFile=/home/mysql/logindex.index
  9. #注意修改密码
  10. mysqladmin -uroot -p123456 flush-logs
  11. #这个是用于产生新的 mysql-bin.00000* 文件
  12. Counter=`wc -l $BinFile |awk '{print $1}'`
  13. NextNum=0
  14. #这个 for 循环用于比对 $Counter,$NextNum 这两个值来确定文件是不是存在或最新的
  15. for file in `cat $BinFile`
  16. do
  17. base=`basename $file`
  18. #basename用于截取mysql-bin.00000*文件名,去掉./mysql-bin.000005前面的./
  19. NextNum=`expr $NextNum + 1`
  20. if [ $NextNum -eq $Counter ]
  21. then
  22. echo $base skip! >> $LogFile
  23. else
  24. dest=$BakDir/$base
  25. if(test -e $dest)
  26. #test -e用于检测目标文件是否存在,存在就写exist!到$LogFile
  27. then
  28. echo $base exist! >> $LogFile
  29. else
  30. cp $BinDir/$base $BakDir
  31. echo $base copying >> $LogFile
  32. fi
  33. fi
  34. done
  35. echo `date +"%Y年%m月%d日 %H:%M:%S"` Bakup succ! >> $LogFile

3.开启周期性任务

  1. vim /etc/crontab
  2. #每个星期日凌晨 3:00 执行完全备份脚本
  3. 0 3 * * 0 /home/mysql/all_db_bak.sh >/dev/null 2>&1
  4. #周一到周六凌晨3:00做增量备份
  5. 0 3 * * 1-6 /home/mysql/binlogbak.sh >/dev/null 2>&1
  6. crontab /etc/crontab #使上述定时任务生效
  7. crontab -l #查看定时任务

/binlogbak.sh >/dev/null 2>&1

crontab /etc/crontab /#使上述定时任务生效
crontab -l /#查看定时任务

相关文章

最新文章

更多