Linux下数据备份的一般方法

一个应用中有很多的重要数据,为了在数据灾难发生后我们能够及时、迅速、准确的恢复我们的应用到一个比较合适的位置,我们必须定期的对我们的数据资料进行备份,今天所要讨论的就是Linux下数据资料备份的方法。

1、本机数据手工备份
    Linux上有功能强大的tar命令,tar最初是为了制作磁带备份而设计的,他的作用是把文件和目录备份到磁带中,然后从磁带中提取或恢复文件。现在我们可以使用tar来备份数据到任何存储介质上。
    tar命令备份数据的格式如下:
        tar cvf backup.tar /home/www    这个命令的含义就是将 /home/www/ 打包为 backup.tar 文件,如果我们需要压缩,则需要加上 z 命令。
    使用这个命令,我们可以手工备份服务器上的数据,但是要做到定时自动备份,我们还需要借助下一个技巧。

2、本机数据自动备份
    要实现自动备份,我们首先需要将 tar 命令写在脚本里。比如下面这样一个脚本:
        #!/bin/sh
        
        tar zcvf test.tar /home/www/
    保存为 test.sh 并添加可执行权限,执行后,发现提示:tar: Removing leading `/' from member names
    这个问题是由于脚本执行的时候默认是在用户目录下的。这样就选成了问题的存在,解决办法就是在执行 tar 之前 cd 切换到要打包的目录就可以了。
    
    有了可以执行命令的脚本,还要能够让他定时执行,这个就要借助于计划任务了。
    
    Linux 为我们提供了 cron 这个强大的工具,我们可以用它来实现几乎任何类型的定时触发。每个用户都有自己的 cron 配置文件,一般来说,我们都是通过 root 用户来运行 cron 任务,以保证我们能够获得足够的权限。
    如果我们希望每天凌晨四点定时运行我们之前写好的脚本,我们可以通过 crontab -e 来编辑配置文件,并加入:
        0 4 * * * /home/test.sh
    这样,每天凌晨4点系统会自动运行这个备份脚本。

    下面是一个自动备份的脚本的例子:

#!/bin/sh

# aim to backup the resorces files and mysql data that used by shenti system
# crontab run at 4:00AM every day
# procedure: first backup all the data, then check if 3 days ago backup files exist, then delete prior
# created by shiqiang at 2009-10-28

BACKDIR="/home/backup/"
LOGFILE="/home/backup/shenti_backup_log"
MYSQLBIN="/etc/init.d/mysql"

RESOURCEPATH="/home/"    # add the path var to avoid the 'Removing leading / from member names tips'
RESOURCEDIR="www/"

MYSQLDATAPATH="/var/lib/mysql/"
MYSQLDATADIR_1="wys/"
MYSQLDATADIR_2="wys2/"

# cd $BACKDIR

YEAR=`date +%Y`
MONTH=`date +%m`
DAY=`date +%d`

echo "-----------------------------------" >> $LOGFILE
echo $(date +"%Y-%m-%d %H:%M:%S")" Shenti backup begin" >> $LOGFILE

DIRNAME=$BACKDIR$YEAR-$MONTH-$DAY
FILENAME=$DIRNAME/$YEAR-$MONTH-$DAY-shenti-resorces-backup.tar

# change dir to correspond folder
if [ ! -d $DIRNAME ]
then
    mkdir $DIRNAME
fi

# backup the resources folder
cd $RESOURCEPATH
tar zcvf $FILENAME $RESOURCEDIR >> $LOGFILE 2>&1

# backup the mysql data folder, we should be attion about the data consistency

$MYSQLBIN stop >> $LOGFILE 2>&1

cd $MYSQLDATAPATH
FILENAME=$DIRNAME/$YEAR-$MONTH-$DAY-mysqldata-wys-backup.tar
tar zcvf $FILENAME $MYSQLDATADIR_1 >> $LOGFILE 2>&1

FILENAME=$DIRNAME/$YEAR-$MONTH-$DAY-mysqldata-wys2-backup.tar
tar zcvf $FILENAME $MYSQLDATADIR_2 >> $LOGFILE 2>&1

$MYSQLBIN start >> $LOGFILE 2>&1

echo "Resources and mysql data backup finished at"$(date +"%Y-%m-%d %H:%M:%S") >> $LOGFILE

# check the old backup folder
OLDBACKDIR="$BACKDIR"$(date +%Y-%m-%d --date='3 days ago')

if [ -d $OLDBACKDIR ]
then
         `rm -rf $OLDBACKDIR` >> $LOGFILE 2>&1
    echo " [$OLDBACKDIR] Delete Old Backup Folder Success!" >> $LOGFILE
else
         echo "No Old backup folders $OLDBACKDIR  !" >> $LOGFILE
fi

echo "Shenti Backup finished at "$(date +"%Y-%m-%d %H:%M:%S") >> $LOGFILE

cd $BACKDIR

 

3、双机数据自动备份
    从安全性上考虑来讲,将备份文件存放在宿主机器上本事是不安全的,真的在灾难性情况下,这种备份时很脆弱的,所以我们需要将数据备份到另外的一台服务器上。但是,我们这里实现的双机定时的备份,而不是实时的备份。因为实时备份(热备)对于技术的要求很高,属于商业应用级的。
    
    双机备份,我们可以现在本机上备份文件,在将备份的文件传输到其他机器上。但是这个方法并不好,实际中也不会这么去做。
    查看一些资料,有的说可以通过 Mirror 来实现双机的备份[1],但是这个还需要借助第三方的软件,我觉得并是很好的办法,因为 linux 中同时还有一个强大的工具 scp 。
    同时,我们也可以考虑使用 rsync 来同步两个服务器之间的数据,关于 rsync 的使用,在本博中曾经有过一篇做了介绍,这里就不再多说了,希望大家能够找到适合自己的数据备份方案。

参考资料:
1、Linux下数据的备份方法           
2、一个Mysql自动备份脚本          
3、验证命令是否成功执行           
4、Mysql备份和恢复策略           
5、tar在脚本中使用的错误信息       
6、计划任务CRON的配置和说明       

时间: 2024-10-07 12:33:04

Linux下数据备份的一般方法的相关文章

Linux下自动备份MySQL的方法_Mysql

Linux下可以利用crontab系统每天定时备份MySQL数据库,以下是详细步骤: 1.创建保存备份文件的路径/mysqldata #mkdir /mysqldata 2.创建/usr/sbin/bakmysql文件 #vi /usr/sbin/bakmysql 输入 rq=` date +%Y%m%d ` tar zcvf /mysqldata/mysql$rq.tar.gz /var/lib/mysql 或者写成 rq=` date +%Y%m%d ` mysqldump –all-dat

让你提前认识软件开发(51):VC++集成开发环境中Linux下Pclint工程的配置方法及常见错误修改

第3部分 软件研发工作总结 VC++集成开发环境中Linux下Pclint工程的配置方法及常见错误修改   [文章摘要]         Pclint是一种C/C++软件代码静态分析工具.它是一种更加严格的编译器,能够发现普通编译器所不能发现的代码中的很多问题,因此被广泛应用于软件开发项目中.        本文介绍了如何在VC++集成开发环境中配置Linux下的Pclint工程,给出了C语言中pclint规则A检查的常见错误,并描述了对应的修改办法.   [关键词]          VC++

linux下python抓屏实现方法

  本文实例讲述了linux下python抓屏实现方法.分享给大家供大家参考.具体实现代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 7

Linux下获取用户主目录的方法分享

  Linux下获取用户主目录的方法分享     方法如下 char *path = getenv("HOME"); printf("path = %sn",path); getenv是标准库函数,包含stdlib.h头文件就可.

常用的U盘数据备份和恢复方法

U盘在我们的日常生活中用得是越来越多了,但有时U盘很可能会感染病毒或出现这样那样的故障,这样,时刻做好U盘数据备份就变得十分重要了.数据备份的方法有很多,下面就介绍一种常用的U盘数据备份和恢复方法. 首先,我们下载并运行USBoot,然后插入U盘,USBoot会发现新插入的U盘, 一.选中这个U盘; 二.点击"点击此处选择工作模式"弹出一个菜单,选择"备份到文件"的菜单项; 三.接着点击"开始"; 四.这时,USBOOT就会弹出一个"备

解决Linux下U盘乱码的方法

  轻松解决Linux下U盘乱码的方法: 1.一般用这条命令: mount -o iocharset=utf8 /dev/sdb /tmp/fat 2.如若不行可试如下命令: mount /dev/sdb /mnt -t vfat -o codepage=936,iocharset=utf8 mount /dev/sdb /mnt -t vfat -o iocharset=utf8 mount /dev/sdb /mnt -t vfat -o codepage=936,iocharset=gb2

在Linux下开发GUI程序的方法

在Linux下开发GUI程序的方法有很多,比如Gnome桌面使用GTK+作为默认的图形界面库,KDE桌面使用Qt作为默认的图形界面库,wxWidgets则是另一个使用广泛的图形库,此外使用Java中的Swing/AWT组件也可以用于开发Linux下的GUI应用. 本文将依次介绍GTK+.Qt.wxWidgets和Swing/AWT,对其进行对比分析. 1. GTK+ 平台支持 虽然GTK+最初是为X Window系统开发的,但是目前已经发展成为一个跨平台的图形界面API,其支持的平台包括: Li

基于Linux下 Oracle 备份策略(RMAN)

基于Linux下 Oracle 备份策略(RMAN) --********************************** -- 基于Linux下 Oracle 备份策略(RMAN) --**********************************       对于 Oracle 数据库的备份与恢复,尽管存在热备,冷备以及逻辑备份之外,使用最多的莫过于使用RMAN进行备份与恢复.而制定RMAN备份策略则是基于数据库丢失的容忍程度,即恢复策略来制定.在下面的备份策略中,给出的是一个通用

Python实现Linux下守护进程的编写方法_python

本文实例讲述了Python实现Linux下守护进程的编写方法,分享给大家供大家参考,相信对于大家的Python程序设计会起到一定的帮助作用.具体方法如下: 1. 调用fork()以便父进程可以退出,这样就将控制权归还给运行你程序的命令行或shell程序.需要这一步以便保证新进程不是一个进程组头领进程(process group leader).下一步,'setsid()',会因为你是进程组头领进程而失败.进程调用fork函数时,操作系统会新建一个子进程,它本质上与父进程完全相同.子进程从父进程继