joppot

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

サーバ プログラミング

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

投稿日:


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

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

関連記事

CentOS6.5にcakephp2.5.6をインストールする

概要 みなさんこんにちはcandleです。今回はCentOSのapacheサーバー上にcakephpを導入してみましょう。 前提 CentOSにapacheがインストールされている mysqlがインス …

Ubuntuにmemcachedをインストールする方法と動作確認

概要 みなさんこんにちは、今回はubuntuにmemcachedを入れて、起動や、動作確認を行ってみたいと思います。 memcachedとは比較的短期間「key=>value」という形で値を保存するサ …

fabricを使ってgit のdiffで指定のバージョンからのファイルをアップロード

概要 皆さんこんにちはcandleです。今回はfabricを使ってgit のpush pullを使わないデプロイを実装します。 一般にgit管理されているプロジェクトのデプロイは下の様な図式でデプロイ …

javascriptでのJSONの大きさ(サイズ)の取得

概要 みなさんこんにちはcandleです。今回はプログラミングで少し手間取ったJSONサイズ取得の問題について書いていこうと思います。 JSONはjavascirptでわりと多く使われるオブジェクト型 …

Mysqlテーブルの照合順序を変更する

概要 みなさんこんにちはcandleです。今回はテーブルの照合順序を変更する方法を行います。 この方法はやっても、mysqlクエリー1行ですみます。早速やりましょう。 テーブルの照合順序を変更する 次 …

  • English
  • 日本語

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