Linux自动备份网站文件和数据库上传到FTP空间同时发送到Email脚本

vps自动备份网站数据发送到email和ftp

本备份主要功能:

1.可以自动定时备份指定的网站数据跟数据库到指定的FTP空间!

2.自动删除旧的备份数据,可以随意设置保留天数!

3.数据库备份采取三保险,备份到FTP同时也备份到设置的EMAIL(附件),直接打包数据库,可到处数据库双备份!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
MYSQL_USER=root                  #mysql用户名

MYSQL_PASS=123456                #mysql密码

MAIL_TO=whhack@whhack.com        #数据库发送到的邮箱

FTP_USER=whhack                  #ftp用户名

FTP_PASS=123456                  #ftp密码

FTP_IP=whhack.com                #ftp地址

FTP_backup=backup                #ftp上存放备份文件的目录,自己上ftp上面建

WEB_DATA=/home/www               #要备份的网站数据

开始前,需要安装或者事前的工作:
1.mkdir -p /home/backup #建立备份目录
2.安装Email发送组件 yum install sendmail mutt
3.安装zip压缩 yum install zip
4.安装crontab
yum -y install gcc gcc-c++ autoconf vixie-cron
yum -y install gcc gcc-c++ autoconf crontabs

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#要修改的地方开始

MYSQL_USER=root                     #mysql用户名

MYSQL_PASS=123456                   #mysql密码

MAIL_TO=whhack@whhack.com           #数据库发送到的邮箱

FTP_USER=whhack                     #ftp用户名

FTP_PASS=123456                     #ftp密码

FTP_IP=whhack.com                   #ftp地址

FTP_backup=backup                   #ftp上存放备份文件的目录,这个要自己得ftp上面建的

WEB_DATA=/home/www                  #要备份的网站数据

#要修改的地方结束



#定义数据库的名字和旧数据库的名字

DataBakName=Data_$(date +"%Y%m%d").tar.gz

WebBakName=Web_$(date +%Y%m%d).tar.gz

OldData=Data_$(date -d -5day +"%Y%m%d").tar.gz

OldWeb=Web_$(date -d -5day +"%Y%m%d").tar.gz

#删除本地3天前的数据

rm -rf /home/backup/Data_$(date -d -3day +"%Y%m%d").tar.gz /home/backup/Web_$(date -d -3day +"%Y%m%d").tar.gz

cd /home/backup

#导出数据库,一个数据库一个压缩文件

for db in `/usr/local/mysql/bin/mysql -u$MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do

    (/usr/local/mysql/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db} | gzip -9 - > ${db}.sql.gz)

done

#压缩数据库文件为一个文件

zip -r /home/backup/data.zip /usr/local/mysql/var/    #这里是数据库目录直接打包,可以选择性打包

zip -r /home/backup/sqldata.zip /home/backup/*.sql.gz

tar zcf /home/backup/$DataBakName  /home/backup/*.zip

rm -rf /home/backup/*.zip

rm -rf /home/backup/*.sql.gz

#发送数据库到Email,如果数据库压缩后太大,请注释这行

echo "主题:数据库备份" | mutt -a /home/backup/$DataBakName -s "内容:数据库备份" $MAIL_TO

#压缩网站数据

tar zcf /home/backup/$WebBakName $WEB_DATA

#上传到FTP空间,删除FTP空间5天前的数据

ftp -v -n $FTP_IP << END

user $FTP_USER $FTP_PASS

type binary

cd $FTP_backup

delete $OldData

delete $OldWeb

put $DataBakName

put $WebBakName

bye

END

保存以上代码脚本为aotoback.sh

这里顺便说下: bash脚本:/bin/sh^M:bad interpreter: No such file or directory

原因: 与一些windows文件在linux下打开后出现^M符号类似。

解决方法: 在vim中查看文件的fileformat, 如果为DOS则改为unix

1
2
3
set fileformat

set fileformat=unix

给备份脚本权限

1
chmod +x aotoback.sh

crontab 实现自动备份

1
crontab -e

每天晚上4点开始备份

1
00 4 * * * /home/aotoback.sh

下面说一下一些技巧:
如果你只想备份某一个数据库,可以建立一个只对你要备份的数据库有权限的用户,在上面填写此用户即可实现!
然后就是备份网站不需要连程序都备份,如果数据太大,那么备份时间又长,还会导致一些问题,可以只备份附件等目录即可,可以自行修改,灵活处理!

最后发一个DZX2备份的实例,可以参考:

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/bin/bash

MYSQL_USER=webback

MYSQL_PASS=123456

MAIL_TO=whhack.com@gmail.com

FTP_USER=whhack

FTP_PASS=123456

FTP_IP=whhack.com

FTP_backup=web.com/day



DataBakName=Data_$(date +"%Y%m%d").tar.gz

WebBakName=Web_$(date +%Y%m%d).tar.gz

OldData=Data_$(date -d -5day +"%Y%m%d").tar.gz

OldWeb=Web_$(date -d -32day +"%Y%m%d").tar.gz



rm -rf /home/backup/day/Data_$(date -d -3day +"%Y%m%d").tar.gz /home/backup/day/Web_$(date -d -3day +"%Y%m%d").tar.gz

cd /home/backup/day



for db in `/usr/local/mysql/bin/mysql -u$MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do

    (/usr/local/mysql/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db} --skip-lock-tables | gzip -9 - > ${db}.sql.gz)

done



zip -r /home/backup/day/web001.zip /usr/local/mysql/var/web/

zip -r /home/backup/day/sql000.zip /home/backup/day/*.sql.gz

tar zcf /home/backup/day/$DataBakName  /home/backup/day/*.zip

rm -rf /home/backup/day/*.zip

rm -rf /home/backup/day/*.sql.gz



echo "数据库:web-mysql-beifen_$(date +"%Y%m%d")" | mutt -a /home/backup/day/$DataBakName -s "数据库:web-mysql-beifen_$(date +"%Y%m%d")" $MAIL_TO



WEB_DATA1=/home/wwwroot/web.com/data/attachment/forum/$(date -d -1day +"%Y%m/%d")/

WEB_DATA2=/home/wwwroot/web.com/data/attachment/album/$(date -d -1day +"%Y%m/%d")/

WEB_DATA3=/home/wwwroot/web.com/data/attachment/portal/$(date -d -1day +"%Y%m/%d")/

zip -r /home/backup/day/forum.zip $WEB_DATA1

zip -r /home/backup/day/album.zip $WEB_DATA2

zip -r /home/backup/day/portal.zip $WEB_DATA3



tar zcf /home/backup/day/$WebBakName /home/backup/day/*.zip

rm -rf /home/backup/day/*.zip



echo "每日附件:web-web-beifen_$(date +"%Y%m%d")" | mutt -a /home/backup/day/$WebBakName -s "每日附件:web-web-beifen_$(date +"%Y%m%d")" $MAIL_TO



/usr/local/php/sbin/php-fpm restart



ftp -v -n $FTP_IP << END

user $FTP_USER $FTP_PASS

type binary

cd $FTP_backup

delete $OldData

delete $OldWeb

put $DataBakName

put $WebBakName

bye

END

原文奉上

原文链接:https://xiaohost.com/441.html,转载请注明出处。
0

评论0

请先