Last-Modified: 2019 年 6 月 3 日 15:01:20
背景
最近公司有一台服务器从 ucloud 迁移到 华为云, 一坨 MongoDB 数据库需要迁移.
为什么使用 rsync:
- 大文件传输就不要想着 ftp 了: 服务器 A -> 本地 -> 服务器 B
- scp 传输超大文件, 万一遇到网络断开就得哭了
小提示:
- 记得在源服务器那边买个临时带宽包, 以免浪费时间
传输前准备
# 打包压缩的文件
zip -r archive.zip ./*
# 可选: 将压缩包拆分成 1G 一个的小文件
# -d 使用数字后缀, 而不是字母后缀
split -b 1G -d archive.zip archive_split
# split 对应的合并命令
cat archive_split* > new_archive.zip
rsync 传输
rsync 文档
# 传输文件
# -P,----partial 断点续传 (保留那些因故没有完全传输的文件,以便加快随后的再次传输)
# -e 以 ssh 方式进行数据传输, ssh -p2222 指定连接 2222 端口
# --progress 显示传输进度
# --bwlimit 限速, 字节 / 秒
# -r,--recursive 对子目录以递归模式处理
# -c, --checksum 打开校验开关,强制对文件传输进行校验。# --delete 删除那些 DST 中 SRC 没有的文件。# -z, --compress 对备份的文件在传输时进行压缩处理。# --exclude=PATTERN 指定排除不需要传输的文件模式。# --include=PATTERN 指定不排除而需要传输的文件模式。# -v, --verbose 详细模式输出。# -q, --quiet 精简输出模式。# -a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于 -rlptgoD
rsync -P -e "ssh -p2222" --progress --bwlimit=1024 root@xx.xx.xx.xx:/data/transfer/archive.zip /data/archive.zip
解释一下上面执行命令的参数:
-
-P
支持断点续传, 网络传输中网络断开是很可能发生的 -
-e "ssh -p2222"
指定 ssh 传输方式, SRC 的 ssh 端口非默认的 22 端口 -
--progress
显示进度, 方便肉眼观察
由于传输的是 zip 压缩包, 因此未加上 -z
参数.