Rover12421's Blog

The End.

Linux下的Mysql备份脚本

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
45
46
#!/bin/bash 
#    @By Rover12421
#    Email:Rover12421@163.com
# MySql 备份脚本。此备份使用mysqldump进行完全备份。
# 可以添加到计划任务,定时执行
# 注:“=”前后不能有空格
#========================================================================================================================
MysqlDump=mysqldump                       #使用mysqldump备份,如果未设置mysql的环境变量,此处改为 "mysqldump" 文件的绝对路径
Host=localhost                            #需要备份的Mysql服务器,如果不是在本机,请确保有访问权限
Port=3306                                 #MySql服务器的端口
User=root                                 #备份所使用的账号,请确保此账号有备份设定数据库的权限
Password=root                             #备份账号的密码
Database=mysql                            #需要备份的数据库,有多个数据库请用空格分开,并加上'号.eg. Database='db1 db2 db3'
BackDir=./                                #备份数据库的路径目录,'./'为当前脚本所在的位置
FileName=$(date +'%Y%m%d_%H%M%S').sql     #文件名格式 %Y年%m月%d日 %H时%M分%S秒 .sql 扩展名,可以根据自己的需要更改

Compress=Ture

PeriodicallyDelete=Ture                   #设置为Ture,Periodically生效,将定期删除备份
Periodically=7                            #定期删除周期(天),如果为0,则备份后马上删除,有可能导致收不到邮件
DeleteFileName=$(date -d "$Periodically days ago" +'%Y%m%d')    #设置删除文件规则,注意设置规则,以免发生错误

SendEmail=Ture                            #设置为Ture,将使用Mutt发送备份文件,需要mutt支持
Email=rover12421@163.com                  #接收备份邮件的邮箱
Subject="$(date +'%D %T') Mysql备份"       #邮件主题
Body=Mysql备份文件名:$FileName              #邮件内容
SendFileName=$FileName                    #附件,发送备份文件名

#========================================================================================================================
#备份
$MysqlDump -h $Host -P $Port -u $User -p$Password --databases $Database > $BackDir/$FileName
#压缩并删除被压缩备份
if [ $Compress = "Ture" ]; then
    tar zcf $BackDir/$FileName.tar.gz $BackDir/$FileName
    SendFileName=$FileName.tar.gz
    rm -rf $FileName
fi

#发送备份到邮件
if [ $SendEmail = "Ture" ]; then
    echo \"$Body\" | mutt -a $BackDir/$SendFileName -s "$Subject" $Email
fi

if [ $PeriodicallyDelete = "Ture" ]; then
    rm -rf $BackDir/$DeleteFileName*
fi

Comments