各位用户为了找寻关于一个简单的MySQL备份Shell脚本的资料费劲了很多周折。这里教程网为您整理了关于一个简单的MySQL备份Shell脚本的相关资料,仅供查阅,以下为您介绍关于一个简单的MySQL备份Shell脚本的详细内容
?
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备份其二进制日志文件。