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 传输
# 传输文件
# -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
参数.