web-dev-qa-db-ja.com

PyMySQLに明示的に基づいて、MySQLデータベースのバックアップを取る方法

私は純粋にPythonソリューションを探して、localhost上のすべてのMySQLデータベースのバックアップを作成します。これらのデータベースでクエリを実行するためにPyMySQLをすでに使用しています。どんな助けも高く評価されます。

[〜#〜]編集[〜#〜]

いくつかの検索の後、私は次の非Pythonベースのソリューションで終わりました。

import os

x =\
    "../../../mysql/bin/mysqldump\
    --Host=localhost\
    --port=3306\
    --databases ****\
    --user=****\
    --password=****\
    --default-character-set=utf8\
    --add-drop-database\
    --add-drop-table\
    --add-locks\
    --complete-insert\
    --extended-insert\
    --lock-all-tables\
    --create-options\
    --disable-keys\
    --quick\
    --order-by-primary\
    --set-charset\
    --tz-utc\
    > dump/test.sql;\
    cd dump;\
    tar -zcf test.sql.tar.gz test.sql;\
    rm test.sql;"

os.system(x)

これまでのところ良いですが、パラメーターと実行に関していくつか質問があります。

私の最初の懸念に関して、私はそれらすべてが必要であり、一緒に使用されたときに競合を引き起こさないことを確認したいだけです。最終的には、数百万のレコードを含む非常に堅牢で一貫性のあるダンプファイルを作成して、テーブル、データベース、およびデータを挿入します。良いことは、しばらくの間データベースを利用できなくすることは私にとって問題ではないということです。私の唯一の目標は、堅牢で一貫性のあるダンプファイルを作成することです。

私の2番目のコンサートに関して、私は次のことを知りたいです:a)os.system(x)python関数は、Pythonを通じてUnixコマンドを実行するための推奨される方法です(ほとんどの人が使用するsubprocess.Popen()とは対照的に)、およびb)これらのコマンドの1つが失敗した場合に通知を受け、例外がスローされた場合。

何か案は?

1
user706838

Google検索により、Python mysqldumpのスクリプトラッパーにいくつかの良い投稿が表示されます

最初のものは最も簡単な方法のように見えます。それからのコードは言う

subprocess.Popen('mysqldump -h localhost -P 3306 -u -root mydb | mysql -h localhost -P 3306 -u root mydb2', Shell=True)

私はPythonの専門家ではありませんが、Python=スキルと本能を信頼している場合は、...

試してみてください!!!

1
RolandoMySQLDBA