Я знаю, что части этого вопроса заданы раньше, но у меня есть некоторые связанные вопросы.python subprocess и mysqldump
Я пытаюсь выполнить
mysqldump -u uname -ppassword --add-drop-database --databases databaseName | gzip > fileName
Я потенциально демпинг очень большой (200GB?) Дб. Это само по себе глупое дело? Затем я хочу отправить zip-файл по сети для хранения, удалить локальный дамп и очистить пару таблиц.
Во всяком случае, я использовал такой подпроцесс, потому что, похоже, не существует способа выполнить весь исходный вызов без подпроцесса с учетом | быть имя таблицы .:
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. Могу ли я использовать свой первый подход на очень большом db? 2. Могу ли я подключить вывод mysqldump к сокету и запустить его по сети и сохранить его, когда он поступит, вместо отправки zip-файла?
Спасибо!
связан: [Как использовать subprocess.Popen для подключения нескольких процессов по трубам ?] (http://stackoverflow.com/q/295459/4279) – jfs