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

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

関連記事

C++のopencvでhelloworld

概要 (追記、2018年11月に書き直しました) みなさんこんにちはcandleです。インストールできたopencvを使ってhelloworldを行いましょう。 opencvでhelloworldとは …

wordpressのbogoプラグインのショートコードをカスタマイズする

English 日本語 概要 みなさんこんにちはcandleです。 今回はwordpress bogoのショートコードをカスタマイズしてみたいと思います。 紹介する項目は以下の2つです。 国旗の表示、 …

processingで重複しないランダムな数を配列で取得する

概要 みなさんこんにちはcandleです。今回はprocessingで重複しないランダムな数を配列で取得する関数を作成したいとおもいます。 前提 なし

Mysqlのdatetime型とtimestanp型で保存されているデータを年月日だけを指定して任意の日にちのデータを取得する方法

概要 みなさんこんにちはcandleです。今日はmysqlのdatetime型とtimestanp型におさめられているデータの取得を紹介します。 datetimeやtimestanpは多くの場合下のよ …

td-agent-uiのセットアップとfluent-catで動作確認

English 日本語 概要 みなさんこんにちはcandleです。今回はtd-agent-uiのセットアップと動作確認をしてみたいと思います。 td-agentはfluentdをよりサーバで運用しやす …

  • English
  • 日本語

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