本学习笔记大部分是参考鸟哥的Linux学习,在此向他表示诚挚的谢意。
1.备份的意义
Linux一般用于服务器的管理和应用上,所以对于大的公司来说,进行数据的备份是非常有必要的,在数据的时代,资源和资料都是弥足珍贵的。
2.数据备份的种类
本机数据备份:
一般对Linux的数据备份需要备份如下目录:
/etc/整个目录
/home/整个目录
/var/spool/mail邮件的备份
/boot如何更改过内核,也需要备份
/root
/usr/local如果安装过其他的套件 /usr/local和/opt下也是需要备份一下的。
网络服务器数据备份:
如果采用的是原厂RPM安装的则需要备份整个/etc。
如果是自定义的安装或源码安装则同时还需要备份/usr/local下的所有文件。
系统www+mysql
/var下的整个目录和系统/home目录
推荐备份的路径:
/etc
/home
/var
/boot
/root
/usr/local
3.备份的种类
完全备份,耗时长、
部分备份,耗时短
4.备份工具
完整备份中,常用三个工具 cpio/dump/tar
cpio最大的好处是可以连同配置文件一块进行拷贝。所以cpio是一个很好的完整备份的工具。
注意:cpio需配合find 才可以进行正常的备份操作。
部分备份的工具:
至于部分备份方面,我们就以简单的 tar 来说明一下吧!!假如我们需要备份的数据是每天的 MySQL 数据库时,由于我想让每天的数据都存成不同的档案,而要分别档案的新旧又以日期来分别最简单了! 所以我就可以这样做:
这样就能将 mysql 的数据库压缩备份至 mysql.2005-10-25.tgz 这个档案, 并且日期会每天都不一样!呵呵!这样一来如果系统的数据库出了问题,就可以马上的回复了! 而且还有很多的档案可供回复呢!不错吧!此外,也可以利用类似上面的第二个范例的例子, 将最新的数据备份就好,其他的资料则不予以更动!嘿嘿!提供了更完善的方式呢!
大致的工具就是这样了!此外,由于备份是长长久久的事业,所以我们需要的是『系统可以自己动作』的方式, 您说是吧!所以呢,这个时候就需要使用到 cron 的服务啦!还记得我们先前讲过的 例行性命令的建立 吗?赶快再去复习一下呀!
4.备份案例
日常备份行为:
底下提供鸟哥的备份的 scripts ,希望对大家有点帮助! 我的动作是:1) 先将所有的数据通通丢到 /disk2/backup 底下去,然后 2) 进行压缩打包,并且传送到内部的 192.168.1.100 那部主机上面去。
# 1. 每周备份的资料的 script 啊! [root@linux ~]# mkdir /disk2/backup [root@linux ~]# vi /disk2/backup/backupweekly.sh #!/bin/bash # ============================================================== # 说明: # 这支程序是用来备份鸟哥的网站数据的! 当然啦,数据量很大的! # 我将他分为几个部分: # 第一部份是系统的服务与受服务的配置文件, # 第二部分则是与用户有关的重要信息部分了! ^_^ # ============================================================== # History # When Who What # 2000/12/16 VBird first time to release # 2002/03/26 VBird Adding ftp services' backup in /disk2/backup/ftp # 2003/07/03 VBird 发现解压缩之后会有一些错误数据发生! # 所以将 tar 加入 -p 的参数! # 2005/01/02 VBird 怀疑可能因为备份期间硬盘运转的问题导致当机, # 所以,加上多个 sleep 以及 sync 的功能! # ============================================================== PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH LANG=C; export LANG LC_ALL=C; export LC_ALL # 设定路径来备份 basedir=/disk2/backup named=$basedir/named postfixd=$basedir/postfix vsftpd=$basedir/vsftp sshd=$basedir/ssh sambad=$basedir/samba wwwd=$basedir/www others=$basedir/others userinfod=$basedir/userinfo # =============================================================== # 1. 系统的相关服务,主要服务有: # (1) BIND server: # (2) Postfix: # (3) vsftp: # (4) sshd: # (5) samba: # (6) WWW: # (7) Others:其他系统必须要的一些信息! # 1.1 系统的 BIND 套件,主要是 DNS 的配置文件备份! cp -a /var/named/chroot/etc $named/chroot cp -a /var/named/chroot/var $named/chroot # 1.2 系统的 Postfix Server 相关的文件备份数据! cp -a /etc/postfix/* $postfixd 2> /dev/null cp -a /etc/rc.d/init.d/postfix $postfixd cp -a /etc/dovecot.conf $postfixd # 1.3 系统的 vsftpd 服务器的仅有的配置文件喔! cp -a /etc/vsftpd/* $vsftpd cp -a /etc/vsftpd.* $vsftpd # 1.4 系统的 sshd 服务器的配置文件案! cp -a /etc/ssh/* $sshd # 1.5 系统的 Samba 所动用的档案 cp -a /etc/samba/* $sambad # 1.6 WWW cp -a /etc/my.cnf $wwwd cp -a /etc/php.ini $wwwd cp -a /etc/httpd/conf/httpd.conf $wwwd cp -a /etc/httpd/conf.d $wwwd cp -a /etc/httpd/conf.d/vbird.conf* $wwwd cd /usr/local tar -pcf $wwwd/counter-data.tar Counter/data cd /var/lib tar -pcf $wwwd/mysql-lib.tar mysql --exclude mysql/mysql.sock cd /var tar -pcf $wwwd/www-cgi-icon.tar www/cgi-bin www/icons # 1.7 Others cp -a /etc/hosts $others cp -a /etc/hosts.allow $others cp -a /etc/hosts.deny $others cp -a /etc/modprobe.conf* $others cp -a /etc/fstab $others cp -a /etc/resolv.conf $others cp -a /etc/shells $others cp -a /etc/wgetrc $others cp -a /etc/crontab $others cp -a /etc/sysconfig/i18n $others cp -a /etc/sysconfig/network $others cp -a /etc/sysconfig/network-scripts/ifcfg-eth0 $others cd / tar -pcf $others/etc.tar etc cd /usr tar -pcf $others/local.tar local sleep 5s sync; sync # ============================================================================ # 2. 主机的重要数据与数据库系统 # (1) 用户的信息 重点在 /etc/passwd, shadow, group 以及电子邮件、家目录 # 2.1 cp -a /etc/passwd $userinfod cp -a /etc/shadow $userinfod cp -a /etc/group $userinfod cd /var/spool tar -pcf $userinfod/mail.tar mail cd / tar -pcf $userinfod/home.tar home --exclude home/lost+found sleep 5s sync; sync # ============================================================================ # 3. 将主机的重要数据复制到 192.168.1.100 那部机器上面去! # 3.1 压缩与打包 cd $basedir tar -zpcf backupweekly.tar.gz * --exclude backupweekly.tar.gz sleep 5s sync; sync # 3.2 ftp 到 192.168.1.100 id="username" pw='yourpassword' cd $basedir ftp -n 192.168.1.100 > $basedir/backup.ftp.log 2>&1 <<EOC user $id $pw binary cd /disk2/backup/ put backupweekly.tar.gz bye EOC sync; sync |
# 提供的是每日备份的 script 啊 [root@linux ~]# vi /disk2/backup/backupdaily.sh #!/bin/bash # # This program is created by VBird 2002/06/13 # # What is this program? # This program will backup the following messages: # 1. MySQL data files ( /var/lib/mysql ); # 2. HTTP's CGI-directory ( /var/www/cgi-bin ) # # HOW TO RUN THIS PROGRAM? # Just put the file into /etc/crontab job, # or put this file's link file to /etc/cron.daily! # ############################################################### # History # Date What Who #============================================================== # 2002/06/13 First time to run this program # The only backup files are MySQL and CGI VBird #============================================================== # 0. Get the date messages and backup directory day=`date +%Y-%m-%d` basedir="/disk2/backup/daily" # 1. MySQL ( PATH = /var/lib/mysql ) /etc/rc.d/init.d/mysqld stop cd /var/lib tar -zcf "$basedir"/mysql."$day".tar.gz mysql 2> /dev/null /etc/rc.d/init.d/mysqld start # 2. CGI ( PATH = /var/www/cgi-bin ) cd /var/www tar -zcf "$basedir"/cgi-bin."$day".tar.gz cgi-bin 2> /dev/null |
好啦!这样一来每天的 MySQL 数据库就可以自动的被记录在 /disk2/backup/daily 里头啦!而且还是文件名会自动的改变的呦!呵呵!我很喜欢!OK!再来就是开始让系统自己跑啦! 怎么跑?!就是 /etc/crontab 呀!提供一下我的相关设定呦!
[root@linux ~]# vi /etc/crontab # 加入这两行即可 ( 请注意您的档案目录!不要照抄呦! ) # backup scripts 30 3 * * 0 root /disk2/backup/backupweekly.sh 30 2 * * * root /disk2/backup/backupdaily.sh |
这样系统就会自动的在每天的 2:30 进行 MySQL 的备份,而在每个星期日的 3:30 进行重要档案的备份!呵呵!您说,是不是很容易呢!?但是请千万记得呦!还要将 /disk2 当中的资料 copy 出来才行耶!否则整部系统死掉的时候....那可不是闹着玩的!