我的 Linux 系统是基于 Redhat 的Redhat Linux 9.0,同时配置了诸如 MySQL、PHP、Apache 等基础服务,同时又配有 Awstats、MRTG、MT 等应用服务程序,因此,我们需要备份的除了系统本身的重要文件以外,还需要备份数据库、log文件和统计数据文件等。当然另外一项必不可少的就是编译各项服务时的 ./configure 参数,这里就不赘述了。 二、制定备份文件列表。 这个步骤就是归纳一下需要备份的目录列表。以下我就依照我所安装的各项服务作了一个简单的list。 一些文件的地址是以我的服务器为标准(以"/"开头),一些则以相对目录来描述(以"./"开头)。 系统: /etc /usr/local/etc 包含所有核心配置文件。这其中包括网络配置、系统名称、防火墙规则、用户、组,以及其他全局系统项。 /var 包含系统守护进程(服务)所使用的信息,包括 DNS 配置、DHCP 租期、邮件缓冲文件、HTTP 服务器文件、db2 实例配置,等等。 /home 包含所有用户的默认用户主目录。这包括他们的个人设置、已下载的文件和用户不希望失去的其他信息。 /root 是根(root)用户的主目录。 /opt 是安装许多非系统文件的地方。IBM 软件就安装在这里。OpenOffice、JDK 和其他软件在默认情况下也安装在这里。 系统中不需要备份的目录: /proc 应该永远不要备份这个目录。它不是一个真实的文件系统,而是运行内核和环境的虚拟化视图。它包括诸如 /proc/kcore 这样的文件,这个文件是整个运行内存的虚拟视图。备份这些文件只是在浪费资源。 /dev 包含硬件设备的文件表示。如果计划还原到一个空白的系统,那就可以备份 /dev。然而,如果计划还原到一个已安装的 Linux 系统,那么备份 /dev 是没有必要的。 更多关于目录的解释,请查看 Filesystem Hierarchy Standard 和 Red Hat Linux Overview of File System Hierarchy Standard (FHS) MySQL: /usr/local/mysql 同时要注意版本的保留,在恢复的时候使用相同的版本(或者相同系列的版本)会减少更多不必要的麻烦,例如 “/usr /local/mysql-standard-4.1.7-pc-linux-i686”。 /etc/my.cnf MySQL 的配置文件。 Apache: /usr/local/apache2/logs Apache 的 log 文件。这里建议使用 cronolog 来 rotate Apache 的巨大 log。可以参考我的 cronolog 杂记 /usr/local/apache2/conf Apache 的配置文件,例如: httpd.conf。还是建议在修改此文本的时候使用“#”号 comment 修改的内容,然后添加需要修改的内容。 PHP: /usr/local/lib/php.ini 个人觉得这个就够了。如果你设定了 php 的 error log 文件,当然那个也是需要的。 Movable Type: ./MT-3.0D-full-en_ususr/ 和你的 weblog 目录 一般来说 blog 不会太大,不介意的话就整个备份一下。当然最重要的是 ./MT-3.0D-full-en_ususr/db/ 文件夹,里面有所有的数据(如果你没有用 MySQL 作为 MT 的数据存储格式的话)。 Awstats: /etc/awstats/ Awstats 的配置文件。诸如:awstats.blog.conf /var/lib/awstats/ Awstats 的分析留档文件。 诸如:awstats082004.blog.txt MRTG: MRTG 的输出文件夹。内有图片和诸如 12.34.56.78_12.34.56.78.log 的log文件。 三、使用 tar 和 crontab 等简单工具备份。 以下是使用 tar 的脚本,去掉了多余的说明部分。 您也可以点击这里下载并修改以适合自己的系统。在脚本中我尽量用更多的方法来进行备份。在实际应用中可以将步骤更加简化。更多关于 tar 的参数请看 man tar #!/bin/sh # Date format: 20040626 DATE=`date -d yesterday +%Y%m%d` # MySQL version & directory MYSQL_VERSION="4.x.x" MYSQL_DIR="/usr/local/mysql/data" # MT Blog directory MTBLOG_DIR="/path-to-mt/db/" # Backup directory & Backup Filelist BACKUP_DIR="/path-to-backup/backupfile" BACKUP_FILELIST="/path-to-backup/filelist" # Backup MySQL printf "Backup MySQL data directory, please wait...\n" tar -zpcvPf $BACKUP_DIR/mysql-standard-$MYSQL_VERSION-data-$DATE.tgz $MYSQL_DIR | grep "tar:" printf "Done! The new backup file is: $BACKUP_DIR/mysql-standard-$MYSQL_VERSION-data-$DATE.tgz\n\n" # Backup MT Blog printf "Backuping the MT3.0 Weblog data directory, please wait...\n" tar -zpcvPf $BACKUP_DIR/MT-db-$DATE.tgz $MTBLOG_DIR | grep "tar:" printf "Done! The new backup file is: $BACKUP_DIR/MT-db-$DATE.tgz\n" 这里引用了『Linux 备份与恢复速成指南』中的一个小技巧,将文件列表写入一个文件进行操作。查看我的Filelist。 以下是一个文件列表的例子: /etc /var /home /usr/local /opt (有时会是空目录) 以下解释引自『Linux 备份与恢复速成指南』: 请注意 tar -T(或 files-from)命令不能接受通配符。文件必须明确地列出。上面的例子展示了一种单独地引用文件的方法。您还可以执行脚本来搜索系统,然后建立一个列表。下面就是这样一个脚本的例子: #!/bin/sh cat MyFiles > TempList find /usr/share -iname *.png >> TempList find /tmp -iname *.iso >> TempList tar -cpzMf /path-to-backup/backupfile -T TempList 上面的脚本首先将 MyFiles 中的所有现有文件列表复制到 TempList。然后它执行两个 find 命令来搜索文件系统中匹配某个模式的文件,并将它们附加到 TempList。第一次是搜索 /usr/share 目录树中以 .png 结尾的所有文件。第二次是搜索 /tmp 目录树中以 .iso 结尾的所有文件。在建立好列表之后,tar 然后在文件设备 /dev/st0 (第一个 SCSI 磁带设备)上创建 一个新的归档文件,该文件使用 gzip 格式来压缩,并保留所有文件权限。该归档文件将跨越多个卷。要归档的文件的名称将从 TempList 文件中提取。
linux系统备份与还原
最新推荐文章于 2024-07-15 15:58:02 发布