MySQL
chef-solo

chef-solo(knife)でMySQLサーバ5.6をインストールする 2014年度版

More than 3 years have passed since last update.

はじめに

chef-soloでVagrantなCentOSにMySQL5.6をインストールしようと思ったんですが、Berkshelfを使ったインストール手順がなかなか見つからなかったのでまとめました。

事前作業

以下の作業は完了済みとします。

  • CentOS6系のインストール
  • 対象サーバにchef-solo, またはローカルマシンにknifeインストール

Berkshelfのインストール

1からレシピを書くのは手間なので、先人の知恵を拝借するためberkshelfを使います。
Befkshelfはchefのレシピにおけるgemとかbundlerみたいなものと思ってください。

$ gem install berkshelf

Berksfile作成

Berkshelf経由でインストールするミドルウェアを指定するため、Berksfileを書きます。
chef実行ディレクトリに移動し、Berksfileを作成します。

$ vi Berksfile

mysqlレシピをBerkshelfから取得するための設定を記述します。

Berksfile
source "https://supermarket.getchef.com"

cookbook "mysql"

berkshelfのMySQLレシピを使う場合、MySQLの構成情報をnodeオブジェクトに記述します。

hogehoge_node.json
{
    "run_list": [
    "recipe[mysql::server]"
    ],
    "mysql":{
    "version":"5.6",
    "port":"3306",
    "server_root_password":"mysql0000",
    "remove_anonymous_users":true,
        "remove_test_database":true
    }
}

MySQLサーバをインストールする場合、run_list"recipe[mysql::server]"を追記します。(シングルクォーテーションではなくダブルで)
さらにインストールするバージョンなどをmysqlハッシュで指定します。

指定できるパラメータ

代表的なパラメータをまとめました

  • version MySQLのバージョン5.1~5.6が指定可能。5.7はCentOS6.5ではダメでした(2014/09現在)
  • port MySQLが使用するポートを指定します。
  • server_root_password MySQLのrootユーザーパスワード
  • remove_anonymous_users アノニマスユーザーを削除するか(true or false)
  • remove_test_database テストデータベースを削除するか(true or false) 他にも色々設定できますので、設定項目はこちらを参照してください。

chef実行

nodeオブジェクトができたらberksコマンドを実行してmysqlレシピを取得します。

$ berks  --path cookbooks

berksコマンドは--pathで指定したディレクトリを一度削除し、再作成した上でレシピをダウンロードします。
もし自分のレシピをcookbooks配下に作ってると、容赦なく全部削除されるので、事前にsite-cookbooksなどにリネームするか、--path指定のディレクトリを変更しましょう。

あとはchef-soloなりknifeなりお好きなように!

追記

recipeなしエラー

mysqlのレシピファイルが見つからないエラーが出る場合、.berkhelf/cookbooksmysql-6.0.4だけができて、mymsql-5.3.6がない可能性があります。
Berkfileにバージョン指定を追加しましょう。

cookbook "mysql", "~> 5.3.6"

You must supply a name when declaring a mysql_service resourceと言われたら、ノードファイルの記述方法が変わった可能性があります。
"service_name":"default"を追加しましょう。

    "mysql":{
    "service_name":"default",
    "version":"5.5",
    "port":"3306",
    "server_root_password":"mysql0000",
    "remove_anonymous_users":true,
        "remove_test_database":true
    }