概要
皆さんこんにちはcandleです。今回はfabricからリモート先のサーバのmysqlを実行するための環境変数と関数を作成したいと思います。
mysqlは一般にmysqlコマンドをログインしてから打ち込むので、
外部のPCからfabricで自動的に操作するには一工夫必要です。
stackoverflowの下の質問を参考にしました
http://stackoverflow.com/questions/1886780/howto-to-create-mysql-database-from-fabric-dynamically
前提
リモート先のサーバにmysqlがインストールされている
fabricが実行できる環境にある
mysqlコマンドで使用する変数を用意する
mysqlにアクセスするためには「mysqlのホスト名かIPアドレス」、「mysqlユーザー名」、「mysqlのパスワード」の3つが必要になります。
これらをfabricAPIの環境変数に登録しましょう。
まずはfabfile.pyに下の内容を書き込みます。
# -*- encoding:utf-8 -*- from fabric.api import * from fabric.colors import *
これはfabricの共通設定です。
次にmysqlコマンドを実行するのに必要な変数を用意します。
#myqlのログインデータ env.mysqluser = "" env.mysqlpassword = "" env.mysqlhost = ""
大抵の場合はrootユーザーで、パスワード無し、localhostでアクセスできるので、それをセットしましょう。
#myqlのログインデータ env.mysqluser = "root" env.mysqlpassword = "" env.mysqlhost = "localhost"
mysqlクエリーを実行する関数を作る
次にmysqlを実行するための関数を作ります。
関数名は「mysql_exec」とでもしましょうか。
def mysql_exec(mysql_command): run('echo "' + mysql_command + '"|mysql --batch --user=%s --password=%s --host=%s' % (env.mysqluser, env.mysqlpassword, env.mysqlhost), pty=True)
これでいいですね。
関数が作れました。
自作したmysql_execでmysqlクエリーを投げる
それでは実際にmysqlが実行されるのか試してみましょう。
予め対象となるサーバのssh接続を設定しておきます。
よくあるデータベースの作成をやってみましょう。
def create_database(): mysql_exec("CREATE DATABASE hello CHARACTER SET utf8")
保存しましょう。
そしたら、fab -lで確認します。確認できたらcreate_databaseを実行します。
fab -l fab create_database
エラーはでていませんね。
もしも、うまく言っていれば、リモート先のサーバのmysqlにhelloというデータベースができているはずです。
show databases;
うまくいきました。
まとめ
うまくいきましたね。mysqlのコマンドがfabricから実行できるとより便利にデプロイができると思います。