joppot

コピペで絶対動く。説明を妥協しない

サーバ プログラミング

fabricでmysqlコマンドを実行する関数を自作する

投稿日:

Pocket

4gt89o

概要

皆さんこんにちは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"

envsqlvalue


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)

これでいいですね。

createmysqlqueryfunc

関数が作れました。

自作したmysql_execでmysqlクエリーを投げる

それでは実際にmysqlが実行されるのか試してみましょう。
予め対象となるサーバのssh接続を設定しておきます。

よくあるデータベースの作成をやってみましょう。

def create_database():
    mysql_exec("CREATE DATABASE hello CHARACTER SET utf8")

これでhelloデータベースを作成します。
fabricmysqldatabase

保存しましょう。
そしたら、fab -lで確認します。確認できたらcreate_databaseを実行します。

fab -l
fab create_database

execcreatedatabase

エラーはでていませんね。
もしも、うまく言っていれば、リモート先のサーバのmysqlにhelloというデータベースができているはずです。

show databases;

checkmysqldatabases

うまくいきました。

まとめ

うまくいきましたね。mysqlのコマンドがfabricから実行できるとより便利にデプロイができると思います。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-サーバ, プログラミング
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

ruby on railsでpdfファイルをダウンロードさせる

概要 みなさんこんにちはcandleです。pdfファイルのダウンロードのやり方を紹介します。 前提 railsの環境が出来ている twitterbootstrap gem を使用した環境で説明して行き …

正規表現を極めるその2

概要 みなさんこんにちはcandleです。今回は前回に引き続き、正規表現を勉強していきましょう。   前提 unixを使用するので、多少、unixコマンドになれていること   サン …

phpmyadminでmysqlデータベースの照合順序を変更する

概要 みなさんこんにちはcandleです。 ちょっとした事なのですが、意外に分からなかったのでまとめました。 phpmyadminを使ってデータベースを作ると、うっかり、utf8_general_ci …

出力fluentdから収集fluentdへforwardを使ってログデータを送信する方法

概要 みなさんこんにちはcandleです。今回はfluentdサーバを2台使って、ログの収集を行ってみたいと思います。サーバ2台はどのような環境でも良いのですが、私が今回説明する環境は1つはMac P …

CakePHPでhelloworld

概要 CakePHPでプログラミングのお約束helloworldを行いましょう。 helloworldとは動作確認も含めた、一番最初に書くプログラムコードです。 だいたいはhello worldと単純 …

  • English
  • 日本語

プロフィール


ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー

スポンサードリンク

アーカイブ