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
}