共计 5782 个字符,预计需要花费 15 分钟才能阅读完成。
一、全网备份
1.1 我的项目环境筹备
主机名 | 外网 IP | 内网 IP | 服务器 |
---|---|---|---|
backup | 10.0.0.203 | 172.16.1.203 | rsync 服务器 |
nfs-1 | 10.0.0.204 | 172.16.1.204 | nfs 服务器 |
web-1 | 10.0.0.205 | 172.16.1.205 | web 服务器 |
1.2 我的项目需要
公司中的 web 集群和 nfs 服务器都须要进行备份,避免宕机和磁盘损坏,如果一旦服务器和磁盘损坏,结果不堪设想,
- 标准对立,所有服务器的备份目录必须都为 /backup
- 须要备份的零碎配置文件
a. 定时工作服务的配置文件(/var/spool/cron/root)
b. 开机自启动配置文件(/etc/rc.local)
c. 日常脚本目录(/server/scripts)
d. 防火墙 iptables 配置文件(/etc/sysconfig/iptables-config)
e. web 的站点目录和日志目录(/var/www/html/ /app/log/)- web 服务器保留打包后 7 天后的备份数据
- 备份服务器上,保留每周日的所有数据正本,其余要保留 180 天的数据
- 备份的数据服务器按 IP 地址为目录保留,备份的文件应用工夫名字保留
- 确保备份的数据完整性,在备份服务器上对备份的数据每天查看,并将备份胜利及失败的后果发到邮箱
1.3 我的项目步骤
1.3.1 创立我的项目所需的目录
mkdir -p /backup // 所有服务器
mkdir /server/scripts //nfs 服务和 web 服务器
1.3.2 客户端须要压缩的数据信息
压缩 nfs 和 web 服务
//nfs 服务器
$ tar -zcvPhf /backup/data_backup.tar.gz_$(date +%F-week%w) /var/spool/cron/root /etc/rc.local /server/scripts
//web 服务器
$ tar -zcvPhf /backup/web_backup.tar.gz_$(date +%F-week%w) /var/www/html $ tar -zcvPhf /backup/web_backup.tar.gz_$(date +%F-week%w) /app/log/ $ tar -zcvPhf /backup/file_backup.tar.gz_$(date +%F-week%w) /etc/sysconfig/iptables-config /server/scripts
PS:倡议 web 的站点目录和 log 目录离开打包,因为不论是哪个目录数据都会很大,打包的时候会很慢,一个一个打包能够晋升打包的速率。
//tar 查看并解压确定
$ tar tf /backup/data_backup.tar.gz_2020-12-22-weeek2 $ tar tf /backup/web_backup.tar.gz_2020-12-22-weeek2 $ tar xf /backup/data_backup.tar.gz_2020-12-22-weeek2 $ tar xf /backup/web_backup.tar.gz_2020-12-22-weeek2
1.3.3 web 服务器创立 7 天前的数据并删除
创立 7 天前数据
// 创立日期本人设定
$ date -s "20200430" $ ll total 144 -rw-r--r-- 1 root root 12435 Dec 2 16:55 web_backup.tar.gz_2020-12-02 -rw-r--r-- 1 root root 12435 Dec 2 16:55 web_backup.tar.gz_2020-12-03 ..... 略..... -rw-r--r-- 1 root root 12435 Dec 2 16:55 web_backup.tar.gz_2020-12-09 -rw-r--r-- 1 root root 12435 Dec 2 16:55 web_backup.tar.gz_2020-12-10
找出七天前的数据,并删除
$ find /backup -type f -mtime +7 |xargs rm -f
rsync 的配置文件
cat /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
#list = false
hosts allow = 172.16.1/24
hosts deny = 0.0.0.0/24
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = "backup dir by other"
path = /backup
应用 rsync 传输到备份服务端
$ rsync -avz /backup/ rsync_backup@172.16.1.205::backup --password-file=/etc/rsync_password
1.3.4 备份服务端删除 180 天的数据,并保留每周日的数据
设置服务器工夫为 180 天后,在服务端找出 180 天前的数据并删除,并保留每周日的数据
$ date -s "202105010"
$ find /backup -type f -mtime +180 ! -name "*week7"|xargs rm -f
$ ll /backup/
-rw-r--r-- 1 rsync rsync 12435 Mar 5 2021 web_backup.tar.gz_2021-03-08-week7
1.3.5 备份服务器以 IP 地址目录保留数据,并验证数据完整性
创立 IP 地址目录 (web 和 nfs 创立)
$ mkdir -p /backup/10.0.0.203
$ ll
drwxr-xr-x 2 root root 6 Oct 20 00:07 10.0.0.203
离开打包 web 服务的文件 (nfs 服务雷同)
$ tar -zcvPhf /backup/web_backup.tar.gz_$(date +%F-week%w) /var/www/html
$ tar -zcvPhf /backup/log_backup.tar.gz_$(date +%F-week%w) /app/log
通过 md5sum 命令进行校验
// 将校验码导入到指纹文件 finger.txt
$ md5sum /backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5 >finger.txt $ md5sum /backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5 >>finger.txt
// 查看校验码文件
$ cat finger.txt 4c570d961fd6c7790e0a2f3f576a8681 /backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5 4c570d961fd6c7790e0a2f3f576a8681 /backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5
// 将压缩包和指纹文件发送到备份服务器
$ rsync -avz /backup/10.0.0.203 rsync_backup@10.0.0.205::backup --password-file=/etc/rsync_password
留神:10.0.0.203 前面不要加斜杠,否则只有文件传输过来,目录没有传输
// 进入目录比照指纹文件的校验码(服务端)
$ md5sum -c /backup/10.0.0.203/finger.txt // 绝对路径 /backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5: OK /backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5: OK $ md5sum -c finger.txt // 相对路径 >/backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5: OK /backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5: OK
1.3.6 实现发送邮件
邮件发送流程
开启 163 邮件代理
编辑邮箱配置文件,增加配置
$ tail -2 /etc/mail.rc set from=163 邮箱账户 smtp=smtp.163.com set smtp-auth-user=163 邮箱账户 smtp-auth-password= 受权码 smtp-auth=login
发送邮件
$ echo "邮件发送测试" |mail -s "mail check" qq 邮箱账户 $ mail -s "邮箱测试" qq 邮箱账户 < 文件
测试
$ find /backup/ -type f -name "finger.txt"|xargs md5sum -c &>/tmp/check.txt $ echo "邮件发送测试" |mail -s "邮箱测试" qq 邮箱账户 </tmp/check.txt
PS:应用 find 命令找到指纹文件,通过 xargs 将给 md5sum 解决,'&' 代表也将错误信息一起写入到文件
1.4 编写全网备份脚本
1.4.1 客户端脚本(nfs 服务器备份脚本)
[root@nfs /server/scripts]# cat bak.sh
#!/bin/bash
// 设置目录和 IP 地址的变量
Bak_dir="/backup"
Ip_info=$(hostname -i)
# create dir // 创立相应的目录
mkdir -p $Bak_dir/$Ip_info
# tar system file // 打包零碎的文件
tar -cPhf /$Bak_dir/$Ip_info/data_backup.tar.gz_$(date +F%-weeek%w) /var/spool/cron/root /etc/rc.local /server/scripts
# del 7 ago data info // 删除 7 天的数据
find /$Bak_dir/$Ip_info -type f -mtime +7|xargs rm -f 2>/dev/null
# create finger file // 创立指纹文件
find /$Bak_dir/$Ip_info -type f -mtime -1 ! -name "finger*"|xargs md5sum >/$Bak_dir/$Ip_info/finger.txt
# rsync backup push data info //rsync 推送数据到服务端
rsync -az /$Bak_dir/$Ip_info rsync_backup@10.0.0.205::backup --password-file=/etc/rsync.password
1.4.2 客户端脚本(web 服务器备份脚本)
[root@nginx scritps]# cat web_bak.sh
#!/bin/bash
Bak_dir="/backup"
Ip_info=$(hostname -i)
# create dir
mkdir -p $Bak_dir/$Ip_info
# tar system file
cd /
#!/bin/bash
Bak_dir="/backup"
Ip_info=$(hostname -i)
# create dir
mkdir -p $Bak_dir/$Ip_info
# tar system file
tar -cPhf /$Bak_dir/$Ip_info/web_backup.tar.gz_$(date +%F-week%w) /usr/share/nginx/html
tar -cPhf /$Bak_dir/$Ip_info/log_backup.tar.gz_$(date +%F-week%w) /var/log/nginx
# del 7 ago data info
find /$Bak_dir/$Ip_info -type f -mtime +7|xargs rm -f 2>/dev/null
# create finger file
find /$Bak_dir/$Ip_info -type f -mtime -1 ! -name "finger*"|xargs md5sum >/$Bak_dir/$Ip_info/finger.txt
# rsync backup push data info
rsync -az /$Bak_dir/$Ip_info rsync_backup@10.0.0.205::backup --password-file=/etc/rsync.password
1.4.3 备份服务器端脚本
[root@rsync /server/scripts]# cat server.sh
#!/bin/bash
// 保留每个星期天的数据,将 180 天以前的数据删除
# The server hold back each week 7 data info and hold back 6 months data info
find /backup -type f -mtime +180 ! -name "*week7" 2>/dev/null
# check finger info // 校验指纹信息
find /backup -type f -name "finger*"|xargs md5sum -c &>/tmp/check.txt
# send mail in for myself qq-mail // 发送邮件到本人邮箱
mail -s "check backup info for $(date +%F)" QQ 邮箱账号 </tmp/check.txt
1.5 实现定时全网数据备份(定制工作)
1.5.1 客户端定时工作
//nfs 服务器
$ crontab -e # backup data 0 0 * * * /bin/sh /server/scripts/bak.sh
//web 服务器
$ crontab -e # backup data 0 0 * * * /bin/sh /server/scripts/web_bak.sh
1.5.2 服务端
$ crontab -e
# check backup data
0 5 * * * /bin/sh /server/scripts/server.sh
正文完