FabricでリモートのMySQLのDBデータをローカルマシンから乗せ替える

Webの開発環境がローカルのPCにあって、

例えば、リモートサーバーにあるMySQLのDBの内容を、そっくりそのまま、ローカルPC内のDBの内容で定期的に乗せ替えたい場合に便利な小技ですが、

Python 製のデプロイ管理ツールFabricを使って、タスクを自動化。

以下は、dbnameというDBに4つのテーブルTABLE1、TABLE2、TABLE3、TABLE4というテーブルがあるとして、その内容を、ローカルPCのmySQLからエクスポートして、リモートのmySQLにインポートする例。

以下内容のテキストファイルをabfile.pyという名前で用意しておくと「fab musicLoad」とコマンドを打つだけで、ローカルDBのエクスポートから、リモートへのファイル転送、リモートDBへのインポートまで、一連でやってくれます。

from fabric.api import run, sudo, local, cd, lcd, put, env

env.hosts = 'hoge.com'
env.port = 12345
env.user = 'hoge'
env.password = 'xxxxxxxx'

def musicLoad():

    with lcd('upload_data'):
        local('mysqldump -uroot music -pパスワード --tables TABLE1 > TABLE1.sql')
        local('mysqldump -uroot music -pパスワード --tables TABLE2 > TABLE2.sql')
        local('mysqldump -uroot music -pパスワード --tables TABLE3 > TABLE3.sql')
        local('mysqldump -uroot music -pパスワード --tables TABLE4 > TABLE4.sql')
        local('tar cvzf uodataSql.sql.tgz TABLE*.sql')
        put('uodataSql.tgz', '/var/www/xxxx/sql/uodataSql.tgz')


    with cd('/var/www/xxxx/sql'):
        run('tar xvaf uodataSql.tgz')
        run('mysql -u root -pパスワード -e "DROP   DATABASE dbname2"', warn_only=True)
        run('mysql -u root -pパスワード -e "CREATE DATABASE dbname2"')
        run('mysql -u root -pパスワード dbname2 < TABLE1.sql')
        run('mysql -u root -pパスワード dbname2 < TABLE2.sql')
        run('mysql -u root -pパスワード dbname2 < TABLE3.sql')
        run('mysql -u root -pパスワード dbname2 < TABLE4.sql')

    with cd('/var/lib/mysql/'):
        run('mysql -u root -pパスワード -e "DROP   DATABASE dbname_bakup"', warn_only=True)

        sudo('/etc/init.d/mysqld stop')
        sudo('mv dbname dbname_bakup')
        sudo('mv dbname2 dbname')
        sudo('/etc/init.d/mysqld start')