# Linux系统自带配置文件
/etc/目录下的众多常用配置文件,尤其是修改过后的配置文件
root及普通用户家目录下的相关配置文件(注意隐藏文件)
# 用户管理脚本及用户上传文件
各类管理服务器的脚本工具
用户家目录或者自定义目录下用户上传的重要文件
# 各类服务的运行日志文件
系统自带日志:/var/log/*
第三方软件日志: 比如/usr/local/apache2/logs/*
# web服务器的网页及静态资源文件
Apache、Nginx、Tomcat等常见web服务器所分享的网页及静态资源文件
# 数据库内保存的数据
MySQL、Mariadb、Oracle等数据库保存的数据文件
命令:diff(patch)、cpio、cp、tar、zip、rsync、scp、dump、mysqldump
1)同端备份:一般数据不是特别重要时,可以选择在同一操作系统内不同分区或磁盘上备份
2)多端备份:在同一地理区域内,实现多设备或多机备份,防止单个设备出现灾难性故障,方便快速恢复
3)异地备份:又称异地容灾备份,适合数据比较重要的情况,防止某一地理区域内出现灾难性故障
4)云端多重备份:多数据中心云端备份,异地容灾备份的升级版,但如果不是私有云,安全性需要考量
5)设备备份:磁轨备份,直接将整个磁盘设备复制,出错几率为0,恢复非常快。
1)热备份:数据不断变化时备份,备份快,将所有数据变化的操作记录下来,或将新增内容备份下来
缺点:备份过程不能出错,否则恢复很难;需要时刻关注,一旦出现问题就是大量数据丢失
2)冷备份:数据停止变化时备份,俗称离线备份,安全度高,备份数据易恢复,速度较快
缺点:冷备份时需要停止数据变化;数据量较大时,备份到其他设备可能需要消耗较长时间
3)选择夜间或者凌晨备份,在服务器压力负载最低的时候进行备份,减少对服务器正常运行的影响
1)检查备份策略是否正常执行
2)不定时测试备份的文件是否可以用于恢复
# 选择合适的模式可以降低对服务器运行的影响。
将所有要备份的内容完全备份一遍,若在两个时间点执行完整备份,即便数据没有任何变更,数据也照样会完整备份一遍,不会检查上次备份。
先进行一次完整备份,然后周期性的备份新增的内容,这样每次仅备份新增内容,大大减少的备份数据量,提高了备份效率。但是每次备份都需要生成一个独立的增量备份文件,且所有备份之间的顺序关系不能搞混,否则恢复极为麻烦。
差异备份与增量备份类似,都是先进行完整备份,然后将新增变化内容备份,不同的地方在于,差异备份每次对比的都是第一次完整备份,也就是说,差异备份的备份量会随着时间的增加不断增大,但即便如此也比每次都完整备份轻松许多,而且,差异备份恢复起来非常方便,仅需要第一次完整备份和最近一次的差异备份文件即可。
完整备份 | 增量备份 | 差异备份 | |
---|---|---|---|
备份方法 | 备份所有内容 | 先进行一次完整备份,而后备份和上一次备份对比新增的内容 | 备份和上一次完整备份相比新增的内容 |
备份速度 | 最慢 | 最快 | 较快 |
恢复速度 | 最快(简单) | 最慢(繁琐) | 较快 |
空间需求 | 最多 | 最少 | 较多 |
优势 | 最快最简单的恢复速度,仅需要恢复最近一次完整备份就能将所有数据恢复 | 较快的备份速度,除了第一次完整备份外,所有增量备份都很快,没有重复,空间需求量小 | 较快且较为简单第恢复速度,恢复时,仅需要最近一次完整备份和最近一次差异备份即可 |
劣势 | 空间需求 量大,备份文件大量重复 | 最慢的恢复速度,恢复步骤较为繁琐,恢复时需要先恢复最近一次完整备份,然后按顺序依次恢复增量备份内容 | 较慢的备份速度,会随着时间增加,增量备份消耗时间和空间越多 |
# 备份
$ tar -zcvpf /root-backup.tar.gz --exclude=/proc --exclude=/lost+found --exclude=/media --exclude=/sys --exclude=/root-backup.tar.gz /
使用tar命令可以轻松实现指定内容备份,并且保留备份内容的权限归属等信息,可以使用指定的选项排除一些特定的目录,以免对备份造成影响:--exclude=
# 恢复
$ tar -zxvpf root-backup.tar.gz -C /
使用tar命令,恢复完成后请先手动创建那些忽略掉的目录,并重启操作系统,当然如果SELinux开启的话,可能会有所影响。
#!/bin/sh
mkdir /home/temp
#创建一个临时文件
cp -a /home/data/* /home/temp
#数据存在data目录下,备份到temp目录下,所以先将数据拷过来
tar -zcPvf /home/data-$(date +%Y%m%d).tar.gz /home/temp
#将数据所在文件夹temp打包
rm -rf /home/temp/
#删除临时文件内容
find ./ -mtime +30 -name "*.tar.gz" -exec rm -rf {} \;
#删除该文件夹下超过30天的备份文件
该脚本可以结合定时计划任务,实现每天自动备份。
服务: atd 仅执行一次,执行后计划任务消失
# 格式:
at hh:mm(时间点,小时,分钟) (at 17:30) (data查看当前时间)
$ at hh:mm YYYY-MM-DD
$ at 17:30 2020-10-28
$ at now + 120min 当前时间120分钟后
$ at 1am + 3days
$ ctrl + d 保存计划任务
$ atq 查看设置的定时计划任务,并列出任务号
$ atrm 任务号 删除指定任务号的任务
$ at -c 任务号 查看指定任务号的详细信息
# at的配置文件和目录:
$ at.deny atd服务的黑名单(允许所有拒绝某一个)
$ vim /etc/at.deny
$ at.allow 默认没有创建可以手动创建,白名单(拒绝所有允许某一个)
crontab 循环定时计划任务
服务:crond 67开机自启
通过指定的循环模式有规律来进行反复的任务执行
时间:分钟 小时 日期 月份 星期 一般不会同时设置日期和星期
(分时日月周)
分钟:0-59
小时:0-23
日期:1-31(1-30,1-28/29)
月份:1-12
星期:1-7(星期一到星期日) 0-7 (0也代表星期日)
具体时间:具体数值大小
时间频率:*/n 用 /
连续时间:14-18 连续时间用 -
非连续时间:1,3,5,7 非连续时间用 , 分隔
格式:* * * * * 命令或脚本 (命令或脚本要写绝对路径)
1)当分钟为 * 时表示每分钟都要执行指定程序,小时为 * 时表示每小时都要执行程序,其余类推
2)当分钟为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,小时为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推
3)当分钟为 */n 时表示每隔 n 分钟执行一次,小时为 */n 表示每隔 n 小时执行一次,其余类推
4)当分钟为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,小时为 a, b, c,... 时表示第 a, b, c...个小时要执行,其余类推
# 使用 crontab 来定时执行脚本,无法执行,但是直接通过命令(如:./test.sh)又可以正常执行,这主要是因为无法读取环境变量的原因。
解决方法:
1、所有命令需要写成绝对路径形式。
2、在 shell 脚本开头使用以下代码:
#!/bin/bash
. /etc/profile
. ~/.bash_profile
3、在 /etc/crontab 中添加环境变量,在可执行命令之前添加命令 . /etc/profile;/bin/sh,使得好几遍了生效,例如:
20 03 * * * . /etc/profile;/bin/sh /bash/test.sh
原文:https://www.cnblogs.com/wang-yy/p/14521915.html