1、为什么需要进行系统备份?
因为系统可能由于不预期的伤害而导致系统发生错误,所以需要对系统进行备份。
一、需要备份的数据
一类是系统基本设置信息,一类则是类似网络服务的内容数据。
1)、操作系统本身需要备份的文件
跟账号与系统配置文件有关系:
/etc/passwd
/etc/shadow
/etc/group
/etc/shadow
/home下面的用户主文件夹等
由于linux默认的重要参数文件都在/etc下面,所以只要将这个目录备份下来的话,那么几乎所有的配置文件都可以被保存。
/home目录是一般用户的主文件夹,自然也需要备份!再来,由于用户会有邮件,所以/var/spool/mail/内容也需要备份
如果曾经自信改过内核,那么/boot里头的信息也就很重要:
/etc/整个目录
/home整个目录
/var/spool/mail
/boot
/root
如果自行安装过其他的套件,那么/usr/local/或opt也最好备份一下。
2、网络服务的数据库方面:
首先是这些网络服务软件的配置文件部分,如果你的网络软件安装都是以原厂提供的为主,那么配置文件大多是在/etc/底下,所以只需备份此目录就可以了。
但若是套件大多来自于自行的安装,那么/usr/local这个目录则需要备份。
若我们假设我们提供的服务软件都是使用原厂的 RPM 安装的!所以要备份的数据文件有:
软件本身的配置文件,例如:/etc/ 整个目录,/usr/local/ 整个目录
软件服务提供的数据,以 WWW 及 MySQL 为例:
WWW 资料:/var/www 整个目录或 /srv/www 整个目录,及系统的用户主文件夹
MySQL : /var/lib/mysql 整个目录
其他在 Linux 主机上面提供的服务的数据库文件!
3、推荐需要备份的目录
如果是因为硬件或者是由于经费的关系而无法备份全部数据时,则至少需要备份这些目录
/boot
/etc
/home
/root
/usr/local
/var
4、不需要备份的目录
/dev :备份与否均可
/proc :真的不需要备份
/mnt 与/media : 如果没有在这个目录放置自己系统的东西,也不需要备份
/tmp :临时文件,不需要备份
二、选择备份系统
远程备份系统:限于网速问题
备份速度要求:可以选择使用硬盘备份
存储容量:磁带备份考虑
经费与数据可靠性:DVD的使用,可保存10年左右
三、完整备份的增量备份
完整备份就是将根目录(/)整个系统全部备份下来
1、增量备份原则
增量备份指的是在系统进行完第一次完整备份后,经过一段时间的运行,比较系统与备份文件的差异,仅备份有差异的文件而已。
第二次增量备份则与第一次增量备份的数据比较,也是仅备份有差异的数据而已,这种备份方式的优点是数据量小且快速,备份效率也很高。
关于还原:首先是还原第一次备份的完整备份然后是还原第二次的增量备份,一次类推....
2、增量备份使用的备份软件
完整备份常用的工具有 dd,cpio,dump/restore等,因为这些工具都能够备份设备与特殊文件。
dd可以直接读取磁盘的扇区而不理会文件系统,是相当好的备份工具,缺点是很慢。
cpio可以备份所有文件名,需要和find或其他找文件名的命令才能够处理妥当。
dump可以直接进行增量备份。
# 1. 用 dd 来将 /dev/sda 备份到完全一模一样的 /dev/sdb 硬盘上:
[root@www ~]# dd if=/dev/sda of=/dev/sdb
# 由亍 dd 是读取扇区,所以 /dev/sdb 这块磁盘可以不必格式化!非常的方
便!
# 叧是你会等非常非常久!因为 dd 的速度比较慢!
# 2. 使用 cpio 来备份与还原整个系统,假设储存媒体为 SATA 磁带机:
[root@www ~]# find / -print | cpio -covB > /dev/st0 <==备份到磁带机
[root@www ~]# cpio -iduv < /dev/st0 <==还原
假设/home 为一个独立的文件系统,而 /backupdata 也是一个独立的用来备份的文件系统,那如何使用 dump 将/home 完整的备份到 /backupdata 上呢?可以像下面这样进行看看:
# 1. 完整备份
[root@www ~]# dump -0u -f /backupdata/home.dump /home
# 2. 第一次进行累积备份
[root@www ~]# dump -1u -f /backupdata/home.dump.1 /home
除了这些指令之外,其实 tar 也可以用来进行完整备份啦!举例来说,/backupdata 是个独立的文件系统, 你想要将整个系统通通备份起来时,可以这样考虑:将不必要的 /proc, /mnt, /tmp 等目录不备份,其他的数据则予以备份:
[root@www ~]# tar --exclude /proc --exclude /mnt --exclude /tmp \
> --exclude /backupdata -jcvp -f /backupdata/system.tar.bz2 /
四、完整备份的差异备份
差异备份与增量备份有点类似,也是需要进行第一次的完整备份后才能够进行。只是差异备份指的是:每次备份都是与原始备份的完整备份比较的结果。
可以通过rsync 来进行镜像备份:
root@www ~]# rsync -av 来源目录 目标目录
# 1. 将 /home/ 镜像到 /backupdata/home/ 去
[root@www ~]# rsync -av /home /backupdata/
# 此时会在 /backupdata 底下产生 home 这个目录来!
[root@www ~]# rsync -av /home /backupdata/
# 再次进行会快很多!如果数据没有更改,几乎不会进行任何动作!
五、关键数据备份
备份关键数据鸟哥最爱使用 tar 来处理了!如果想要分门别类的将各种不同的服务在不同的时间备份使用不同文指 令是非常好用的工具!例如底下的案例是依据日期来备份 mysql 癿数据库喔!
[root@www ~]# tar -jpcvf mysql.`date +%Y-%m-%d`.tar.bz2 /var/lib/mysq
1. 主机硬件:使用一个独立的 filesystem 来储存备份数据,此 filesystem 挂载到 /backup 当中;
2. 每日进行:目前仅备份 MySQL 数据库;
3. 每周进行:包括 /home, /var, /etc, /boot, /usr/local 等目录与特殊服务的目录;
4. 自动处理:这方面利用 /etc/crontab 来自动提供备份的进行;
5. 远程备份:每月定期的将数据分别 (a)刻录到光盘上面 (b)使用网络传输到另一部机器上面。
每周系统备份的Script
[root@www ~]# vi /backup/backupwk.sh
#!/bin/bash
#
====================================================================# 用户参数输入位置:
# basedir=你用来储存此脚本所预计备份的数据的目录(请独立文件系统)
basedir=/backup/weekly <==您叧要改这里就好了!
#
====================================================================
# 下面请不要修改了!用默认值即可!
PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH
export LANG=C
# 设置要备份的服务的配置文件,以及备份的目录
named=$basedir/named
postfixd=$basedir/postfix
vsftpd=$basedir/vsftp
sshd=$basedir/ssh
sambad=$basedir/samba
wwwd=$basedir/www
others=$basedir/others
userinfod=$basedir/userinfo
# 判断目录是否存在,若不存在则予以建立。
for dirs in $named $postfixd $vsftpd $sshd $sambad $wwwd $others $userinfod
do
[ ! -d "$dirs" ] && mkdir -p $dirs
done
# 1. 将系统主要的服务的配置文件分别备份下来,同时也备份 /etc 全部。
cp -a /var/named/chroot/{etc,var} $named
cp -a /etc/postfix /etc/dovecot.conf $postfixd
cp -a /etc/vsftpd/* $vsftpd
cp -a /etc/ssh/* $sshd
cp -a /etc/samba/* $sambad
cp -a /etc/{my.cnf,php.ini,httpd}$wwwd
cd /var/lib
tar -jpc -f $wwwd/mysql.tar.bz2 mysql
cd /var/www
tar -jpc -f $wwwd/html.tar.bz2 html cgi-bin
cd /
tar -jpc -f $others/etc.tar.bz2 etc
cd /usr/
tar -jpc -f $others/local.tar.bz2local
# 2. 关于使用者参数方面
cp -a /etc/{passwd,shadow,group} $userinfod
cd /var/spool
tar -jpc -f $userinfod/mail.tar.bz2 mail
cd /
tar -jpc -f $userinfod/home.tar.bz2 home
cd /var/spool
tar -jpc -f $userinfod/cron.tar.bz2 cron at
[root@www ~]# chmod 700 /backup/backupwk.sh
[root@www ~]# /backup/backupwk.sh <==记得自己试跑看看!
每日系统备份的Script
[root@www ~]# vi /backup/backupday.sh
#!/bin/bash
#
=========================================================
# 请输入,你想让备份数据放置到那个独立的目录去
basedir=/backup/daily/ <==你叧要改这里就可以了!
#
=========================================================
PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH
export LANG=C
basefile1=$basedir/mysql.$(date +%Y-%m-%d).tar.bz2
basefile2=$basedir/cgi-bin.$(date +%Y-%m-%d).tar.bz2
[ ! -d "$basedir" ] && mkdir $basedir
# 1. MysQL (数据库目录在 /var/lib/mysql)
cd /var/lib
tar -jpc -f $basefile1 mysql
# 2. WWW 癿 CGI 程序 (如果有使用 CGI 程序癿话)
cd /var/www
tar -jpc -f $basefile2 cgi-bin
[root@www ~]# chmod 700 /backup/backupday.sh
[root@www ~]# /backup/backupday.sh <==记得自己试跑看看!
[root@www ~]# vi /etc/crontab
# 加入这两行即可 (请注意你的档案目录!不要照抄呦!)
30 3 * * 0 root /backup/backupwk.sh
30 2 * * * root /backup/backupday.sh
这样系统就会自动的在每天的 2:30 进行 MySQL 的备份,而在每个星期日的 3:30 进行重要文件的备份!呵呵!你说,是不是很容易呢!但是请千万记得呦!还要将 /backup/ 当中的资料 copy 出来才行耶!
远程备份的Script
使用 FTP 上传备份数据
假设你要上传的数据是将 /backup/weekly/ 目录内的档案统整为一个 /backup/weekly.tar.bz2 , 并且上传到服务器端的 /home/backup/ 底下,使用的账号是 dmtsai ,密码是 dmtsai.pass 。 那举你可以这样做看看:
[root@www ~]# vi /backup/ftp.sh
#!/bin/bash
# ===========================================
# 先输入系统所需要的数据
host="192.168.1.100" # 进程主机
id="dmtsai" # 进程主机的 FTP 账号
pw='dmtsai.pass' # 该账号的密码
basedir="/backup/weekly" # 本地端的欲被备份的目录
remotedir="/home/backup" # 备份到进程的何处?
# ===========================================
backupfile=weekly.tar.bz2
cd $basedir/..
tar -jpc -f $backupfile $(basename $basedir)
ftp -n "$host" > ${basedir}/../ftp.log 2>&1 < user $id $pw binary cd $remotedir put $backupfile bye EOF 使用 rsync 上传备份数据 另一个更简单的方法就是通过 rsync ,但是你必须要在你的服务器上面取得某个账号使用权后, 并且该账号可以不用密码即可登录才行!这部分得要先参考朋务器篇的进程联机服务器才行! 假设你已经设定好 dmtsai 这个账号可以不用密码即可登录进程服务器,而同样的你要让 /backup/weekly/ 整个备份到 /home/backup/weekly 下面时,可以简单这样做: [root@www ~]# vi /backup/rsync.sh #!/bin/bash remotedir=/home/backup/ basedir=/backup/weekly host=127.0.0.1 id=dmtsai # 下面为程序阶段!不需要修改喔! rsync -av -e ssh $basedir ${id}@${host}:${remotedir} (笔者原创文章,转载请注明出处:https://blog.csdn.net/LFCuiYs)谢谢!