我正在尝试备份数据库,并使用Fabric将它们移动到不同的服务器。
在远程服务器上打开要写入的文件时失败,并出现错误。
newFile = open('%s%s' % (dumpPath,newFileName) ,'w')
IOError: [Errno 2] No such file or directory: '/home/ec2-user/dbbackup.sql.bz2'
这些文件是存在的,我甚至试着预先创建,以防fabric没有创建权限,但仍然无法工作
run("touch dbbackup.sql.bz2")
编辑:我知道我可以上传文件到远程服务器上,但这不是我试图用open命令做的。我正在尝试压缩一个大文件(数据库转储)是否可以在远程服务器上执行此操作,或者是否必须将数据库转储复制到本地主机,压缩到本地主机,然后上载回。以下是本地主机上的压缩:
compObj= bz2.BZ2Compressor()
newFile = open('%s%s' % (dumpPath,newFileName) ,'w')
dbFile = file( '%s%s' % (dumpPath,filename), "r" )
block= dbFile.read( BLOCK_SIZE )
while True: #write the compressed data
cBlock= compObj.compress( block )
newFile.write(cBlock)
block= dbFile.read( BLOCK_SIZE )
if not block:
break
cBlock= compObj.flush()
在Fabric中,您永远不会“在远程服务器上”。有些Fabric命令在本地运行,有些在远程服务器上运行。在本例中,您使用的是Python的
open
函数,该函数试图在本地计算机上打开文件,但显然失败了。您可以使用Fabric的put and get functions在本地计算机和远程服务器之间移动文件。我不知道你能不能远程打开一个文件。但是,即使可以,在您的情况下,这可能不是一个好主意,因为您将通过ssh获取大文件(请记住,Fabric仍在本地计算机上运行)。为什么不远程压缩文件,然后获取压缩文件?在mysqldump的情况下,它将如下所示:
(有关mysqldump和gzip的更多信息,请参见:Compressing mysqldump output)
相关问题 更多 >
编程相关推荐