今天在论坛看了这样的一个需求,网友有一台老机器,上面有100多个站点,数据大约300G左右,他想要快速的迁移数据到新服务器。
但是使用宝塔自带的迁移工具会有部分站点的迁移数据不完整,如果人工一个一个的迁移又太麻烦了,不知道有什么好办法可以把站点、数据库、配置等一键恢复到新服务上。
这种问题自己也偶尔想过,但是自己用不到就没有深究,不过有的网友给出了方案,这个方案自己没有验证过,暂且就记录一下吧。
网友给出的在两台服务器之间迁移大量数据方案是:
接收端:
nc -l -p 1234 | uncompress -c | tar xvfp -
发送端:
tar cfp - /some/dir | compress -c | nc -w 3 [destination] 1234
两台服务器之间迁移大量数据方案解释:
这个方案是使用 nc(netcat)和 tar 结合起来进行数据传输和解压缩的方法。它通过网络传输数据,允许在两个服务器之间直接进行数据流的传输。下面是每个命令的详细解释:
在接收端(新服务器)执行以下命令:
nc -l -p 1234 | uncompress -c | tar xvfp -
nc -l -p 1234: 在接收端启动 nc,监听端口 1234,等待来自发送端的连接。
uncompress -c: 解压缩来自管道的数据。
tar xvfp -: 使用 tar 命令解包(解压缩)来自前一个步骤的数据。x 表示提取文件,v 表示显示详细信息,f 表示从文件中提取,p 表示保留文件权限。
在发送端(老服务器)执行以下命令:
tar cfp - /some/dir | compress -c | nc -w 3 [destination] 1234
tar cfp - /some/dir:使用 tar 命令将指定目录 /some/dir 打包。c 表示创建归档,f 表示指定文件,p 表示保留文件权限,- 表示输出到标准输出。
compress -c: 对来自 tar 的数据进行压缩。
nc -w 3 [destination] 1234: 使用 nc 将压缩的数据通过网络发送到目标服务器的 1234 端口。-w 3 表示设置超时时间为 3 秒。
综合起来,发送端将目录打包、压缩并通过网络传输到接收端,接收端接收数据后解压缩并还原目录结构。这种方式可以用于快速迁移大量数据,但需要确保网络连接的可靠性和安全性。此外,请注意,这样的操作可能受到网络安全策略的限制,可能需要适当的权限和配置。
[destination] 可以是目标服务器的IP地址。您可以将其替换为实际的目标服务器IP地址。
举例,如果您的目标服务器的IP地址是 192.168.1.100,那么发送端的命令可能是:
tar cfp - /some/dir | compress -c | nc -w 3 192.168.1.100 1234
这样,数据将通过网络传输到目标服务器的IP地址 192.168.1.100 的1234端口。在实际应用中,请确保目标服务器能够接受来自发送端的连接,并防火墙或网络配置不会阻止这个连接。
补充:
鉴于要使用这个命令传输大量的文件,我们肯定不能长时间的开着ssh,所以就需要后台运行:
接收端:
nohup nc -l -p 1234 | uncompress -c | tar xvfp - > /root/mylog.log 2>&1 &
发送端:
nohup tar cfp - /some/dir | compress -c | nc -w 3 192.168.1.100 1234 > /root/mylog.log 2>&1 &
改进后的命令是后台运行nc命令,并且把日志写入到/roo/mylog.log中,如果我们下次登录或者想要实时的查看日志,可以使用tail -f /root/mylog.log命令查看。