使用 rsync 迁移服务器数据

发布于 2023-05-07  9 次阅读


前言

今天要迁移网站的数据,按照以前的老套路,反正数据也不多,都是直接服务器压缩好,然后下载下来再传到新服务器上去的。。。原始人做法,但也够用了。不过这次想这么干的时候发现,数据好像多了亿点点。。。

rsync 是个同步服务,配合 inotify 甚至可以做到多个服务器之间的数据实时同步,不过我只想快速迁移一下文件,而且有个附带好处是 rsync 同步数据后,可以保留数据的原始权限(好耶ヽ(✿゚▽゚)ノ,再也不用重设 docker 的权限了),粗略研究了一下就记录这里!

文件迁移

假设我们的源服务器是 A,要把数据迁移到服务器 B,用 docker 镜像(前提:A/B 都安装了 docker),使用 rsync 的 ssh 传输,用用户名和密码连接!

全程在 B 服务器中操作,首先挂载目录后进入容器内部:

docker run -v /root/rsync:/mnt -exec -it instrumentisto/rsync-ssh
因为在 docker 容器里面操作,所以需要把 B 服务器中的 /root/rsync 挂载进 docker 里面,用来存放传输过来的数据。

然后输入如下命令:

rsync -avz --rsync-path="docker run --rm -i -v /root:/mnt instrumentisto/rsync-ssh rsync" \
    -e 'ssh -p 12345' yourname@yourhost:/mnt/ /mnt/
如果 ssh 的端口非默认的 22 ,可以用 -e 参数来指定端口号!--rsync-path 中运行的命令都是在 服务器 A 上执行的,里面 -v 挂载的就是服务器 A 上需要传输过来的目录了!yourname@yourhost 改成你自己的服务器 A 地址。

所以上面 2 行命令就是把服务器 A 上的 /root 文件夹内的数据,传输到 服务器 B 的 /root/rsync 里面去。

由于使用了用户名和密码登录,回车后会出现验证:

输入 yes 后回车。

然后会弹出来需要输入密码,输入后回车,此时,就会自动传输数据了~

虽然好像没什么问题,但是还是建议传输数据的时候,关闭正在使用的服务!