この質問の一部が以前に尋ねられたことは知っていますが、関連する質問がいくつかあります。
実行しようとしています
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. zip ファイルを送信するのではなく、mysqldump の出力をソケットにパイプしてネットワーク経由で起動し、到着したら保存することはできますか?
ありがとう!