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

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

関連記事

fluentdでrails logをtailで直接取得する方法

概要 追記) この記事はだいぶ古くなってしまったので、新しく書き直しました。 こちらの方を参照した方が多分良いことが書いてあります。 https://joppot.info/2017/03/17/35 …

vagrantで取得したlet’s encryptのssl証明書をec2のnginxで使用する

概要 みなさんこんにちはcandleです。今回は取得したvagrantのubuntuで取得したlet’s encryptを実際に使用してみます。 もしも、まだ取得してない人は前回の記事を確 …

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

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

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

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

fluentdのs3 pluginを使用して日付区切りでログデータをS3に送信する

概要 みなさんこんにちはcandleです。今回はfluentdのs3プラグインを使用して、railsなどのログを日単位でS3に投げる方法を紹介します。もちろん、応用して年単位とか月単位、時間単位で区切 …

  • English
  • 日本語

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