podproces python i mysqldump

Wiem, że części tego pytania zostały już wcześniej zadane, ale mam kilka powiązanych pytań.

Próbuję wykonać

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

Potencjalnie zrzucam bardzo dużą (200GB?) Db. Czy to samo w sobie jest głupie? Następnie chcę wysłać skompresowany plik przez sieć do przechowywania, usunąć lokalny zrzut i oczyścić kilka tabel.

W każdym razie korzystałem z takiego podprocesu, ponieważ wydaje się, że nie ma sposobu na wykonanie całego oryginalnego wywołania bez podprocesu z uwzględnieniem | być nazwą tabeli .:

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()

ale potem czytam, że komunikacja buforuje dane w pamięci, co nie działa dla mnie. Czy to prawda?

Tym, co teraz skończyłem, jest:

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()

oczywiście zajmuje to milion lat i nienawidzę tego.

Moje pytania: 1. Czy mogę użyć mojego pierwszego podejścia do bardzo dużej bazy danych? 2. Czy mógłbym przekazać wyjście mysqldump do gniazda i wystrzelić je przez sieć i zapisać, gdy nadejdzie, zamiast wysyłać spakowany plik?

Dzięki!

questionAnswers(4)

yourAnswerToTheQuestion