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

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

関連記事

MAMPでSSLを使ったhttps通信を行う

概要 みなさんこんにちはcandleです。最近SSL通信で根幹に関わるセキュリティホールが見つかったのは記憶に新しいですね。 今回扱う、https通信というのは公開鍵暗号方式を使ったセキュアな通信のこ …

railsのform_forとstrong parametersを使用してpdfをアップロードする

概要 みなさんこんにちはcandleです。今回はrailsのform_forを使って、railsプロジェクトのpublicディレクトリにpdfファイルをアップロードしてみましょう。 form_forは …

phpのsnappyライブラリをmacで使用して、webサイトのサムネイルを取得する

概要 みなさんこんにちはcandleです。今回はsnappyを使用して、ウェブサイトのサムネイルを自動的に取得したいとおもいます。 snappyはそれ自体がhtmlを画像にするスクリプトではなく、wk …

Rails pluginを使ったgemの作り方[3](vendor/assets 読み込み編)

概要 みなさんこんにちはcandleです。今回はgemでvendorを作成し、それをrailsアプリケーション側で読み込ませる為の方法を紹介します。 よく、gemをインストールすると「app/asse …

AWS環境でELB(ロードバランサー)とEC2サーバでapacheを使っている場合にhttpからhttpsにリダイレクトする方法

概要 みなさんこんにちはcandleです。今回はマニアックな記事ですが、恐らくスタートアップ企業などではわりと使う内容だと思うのでまとめておきます。 この方法が全てのサービス上でベストなやり方なのかど …

  • English
  • 日本語

プロフィール


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

スポンサードリンク

アーカイブ