python子进程和mysqldump

佐巴尔

我知道之前曾有人问过这个问题的一部分,但是我有一些相关的问题。

我正在尝试执行

mysqldump -u uname -ppassword --add-drop-database --databases databaseName | gzip > fileName

我可能正在转储非常大的数据库(200GB?)。这本身就是愚蠢的事情吗?然后,我想通过网络发送压缩文件以进行存储,删除本地转储并清除几个表。

无论如何,我正在使用这样的子流程,因为似乎没有一种方法可以在不考虑子流程的情况下执行整个原始调用。成为表名:

from subprocess import Popen, PIPE

f = open(FILENAME, 'wb')
args = ['mysqldump', '-u', 'UNAME', '-pPASSWORD', '--add-drop-database', '--databases', 'DB']

p1 = Popen(args, stdout=PIPE)
P2 = Popen('gzip', stdin=p1.stdout, stdout=f)
p2.communicate()

但是后来我读到,通信将数据缓存在内存中,这对我来说是行不通的。这是真的?

我现在最终要做的是:

import gzip
subprocess.call(args, stdout=f)
f.close()

f = open(filename, 'rb')
zipFilename = filename + '.gz'
f2 = gzip.open(zipFilename, 'wb')
f2.writelines(f)
f2.close()
f.close()

当然这需要一百万年,我讨厌它。

我的问题:1.我可以在非常大的数据库上使用第一种方法吗?2.是否可以将mysqldump的输出通过管道传输到套接字并在网络上触发它并在到达时进行保存,而不是发送压缩文件?

谢谢!

德莱尼

您不需要communication()。如果您想读取stdout / stderr以完成操作,它仅是一种方便的方法。但是,由于您要链接命令,因此它们会为您完成这些操作。只需等待它们完成即可。

from subprocess import Popen, PIPE

args = ['mysqldump', '-u', 'UNAME', '-pPASSWORD', '--add-drop-database', '--databases', 'DB']

with open(FILENAME, 'wb', 0) as f:
    p1 = Popen(args, stdout=PIPE)
    p2 = Popen('gzip', stdin=p1.stdout, stdout=f)
p1.stdout.close() # force write error (/SIGPIPE) if p2 dies
p2.wait()
p1.wait()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

python子进程和shlex

来自分类Dev

Python子进程抑制stdout和stderr

来自分类Dev

Linux中的Python:使用Shell杀死进程和子进程

来自分类Dev

python子进程-分离进程

来自分类Dev

Python的子进程删除Mysql列和间距

来自分类Dev

Python多处理和子进程的独立性

来自分类Dev

python 2.7和3.3子进程模块的区别

来自分类Dev

Python:使用GPG和子进程进行对称加密

来自分类Dev

Python多处理和子进程的独立性

来自分类Dev

使用Python子进程和字符串格式

来自分类Dev

Python子进程和Shell输入重定向

来自分类Dev

如何在Python和子进程中使用套接字?

来自分类Dev

ffmpeg映射和filter_complex子进程-Python

来自分类Dev

使用 Python 3.8 和 Linux Bash 进行子进程

来自分类Dev

后台的Python子进程

来自分类Dev

python子进程死锁

来自分类Dev

python 3.4子进程

来自分类Dev

python子进程:FileNotFoundError

来自分类Dev

检查每个进程和子进程的内存

来自分类Dev

超时终止进程和任何子进程

来自分类Dev

如何同时杀死进程和子进程?

来自分类Dev

Unicode和子进程.Popen

来自分类Dev

杀死bash和子进程

来自分类Dev

叉和子/父进程

来自分类Dev

Fork()新进程并写入子进程和父进程的文件

来自分类Dev

僵尸进程(杀死子进程和父进程)

来自分类Dev

在python子进程中退出无限进程

来自分类Dev

Python子进程不打印vnstat进程

来自分类Dev

子进程内存分配和收割子进程的目的