首页 > 数据库 > MySQL > 正文

一个简单的MySQL备份Shell脚本

2024-07-24 13:07:40
字体:
来源:转载
供稿:网友

这篇文章主要介绍了一个简单的MySQL备份Shell脚本,本文直接给出代码实例,需要的朋友可以参考下

 

 
  1. #!/bin/bash 
  2. #this is a script of mysql backup  
  3. if [ ! -d /mydata/data1/backup ] ;then 
  4. mkdir /mydata/data1/backup 
  5. fi 
  6. cd /mydata/data1/backup 
  7. file=$(find . -type f -mtime -7 | grep .*all.sql) #查找7天内是否有备份的文件 
  8. echo $file 
  9. if [ -z $file ] ;then 
  10. echo "backup all databases..." 
  11. backupfile=$(date +%F-%H-%M-%S) 
  12. mysqldump -uroot --lock-all-tables --flush-logs --master-data=2 --all-databases > /mydata/data1/backup/"$backupfile-all.sql" 
  13. if [ $? -eq 0 ] ;then 
  14. echo "Accomplish,file is $backupfile-all.sql !" 
  15. else 
  16. echo " Failure !!! " 
  17. fi 
  18. else #查找倒数第二大的二进制文件,作增量备份 
  19. cd .. 
  20. echo "All database backups ,now start doing incremental backups!" 
  21. a=1  
  22. b=1  
  23. for file in $(ls |grep mysql-bin |grep -v index);do 
  24. num=$(echo $file |cut -d. -f2 ) 
  25. if [ $num -gt $a ];then 
  26. a=$num 
  27. fi 
  28. done 
  29. unset num file 
  30. num=1  
  31. for file in $(ls |grep mysql-bin |grep -v index);do 
  32. num=$(echo $file |cut -d. -f2 ) 
  33. if [ $num -gt $b -a $num -ne $a ] ; then 
  34. b=$num 
  35. tmp=$file 
  36. fi 
  37. done 
  38. file1=$(echo $tmp|cut -d. -f1) 
  39. file2=$(echo $tmp|cut -d. -f2) 
  40. mysqlbinlog $tmp > /mydata/data1/backup/"$file1-$file2.sql" 
  41. if [ $? -eq 0 ] ;then 
  42. echo "Backup completed,file is "$file1-$file2.sql"" 
  43. fi 
  44. fi 

说明:此脚本每七天做一次完全备份,以后每天做一次增量备份,完全备份使用mysqldump客户端工具,增量备份使用mysqlbinlog备份其二进制日志文件。

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