subproceso python y mysqldump
Sé que partes de esta pregunta se han preguntado anteriormente, pero tengo algunas preguntas relacionadas.
Estoy tratando de ejecutar
mysqldump -u uname -ppassword --add-drop-database --databases databaseName | gzip > fileName
Estoy potencialmente descargando un db muy grande (200GB?) ¿Es eso en sí una cosa tonta que hacer? Luego quiero enviar el archivo comprimido a través de la red para su almacenamiento, eliminar el volcado local y purgar un par de tablas.
De todos modos, estaba usando un subproceso como este, porque no parece haber una manera de ejecutar toda la llamada original sin considerar el subproceso | para ser un nombre de tabla .:
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()
pero luego leí que la comunicación almacena en caché los datos en la memoria, lo que no funcionaría para mí. ¿Es esto cierto?
Lo que terminé haciendo por ahora es:
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()
Por supuesto, esto lleva un millón de años, y lo odio.
Mis preguntas: 1. ¿Puedo usar mi primer enfoque en un db muy grande? 2. ¿Podría posiblemente canalizar la salida de mysqldump a un socket y dispararlo a través de la red y guardarlo cuando llegue, en lugar de enviar un archivo comprimido?
¡Gracias!