подпроцесс python и mysqldump
Я знаю, что части этого вопроса задавались ранее, но у меня есть несколько связанных вопросов.
Я пытаюсь казнить
mysqldump -u uname -ppassword --add-drop-database --databases databaseName | gzip > fileName
Я потенциально сбрасываю очень большой (200 ГБ?) ДБ. Само по себе это глупо? Затем я хочу отправить заархивированный файл по сети для хранения, удалить локальный дамп и очистить несколько таблиц.
Во всяком случае, я использовал подобный подпроцесс, потому что, кажется, нет способа выполнить весь исходный вызов без подпроцесса, учитывая | быть именем таблицы.
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 в сокет и запустить его через сеть и сохранить его, когда он прибудет, вместо того, чтобы отправлять заархивированный файл?
Спасибо!