Loading... # rsync实现Linux远程服务器数据同步备份 > 环境:CentOS 8 丶Rsync3.2.3 丶cronie 1.5.2 > 本文主要讲解 rsync 结合 cronie 实现Linux远程服务器数据自动同步备份。 > 以 服务器1数据 备份到 服务器2 为例。服务器2(下文叫 备份服务器);服务器1(下文叫被备份服务器); ## 一、Rsync 介绍 - 参考我博客下边这篇文章 <div class="preview"> <div class="post-inser post box-shadow-wrap-normal"> <a href="https://blog.dwtowen.com/archives/326/" target="_blank" class="post_inser_a no-external-link no-underline-link"> <div class="inner-image bg" style="background-image: url(https://blog.dwtowen.com/usr/themes/handsome/assets/img/sj/4.jpg);background-size: cover;"></div> <div class="inner-content" > <p class="inser-title">Rsync介绍及使用</p> <div class="inster-summary text-muted"> Rsync介绍及使用一、简介rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sy... </div> </div> </a> <!-- .inner-content #####--> </div> <!-- .post-inser ####--> </div> ## 二、安装Rsync <div class="preview"> <div class="post-inser post box-shadow-wrap-normal"> <a href="https://blog.dwtowen.com/archives/297/" target="_blank" class="post_inser_a no-external-link no-underline-link"> <div class="inner-image bg" style="background-image: url(https://blog.dwtowen.com/usr/themes/handsome/assets/img/sj/4.jpg);background-size: cover;"></div> <div class="inner-content" > <p class="inser-title">Linux安装yum安装rsync 、Linux编译安装最新版rsync</p> <div class="inster-summary text-muted"> Linux安装yum安装rsync 、Linux编译安装最新版rsync针对CentOS采用 yum 安装安装yu... </div> </div> </a> <!-- .inner-content #####--> </div> <!-- .post-inser ####--> </div> 这里说明下,我的 Rsync 服务运行于 `:8730` 端口。 ## 服务器说明 服务器1(被备份服务器)IP:192.168.100.250 服务器2(备份服务器)IP:192.168.100.160 备份方式为:服务器1 备份 到 服务器2 。此处演示直接用 Root 用户,为安全考虑,建议新建用户用于同步管理; <div class="tip inlineBlock warning"> 如果是创建新用户,记得给用户添加对应文件夹 可读写权限。 </div> ## 三、备份 **同步命令解释** 将 **服务器1**(被备份服务器)IP:192.168.100.250 下的 `~/Temp` 目录,备份到 服务器2(备份服务器)IP:192.168.100.160 下的 `~/Backups_temp/` 目录;并且删除 **服务器2** 下不同于 **服务器1** 下的文件。 ``` rsync -azvP --delete root@192.168.100.250:~/Temp ~/Backups_temp/ ``` <div class="tip inlineBlock warning"> 如果出现权限不足,需要给予对应文件夹可读可写权限; 正常情况下,root用户是不存在权限问题的。 </div> 输入同步命令后,点击回车 > 输入服务端(服务器1)的用户密码,即可直接开始同步; > 以上同步方式,都是我们手动去操作,需要输入密码才可进行同步。缺陷就是,每次都需要我们人为干预,手动操作才可进行。 > 然而,我们在做维护的时候,很多时候需要服务器自动化脚本定时执行。 ## 四、脚本自动定时执行 <span style='color:#7CFC00'>那么,接下来,实现无须手动输入密码,脚本自动定时执行。</span> **使用ssh密钥实现无交互备份。实现自动备份脚本定期备份** ### ssh 生成公私钥 **生成公私钥并拷贝至服务器1** 1. 输入以下命令生成公钥私钥,过程一路回车即可。 ``` ssh-keygen ``` 过程如下: ``` root@localhost: ~/Backups_temp/Temp # ssh-keygen [15:47:19] Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:kbL5vqpkhaU8YaCg1cWPR0Ttt+mN0Ce2InIVopIz6Nk root@localhost.localdomain The key's randomart image is: +---[RSA 3072]----+ |. o. o.oo. | |oo .. . ... | |o o o+o. | | o =.++.o . | | .=.+oS. + o | | . =o.. o * . | | . oo+ .. + * | | ooE ..o . + . | | ...+oo . | +----[SHA256]-----+ ``` 2. 拷贝公钥到服务器1上。 输入如下命令进行拷贝(服务器用户和IP换成你自己的) ``` ssh-copy-id root@192.168.100.250 ``` 过程如下: ``` root@localhost: ~/Backups_temp/Temp # ssh-copy-id root@192.168.100.250 [15:47:33] /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@192.168.100.250's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.100.250'" and check to make sure that only the key(s) you wanted were added. ``` ### 尝试无密码链接服务器1 ``` ssh root@192.168.100.250 ``` 如下,无密码成功连入服务器 ``` root@localhost: ~ # ssh root@192.168.100.250 [15:48:57] Last failed login: Tue Jun 29 15:45:47 CST 2021 from 178.128.81.193 on ssh:notty There were 174 failed login attempts since the last successful login. Last login: Tue Jun 29 10:52:03 2021 from 192.168.100.2 root@z_window: ~ # ``` 无特殊情况,到这里,我们就可以实现无密码备份了。 ### 尝试无密码备份 ``` rsync -azvP --delete root@192.168.100.250:~/Temp ~/Backups_temp/ ``` 如下,成功执行,说明可以无密码备份; ``` root@localhost: ~ # rsync -azvP --delete root@192.168.100.250:~/Temp ~/Backups_temp/ [15:49:38] receiving incremental file list sent 38 bytes received 7,681 bytes 3,087.60 bytes/sec total size is 11,752,490 speedup is 1,522.54 root@localhost: ~ ``` ### 编写脚本 1. 新建一目录(目录自定义),将脚本编写在自己新建的目录 ``` mkdir -p ~/backups/backups-script ``` 2. 新建和编写脚本文件 ``` vim ~/backups/backups-script/server1-temp.py ``` **写入如下内容** ``` #! /bin/bash rsync -azp --delete root@192.168.100.250:~/Temp ~/Backups_temp/ ``` `:wq` 保存退出。 <div class="tip inlineBlock error"> 当然,由于我们现在脚本的目的是实现 Crontab 的定时备份,所以我们需要在脚本中使用 rsync 的绝对路径,而不是直接以环境变量的形式来调用运行 rsync,如果直接运行,crontab是无法运行的。因为 crontab 不能以环境变量方式调用程序,必须使用绝对路径。所以上边脚本的 rsync 换成自己的绝对路径。 如 rysnc 的绝对路径是 `/usr/local/bin/rsync` 那么命令则是 ``` /usr/local/bin/rsync -azp --delete root@192.168.100.250:~/Temp ~/Backups_temp/ ``` </div> 聪明的你会发现上边脚本中的命令 `-azvp` 参数变成 `-azp` 了,原因是 -v 代表,看到备份详细信息及进度(详细输出模式),脚本为自动备份,我们就不需要看到详细传输了。 3. 给予脚本可执行权限 ``` chmod +x ~/backups/backups-script/server1-temp.py ``` ### 测试脚本 1. 删除 **服务器2** `~/Backups_temp/Temp` 文件夹,或文件夹下所有内容。 ``` rm-rf Temp ``` 2. 到脚本目录 ``` cd ~/backups/backups-script/ ``` 3. 运行脚本 ``` ./server1-temp.py ``` 这时候我们在看 `Temp` 目录,文件又全都回来了。 ``` ll ~/Backups_temp/Temp [16:25:53] total 1.1M drwxrwxr-x. 11 root root 8.0K Jun 18 17:13 rsync-3.2.3 -rw-r--r--. 1 root root 1.1M Aug 7 2020 rsync-3.2.3.tar.gz ``` ### 定时执行脚本完成增量备份 **创建定时任务可参考我博客下边这篇文章** <div class="preview"> <div class="post-inser post box-shadow-wrap-normal"> <a href="https://blog.dwtowen.com/archives/202/" target="_blank" class="post_inser_a no-external-link no-underline-link"> <div class="inner-image bg" style="background-image: url(https://blog.dwtowen.com/usr/themes/handsome/assets/img/sj/4.jpg);background-size: cover;"></div> <div class="inner-content" > <p class="inser-title">Linux创建定时任务</p> <div class="inster-summary text-muted"> Linux创建定时任务在 Windows 环境创建定时任务大家都很清楚、很简单。接下来来这篇文章就针对 Linux... </div> </div> </a> <!-- .inner-content #####--> </div> <!-- .post-inser ####--> </div> 1. 创建定时任务 以 **每周五** 的 **17:30** 分开始执行脚本备份; **添加任务** ``` crontab -e ``` **写入如下内容** ``` 30 17 * * 5 ~/backups/backups-script/server1-temp.py ``` 这样,就可以在**每周五** 的 **17:30** 分自动执行脚本备份,自动完成增量备份了; End Thanks!👍 最后修改:2021 年 07 月 02 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏