重新开发的老系统,需要将老服务器fastdfs的文件夹和文件备份。
方案一:FastDFS数据迁移,通过配置有一套解决方案。(推荐)
老服务器在内网,需要走申请流程。
方案二:直接在服务器压缩后下载;文件相对较大,有82G,压缩后下载也比较麻烦
方案三:使用脚本备份。
使用paramiko包,使用sftp协议下载文件和文件夹,脚本如下
# -*- coding: utf-8 -*-
import datetime
import os
from stat import S_ISDIR
import paramiko
def RemoteScp(host_ip, host_port, host_username, host_password, remote_path, local_path):
scp = paramiko.Transport((host_ip, host_port))
scp.connect(username=host_username, password=host_password)
sftp = paramiko.SFTPClient.from_transport(scp)
start = datetime.datetime.now()
get_all_files_in_remote_dir(sftp, remote_path, local_path)
end = datetime.datetime.now()
total_time = end - start
print("备份成功")
print(total_time)
scp.close()
def get_all_files_in_remote_dir(sftp, remote_dir, local_dir):
try:
files = sftp.listdir_attr(remote_dir)
for x in files:
if S_ISDIR(x.st_mode):
remote = remote_dir + x.filename + "/"
local = local_dir + x.filename + "/"
if not os.path.exists(local):
os.mkdir(local)
get_all_files_in_remote_dir(sftp, remote, local)
else:
remote = remote_dir + x.filename
local = local_dir + x.filename
if not os.path.exists(local):
sftp.get(remote, local)
except IOError: # 如果目录不存在则抛出异常
return ("remote_path or local_path is not exist")
if __name__ == '__main__':
host_ip = '' # 远程服务器IP
host_port = 22 # 远程服务器端口
host_username = 'root' # 远程服务器用户名
host_password = 'xxxx' # 远程服务器密码
remote_path = '/work/' # 这个是远程目录,服务器为linux
local_path = 'c:\Users\\Desktop\work\' # 本地备份的地址
RemoteScp(host_ip, host_port, host_username, host_password, remote_path, local_path) # 调用方法



