linux服务器数据同步,Linux服务器数据定期同步和备份方式

数据安全是做数据分析的人需要关注的一大问题。对于我们分析的关键数据、使用的关键脚本都需要定期备份。

scp

最简单的备份方式,就是使用cp (本地硬盘)或scp (远程硬盘)命令,给自己的结果文件新建一个拷贝;每有更新,再拷贝一份。具体命令如下:

cp -fur source_project project_bak

scp -r source_project user@remote_server_ip:project_bak

为了实现定期备份,我们可以把上述命令写入crontab程序中,设置每天的晚上23:00执行。对于远程服务器的备份,我们可以配置免密码登录,便于自动备份。后台输入免密码登录服务器,获取免密码登录服务器的方法。

d60e34ddfd0739c44014fe40124d6267.png

# Crontab format

# MinuteHourDayMonthWeekcommand

# * 表示每分/时/天/月/周

# 每天23:00 执行cp命令

0          23      *       *       *      cp -fur source_project project_bak

# */2 表示每隔2分分/时/天/月/周执行命令

# 每隔24小时执行cp命令

0          */24      *       *       *      cp -fur source_project project_bak

0          0          */1     *        *     scp -r source_project user@remote_server_ip:project_bak

# 另外crotab还有个特殊的时间

# @reboot: 开机运行指定命令

@reboot cmd

rsync

cp或scp使用简单,但每次执行都会对所有文件进行拷贝,耗时耗力,尤其是需要拷贝的内容很多时,重复拷贝对时间和硬盘都是个损耗。

rsync则是一个增量备份工具,只针对修改过的文件的修改过的部分进行同步备份,大大缩短了传输的文件的数量和传输时间。具体使用如下 :

# 把本地project目录下的东西备份到远程服务器的/backup/project目录下

# 注意***个project后面的反斜线,表示拷贝目录内的内容,不在目标目录新建project文件夹。注意与第二个命令的比较,两者实现同样的功能。

# -a: archive mode, quals -rlptgoD

# -r: 递归同步

# -p: 同步时保留原文件的权限设置

# -u: 若文件在远端做过更新,则不同步,避免覆盖远端的修改

# -L: 同步符号链接链接的文件,防止在远程服务器出现文件路径等不匹配导致的软连接失效

# -t: 保留修改时间

# -v: 显示更新信息

# -z: 传输过程中压缩文件,对于传输速度慢时适用

rsync -aruLptvz --delete project/ user@remoteServer:/backup/project

rsync -aruLptvz --delete project user@remoteServer:/backup/

rsync所做的工作为镜像,保证远端服务器与本地文件的统一。如果本地文件没问题,远端也不会有问题。但如果发生误删或因程序运行错误,导致文件出问题,而在同步之前又没有意识到的话,远端的备份也就没了备份的意义,因为它也被损坏了。误删是比较容易发现的,可以及时矫正。但程序运行出问题,则不一定了。

rdiff-backup

这里推荐一个工具rdiff-backup不只可以做增量备份,而且会保留每次备份的状态,新备份和上一次备份的差别,可以轻松回到之前的某个版本。***的要求就是,本地服务器和远端服务器需要安装统一版本的rdiff-backup。另外还有2款工具 duplicity和`Rsnapshot也可以做类似工作,但方法不一样,占用的磁盘空间也不一样,具体可查看原文链接中的比较。

具体的rdiff-backup安装和使用如下 (之前写的是英文,内容比较简单,就不再翻译了):

Install rdiff-backup at both local and remote computers

#installforubuntu, debian

sudo apt-get install python-dev librsync-dev

#self compile

#downlaod rsync-dev fromhttps://sourceforge.net/project/showfiles.php?group_id=56125

tar xvzf librsync-0.9.7.tar.gz

export CFLAGS="$CFLAGS -fPIC"

./configure --prefix=/home/user/rsync --with-pic

make

make install

Install rdiff-backup

#See Reference partfordownload link

# http://www.nongnu.org/rdiff-backup/

python setup.py install --prefix=/home/user/rdiff-backup

#If you complied rsync-dev yourself, please specify the location ofrsync-dev

python setup.py --librsync-dir=/home/user/rsync install --     prefix=/home/user/rdiff-backup

Add exeutable files and python modules to environmental variables

#Addthe following wordsinto.bashrcor.bash_profileoranyother config files

export PATH=${PATH}:/home/user/rdiff-backup/bin

export PYTHONPATH=${PYTHONPATH}:/home/user/rdiff-backup/lib/python2.x/site-packages

#pay attention tothe xinpython2.xofabove line which can be 6or7 dependingon

#the Python version used.

Test environmental variable when executing commands through ssh

sshuser@host'echo ${PATH}'#WhenI run this commandinmylocalcomputer,

#I found onlysystem environmetal variableisused

#andnoneofmy self-defined environmetal variableisused.

#Then, I modified the following linesinfile'SetConnections.py'in

#/home/user/rdiff-backup/lib/python2.x/site-packages/rdiff_backup

#tosetenvironmental explicitlywhenlogin.

#pay attention tothe single quote used insidedoublequote

__cmd_schema = "ssh -C %s 'source ~/.bash_profile; rdiff-backup --server'"

__cmd_schema_no_compress = "ssh %s 'source ~/.bash_profile; rdiff-backup --server'"

#choose the one containsenvironmental variableforrdiff-backupfrom.bash_profileand.bashrc.

Use rdiff-backup

Start backup

rdiff-backup --no-compression --print-statistics user@host::/home/user/source_dir destination_dir

If the destination_dir exists, please add --force like rdiff-backup --no-compression --force --print-statistics user@host::/home/user/source_dir destination_dir. All things in original destination_dir will be depleted.

If you want to exclude or include special files or dirs please specify like --exclude '**trash' or --include /home/user/source_dir/important.

Timely backup your data

Add the above command into crontab (hit 'crontab -e' in terminal to open crontab) in the format like 5 22 */1 * * command which means executing the command at 22:05 everyday.

Restore data

Restore the latest data by running rdiff-backup -r now destination_dir user@host::/home/user/source_dir.restore. Add --force if you want to restore to source_dir.

Restore files 10 days ago by running rdiff-backup -r 10D destination_dir user@host::/home/user/source_dir.restore. Other acceptable time formats include 5m4s (5 minutes 4 seconds) and 2014-01-01 (January 1st, 2014).

Restore files from an increment file by running rdiff-backup destination_dir/rdiff-backup-data/increments/server_add.2014-02-21T09:22:45+08:00.missing user@host::/home/user/source_dir.restore/server_add. Increment files are stored in destination_dir/rdiff-backup-data/increments/server_add.2014-02-21T09:22:45+08:00.missing.

Remove older records to save space

Deletes all information concerning file versions which have not been current for 2 weeks by running rdiff-backup --remove-older-than 2W --force destination_dir. Note that an existing file which has not changed for a year will still be preserved. But a file which was deleted 15 days ago can not be restored after this command. Normally one should use --force since it is used to delete multiple increments at the same time which --remove-older-thanrefuses to do by default.

Only keeps the last n rdiff-backup sessions by running rdiff-backup --remove-older-than 20B --force destination_dir.

Statistics

Lists increments in given golder by rdiff-backup --list-increments destination_dir/.

Lists of files changed in last 5 days by rdiff-backup --list-changed-since 5D destination_dir/.

Compare the difference between source and bak by rdiff-backup --compare user@host::source-dir destination_dir

Compare the sifference between source and bak (as it was two weeks ago) by rdiff-backup --compare-at-time 2W user@host::source-dir destination_dir.

A complete script (automatically sync using crontab)

#!/bin/bash

export PYTHONPATH=${PYTHONPATH}:/soft/rdiff_backup/lib/python2.7/site-packages/

rdiff-backup --no-compression -v5 --exclude '**trash' user@server::source/ bak_dir/

ret=$?

if test $ret -ne 0; then

echo "Wrong in bak"| mutt -s"Wrong in bak"bak@mail.com

else

echo "Right in bak"| mutt -s"Right in bak"bak@mail.com

fi

echo "Finish rdiff-backup $0 ---`date`---">>bak.log 2>&1

echo "`rdiff-backup --exclude '**trash' --compare-at-time 1D user@server::source/ bak_dir/`"| mutt -s"Lists of baked files"bak@mail.com

References

rdiff-backup

duplicity

rsnapshot

http://www.saltycrane.com/blog/2008/02/backup-on-linux-rsnapshot-vs-rdiff/

http://james.lab6.com/2008/07/09/rdiff-backup-and-duplicity/

http://bitflop.com/document/75

http://askubuntu.com/questions/2596/comparison-of-backup-tools

http://www.reddit.com/r/linux/comments/fgmbb/rdiffbackup_duplicity_or_rsnapshot_which_is/

http://serverfault.com/questions/491341/optimize-space-rdiff-backup

Another great post on usage of rdiff-backup

【编辑推荐】

【责任编辑:武晓燕 TEL:(010)68476606】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305729.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2021年了,`IEnumerator`、`IEnumerable`接口还傻傻分不清楚?

IEnumerator、IEnumerable这两个接口单词相近、含义相关,傻傻分不清楚。入行多年,一直没有系统性梳理这对李逵李鬼。最近本人在怼着why神的《其实吧,LRU也就那么回事》,方案1使用数组实现LRU,手写算法涉及这一对接口&a…

vs.Net2003无法打开或创建Web应用程序若干解决办法

昨天到今天搞了一整天,把人都要差点搞崩了! ,以后再也不能乱关机了,因为这次的大意,几乎所有的Net安装,调试问题都被我碰到了,还好,我一个个把他记录下来了,同时,在CSDN找了一些相关的解决方法,不敢独享&am…

linux管理Windows文件,Linux与Windows互传文件,用户组管理和用户管理

一、与Windows互传文件linux和windows互传文件,需要使用Xshell,Linux系统需要安装lrzsz包。yum install -y lrzsz //linux安装lrzsz包# sz a.txt //Linux端传输当前目录下的a.txt到windows# rz //windows端选择传输文件到Linux当前目前二、/etc/passwd和…

微软向Chromium贡献代码以优化浏览器滚动体验

喜欢就关注我们吧!近日,微软为 Chromium 社区提交了一个新功能,用于解决以 Chromium 为内核的浏览器在 Windows 10 中滚动响应不够流畅的问题。据悉,Chrome 浏览器在访问某些网站并滚动时会出现抖动的情况,导致其在部分…

[C#.NET 拾遗补漏]14:使用结构体实现共用体

在 C 和 C# 编程语言中,结构体(Struct)是值类型数据结构,它使得一个单一变量可以存储多种类型的相关数据。在 C 语言中还有一种和结构体非常类似的语法,叫共用体(Union),有时也被直译…

linux新建文件夹灰色,Ubuntu新建文件夹灰了

#问题描述:WIn10Ubuntu双系统,其中WIn10系统和Ubuntu的目录“/”和“/boot”在同一块固态中,剩余的其他文件都在另一块机械硬盘里面。在机械硬盘下的软件(E:&分区5)和文档(F:&分区6)盘中无法新建文件夹&#x…

使用 C# 9 的records作为强类型ID - 初次使用

强类型ID实体通常是整数,GUID或者string类型,因为数据库直接支持这些类型,但是,如果实体的ID的类型是一样的,比如都是整数的ID,这有可能会出现ID值传错的问题,看下边的示例。public void AddPro…

用拖拉实现设备驱动配置(EsayHMI最新驱动配置方式)

以前的IOServer 是用VB6开发,驱动的配置方式和一般的组态软件没有什么很大的区别,配置起来比较麻烦,对一般的生手来说,要费一番功夫才能配置完毕。 总觉得原有的程序和目前的HMI图元配置环境格格不入,所以重新编写了驱…

MBR的Linux分区机制启动过程,linux系统启动流程(MBR)

总:POST---> Boot Squence ---> Bootloader ---> kernel ---> init---> 完成启动系统:CentOS61、按下电源,cpu找到CMOS中的BIOS并运行起来,这个小程序会完成硬件自检。BIOS:Basic Input and Output Sys…

.netcore 极速接入第三方登录

新年新气象,趁着新年的喜庆,肝了十来天,终于发了第一版,希望大家喜欢。如果有不喜欢看文字的童鞋,可以直接看下面的地址体验一下:Github: https://github.com/mrhuo/MrHuo.OAuth唯一官网:https:…

mongodb可视化工具 linux,Linux中安装启动MongoDB与可视化工具

MongoDB 提供了 linux 各发行版本 64 位的安装包,你可以在官网下载安装包。下载地址:https://www.mongodb.com/download-center#community下载完安装包,并解压 tgz(以下演示的是 64 位 Linux上的安装) 。curl -O https://fastdl.mongodb.org/…

年轻有为的老黄2020

0x01 不知道开篇要说什么好,那就来个经典的 0x01 吧。这个世界不止苟且,还有诗和远方。工作 工作上面还算是比较忙碌的,在20年也做了很多东西,本来面试进公司的时候title是高开,在基础架构组,光杆部门。过完…

推荐:Dapper扩展-Dapper.SimpleCRUD

背景Dapper目前应该是大家比较喜欢的orm框架之一,但是它灵活的背后,还是有很多不尽人意的地方,谁想编写基本的读取/插入/更新/删除语句?下面推荐SimpleCRUD为Dapper提供了简单的CRUD帮助器。解放了大家,提高生产力。功…

群策群力:破机房征求灵丹妙药

我校有一年代久远之计算机教室,现已经迈入日落西山之境。特征求灵丹妙药,不求妙手回春,只愿其能为我校的信息技术教育事业再尽最后一把微力,也为我校即将面临无地授课的教师提供继续上岗的救命稻草一枝。具体情况说明:…

使用 C# 9 的records作为强类型ID - 路由和查询参数

上一篇文章,我介绍了使用 C# 9 的record类型作为强类型id,非常简洁public record ProductId(int Value);但是在强类型id真正可用之前,还有一些问题需要解决,比如,ASP.NET Core并不知道如何在路由参数或查询字符串参数中…

公司高层要我转Java 我直接邮件回怼...

2020年艰难而短暂,而互联网的历史车轮还是轰隆隆一路向前,服务网格/云原生/Serverless架构,各种新架构大行其道。重新审视当下主流的编程语言,天下第一的Java已老,下行多年的.NET却浴火重生,焕发生机&#…

.NET斗鱼直播弹幕客户端(2021)

.NET斗鱼直播弹幕客户端(2021)离之前更新的两篇《.NET斗鱼直播弹幕客户端》已经有一段时间,近期有许多客户向我反馈刚好有这方面的需求,但之前的代码不能用了——但网上许多流传的Node.js、Python脚本却可以用,这岂能忍?&#xff…

Exceptionless服务端本地化部署

背景分布式异常日志收集框架Exceptionless是开源的工具,根据官方给出的说明:Exceptionless提供两种使用方式,一种是官网创建账号,需要付费,免费版有限制;一种是自己搭建本地项目,无任何限制。准备安装包准备…

ABP vnext模块化架构的最佳实践的实现

在上一篇文章《手把手教你用Abp vnext构建API接口服务》中,我们用ABP vnext实现了WebAPI接口服务,但是并非ABP模块化架构的最佳实践。我本身也在学习ABP,我认为ABP新手应该从最佳实践开始学习,可以少走很多弯路,所以写…

iphone查看删除的短信_手机资讯:iPhone手机可以批量删除短信吗如何操作

如今使用IT数码设备的小伙伴们是越来越多了,那么IT数码设备当中是有很多知识的,这些知识很多小伙伴一般都是不知道的,就好比最近就有很多小伙伴们想要知道iPhone手机可以批量删除短信吗如何操作,那么既然现在大家对于iPhone手机可…