当前位置: 首页 > 科技观察

Linux服务器数据定期同步和备份方法

时间:2023-03-14 00:55:51 科技观察

数据安全是做数据分析的人最关心的问题。我们分析的关键数据和使用的关键脚本都需要定期备份。备份scp最简单的方法是使用cp(本地硬盘)或scp(远程硬盘)命令新建一份自己的结果文件;每次有更新,再制作一份。具体命令如下:cp-fursource_projectproject_bakscp-rsource_projectuser@remote_server_ip:project_bak为了实现定时备份,我们可以将上面的命令写入crontab程序,设置为每晚23:00执行。对于远程服务器备份,我们可以配置免密码登录,方便自动备份。后台进入免密码登录服务器,获取免密码登录服务器方法。#crontab格式#Minute  Hour  Day  Month  Week  command#*表示每分钟/小时/天/月/周#每天23:00执行cp命令023***cp-fursource_projectproject_bak#*/2表示每2分钟/小时/天/月/周执行一次命令#Executecpcommandevery24hours0*/24***cp-fursource_projectproject_bak00*/1**scp-rsource_projectuser@remote_server_ip:project_bak#另外,crotab#@reboot还有一个特殊的时间:在开机时运行指定的命令@rebootcmdrsynccp或者scp好用,但是每次执行都会复制所有的文件,比较费时费力劳动强度大,尤其是需要复制的内容较多时,反复复制是时间和硬盘的损失。rsync是一个增量备份工具,只对修改文件的修改部分进行同步备份,大大减少了传输文件的数量和传输时间。具体使用如下:#将本地项目目录的内容备份到远程服务器的/backup/project目录下#注意第一个项目后面的反斜杠,表示复制目录的内容,而不是在目标目录中创建一个新的项目文件夹。注意与第二个命令的比较,两者执行相同的功能。#-a:archivemode,quals-rlptgoD#-r:递归同步#-p:同步时保持原文件的权限设置#-u:如果远端文件已经更新,则不会同步到避免覆盖远程修改#-L:同步符号链接链接的文件,防止远程服务器上文件路径不匹配导致软链接失败#-t:保留修改时间#-v:显示更新信息#-z:传输时压缩文件,当传输速度慢时,rsync-aruLptvz--deleteproject/user@remoteServer:/backup/projectrsync-aruLptvz--deleteprojectuser@remoteServer:/backup/rsync作为镜像保证文件的统一远程服务器和本地文件。如果本地文件没有问题,那么远程端就没有问题。但是,如果由于误删除或程序运行错误导致文件出现问题,而你在同步前没有意识到,那么远程备份就没有备份的意义了,因为它也已经损坏了。误删比较容易发现,可以及时更正。但是如果程序运行有问题,就不一定了。rdiff-backup这里推荐一个工具。rdiff-backup不仅可以做增量备份,还可以保持每次备份的状态。新备份与上次备份之间的差异可以轻松返回到以前的版本。唯一的要求就是本地服务器和远程服务器需要安装统一版本的rdiff-backup。此外,还有另外两个工具duplicity和`Rsnapshot也可以做类似的工作,只是方法不同,占用的磁盘空间也不同。具体可以参考原文链接中的对比。rdiff-backup的具体安装和使用如下(之前是英文写的,内容比较简单,就不翻译了):在本地和远程电脑都安装rdiff-backup#installforubuntu,debiansudoapt-getinstallpython-devlibrsync-dev#selfcompile#downlaodrsync-devfromhttps://sourceforge.net/project/showfiles.php?group_id=56125tarxvzflibrsync-0.9.7.ta??r.gzexportCFLAGS="$CFLAGS-fPIC"./configure--prefix=/home/user/rsync--with-picmakemakeinstall安装rdiff-backup#SeeReferencepartfordownloadlink#http://www.nongnu.org/rdiff-backup/pythonsetup.pyinstall--prefix=/home/user/rdiff-backup#Ifyoucompliedrsync-devyourself,pleasespecifythelocationofrsync-devpythonsetup.py--librsync-dir=/home/user/rsyncinstall--prefix=/home/user/rdiff-backup添加可执行文件和python模块到环境变量#Addthefollowingwordsinto.bashrcor.bash_profileoranyotherconfigfilesexportPATH=${PATH}:/home/user/rdiff-backup/binexportPYTHONPATH=${PYTHONPATH}:/home/user/rdiff-backup/lib/python2.x/site-packages#payatten上面的xinpython2.x可以是6或7,具体取决于使用的#thePython版本。通过sshsshuser@host'echo${PATH}'执行命令时测试环境变量#WhenIrunthiscommandinmylocalcomputer,#Ifoundonlysystemenvironmetalvariableisused#andnoneofmyself-definedenvironmetalvariableisused.#Then,我修改了以下行在file'SetConnections.py'in#/home/user/rdiff-backup/lib/python2.x/site-packages/rdiff_backup#tosetenvironmentalexplicitlywhenlogin.#payattentiontothesinglequoteusedinsidedoublequote__cmd_schema="ssh-C%s'source~/.bash_profile;rdiff-backup--server'"__cmd_schema_no_compress="ssh%s'source~/.bash_profile;rdiff-backup--server'"#choosetheonecontainsenvironmentalvariableforrdiff-backupfrom.bash_profileand.bashrc.Userdiff-backupStartbackuprdiff-backup--no-compression--print-statisticsuser@host::/home/user/source_dirdestination_dir如果destination_dir存在,请添加--force就像rdiff-backup--no-compression--force--print-statisticsuser@host::/home/user/source_dirdestination_dir。原始destination_dir中的所有内容都将被耗尽。如果您想排除或包含特殊文件或目录,请指定--exclude'**trash'或--include/home/user/source_dir/important。及时备份你的数据将上面的命令以522*/1**命令的格式添加到crontab(在终端中点击'crontab-e'打开crontab),这意味着每天22:05执行该命令。恢复数据通过运行rdiff-backup-rnowdestination_diruser@host::/home/user/source_dir.restore恢复最新数据。如果要恢复到source_dir,请添加--force。通过运行rdiff-backup-r10Ddestination_diruser@host::/home/user/source_dir.restore恢复10天前的文件。其他可接受的时间格式包括5m4s(5分4秒)和2014-01-01(2014年1月1日)。通过运行rdiff-backupdes从增量文件恢复文件tination_dir/rdiff-backup-data/increments/server_add.2014-02-21T09:22:45+08:00.missinguser@host::/home/user/source_dir.restore/server_add。增量文件存放在destination_dir/rdiff-backup-data/increments/server_add.2014-02-21T09:22:45+08:00.missing。删除旧记录以节省空间通过运行rdiff-backup--remove-older-than2W--forcedestination_dir删除有关2周内不是最新文件版本的所有信息。请注意,一年未更改的现有文件仍将保留。但是15天前删除的文件用这个命令后就不能恢复了。通常应该使用--force因为它用于同时删除多个增量,而--remove-older-than默认情况下拒绝这样做。仅通过运行rdiff-backup--remove-保留最后n个rdiff-backup会话早于20B--forcedestination_dir。StatisticsLists通过rdiff-backup在给定的golder中增加--list-incrementsdestination_dir/.rdiff-backup在过去5天内更改的文件列表--list-changed-since5Ddestination_dir/.比较source和bak之间的差异rdiff-backup--compareuser@host::source-dirdestination_dir通过rdiff-backup--compare-at-time2Wuser@host::source-dirdestination_dir.Acompletescript(automaticallysyncusingcrontab)#!/bin/bashexportPYTHONPATH=${PYTHONPATH}:/soft/rdiff_backup/lib/python2.7/site-packages/rdiff-backup--no-compression-v5--exclude'**trash'user@server::source/bak_dir/ret=$?iftest$ret-ne0;thenecho"Wronginbak"|mutt-s"Wronginbak"bak@mail.comelseecho"Rightinbak"|mutt-s"Rightinbak"bak@mail.comfiecho"Finishrdiff-backup$0---`date`---">>bak.log2>&1echo"`rdiff-backup--exclude'**trash'--compare-at-time1Duser@server::source/bak_dir/`"|mutt-s"列表ofbakedfiles"bak@mail.com参考rdiff-backupduplicityrsnapshothttp://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/75http://askubuntu.com/questions/2596/comparison-of-backup-toolshttp://www.reddit.com/r/linux/comments/fgmbb/rdiffbackup_duplicity_or_rsnapshot_which_is/http://serverfault.com/questions/491341/optimize-space-rdiff-backup另一篇关于rdiff-backup用法的好文章