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的配置和说明

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏haifeiWu与他朋友们的专栏

线上 Elasticsearch 集群健康值 red 状态问题排查与解决

之前一直运行正常的数据分析平台,最近一段时间没有注意发现日志索引数据一直未生成,大概持续了n多天,当前状态: 单台机器, Elasticsearch(下面称ES...

1.2K2
来自专栏拂晓风起

Loader拉取图片,由于redirect重定向,导致策略文件无效 设置checkPolicyFile后还是无效:需要一个策略文件,但在加载此媒体时未设置 checkPolicyFile 标志

1126
来自专栏微服务

话说ELK使用安装,结合.NET Core、ABP框架Nlog日志

安装ELK 这里采用懒人安装,Docker容器化安装,安装前先保证自己已经安装Docker-compose,安装地址:https://github.com...

1441
来自专栏.NET技术

.net core实践系列之短信服务-Sikiro.SMS.Job服务的实现

本篇会继续讲解Sikiro.SMS.Job服务的实现,在我写第一篇的时候,我就发现我当时设计的架构里Sikiro.SMS.Job这个可以选择不需要,而使用MQ代...

1002
来自专栏杨建荣的学习笔记

曲折的10g,11g中EM的安装配置过程(r4笔记第98天)

今天在本地搭了一套oracle环境,首先安装数据库的时候顺带了EM,结果安装好之后想修改监听器的端口,把原本15521的端口换成别的,结果在目录中修改了几个参数...

2763
来自专栏H2Cloud

支持插件的消息中间件【msg broker with plugin】

支持插件的消息中间件 msg broker with plugin Msg Broker概念: msg broker是实现application 之间互通讯的组...

5426
来自专栏小白鼠

分布式事务数据库事务CAP定理BASE理论分布式事务案例

断电了,该怎么处理?通过日志的方式!在执行事务的时候数据库首先会记录下这个事务的redo操作日志,然后才开始真正操作数据库,在操作之前首先会把日志文件写入磁盘,...

1272
来自专栏小白鼠

分布式事务数据库事务CAP定理BASE理论分布式事务案例

断电了,该怎么处理?通过日志的方式!在执行事务的时候数据库首先会记录下这个事务的redo操作日志,然后才开始真正操作数据库,在操作之前首先会把日志文件写入磁盘,...

5004
来自专栏IT笔记

前后端分离之SpringBoot项目Token认证

写在开始 有人说,爱上一座城,是因为城中住着某个喜欢的人。其实不然,爱上一座城,也许是为城里的一道生动风景,为一段青梅往事,为一座熟悉老宅。或许,仅仅为的只是这...

4649
来自专栏FreeBuf

开源版ZoomEye:基于Python的网络侦查框架 – IVRE

IVRE(又名DRUNK)是一款网络侦查框架,包括两个基于p0f和Bro的被动侦查模块和一个基于Nmap&Zmap的主动侦查模块,其功能类似于国内知道创宇公司推...

3687

扫码关注云+社区

领取腾讯云代金券