一个简单的MySQL备份Shell脚本

时间:2022-03-05 00:03:21

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

#!/bin/bash

#this is a script of mysql backup

if [ ! -d /mydata/data1/backup ] ;then

 mkdir /mydata/data1/backup

fi

cd /mydata/data1/backup

file=$(find . -type f -mtime -7 | grep .*all.sql)  #查找7天内是否有备份的文件

echo $file

if [ -z $file ] ;then

 echo "backup all databases..."

 backupfile=$(date +%F-%H-%M-%S)

 mysqldump -uroot --lock-all-tables --flush-logs --master-data=2 --all-databases > /mydata/data1/backup/"$backupfile-all.sql"

 if [ $? -eq 0 ] ;then

 echo "Accomplish,file is $backupfile-all.sql !"

 else

 echo " Failure !!! "

 fi

else                   #查找倒数第二大的二进制文件,作增量备份

 cd ..

 echo "All database backups ,now start doing incremental backups!"

    a=1

    b=1

    for file in $(ls |grep mysql-bin |grep -v index);do

        num=$(echo $file |cut -d. -f2 )

        if [ $num -gt $a ];then

            a=$num

        fi

    done

    unset num file

    num=1 

    for file in $(ls |grep mysql-bin |grep -v index);do

        num=$(echo $file |cut -d. -f2 )

        if [ $num -gt $b -a $num -ne $a ] ; then

            b=$num

            tmp=$file

        fi

    done

    file1=$(echo $tmp|cut -d. -f1)

    file2=$(echo $tmp|cut -d. -f2)

    mysqlbinlog $tmp > /mydata/data1/backup/"$file1-$file2.sql"

 if [ $? -eq 0 ] ;then

 echo "Backup completed,file is "$file1-$file2.sql""

 fi

fi

 

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