berkshelfでmysqlをインストールする

berkshelfでmysqlをインストールするのに若干いろいろハマったのでメモです。
環境はvagrant上のCentOS6.5です。mysqlは5.6を入れます。

前回vagrantで環境作ってた時はchefのprovisionまでVagrantfileに書いてたのですが、この方法だと一部のクックブックを追加したりした場合にprovisionし直すと差分だけ適用されるはずなんだけど、なぜだか既に適用済みだけど依存関係に含まれるクックブックが転送されなくてクックブックが見つからないエラーとなったので、provision部分は普通にknife-solo使う方法に戻しました。あまり深追いする気がなかったのは、まぁknife-soloで分離してる方が役割分担わかりやすいし。最終的に本番環境がEC2とかvagrantじゃなくなった時にも小回りがきいて良いし。ということで、knife-solo構成の前提で記載します。

mysqlのクックブックはコミュニティーブック使うので、Berksfileに以下を追記、

cookbook 'mysql', '~>5.3.6'

バージョン指定重要で、最新の6.0系いろいろ変わってて、CentOS6.5だとインストール時にエラーになった。

berksでクックブックを取得する。

$ berks vendor cookbooks

一旦、間違って最新版を入れてしまった場合は、berksなぜだか古いバージョン指定しても元のファイルが残ってると更新されないので、cookbooks/mysqlディレクトリごと一旦削除して、berks update mysqlでロックファイル更新して下さい。なんでuninstall的なコマンドないんだろう。。。バージョン下げたつもりで下がってなくてだいぶ悩んだ。

次にnodes/(ノード名).jsonに以下のような感じでバージョン番号とかパスワードなどを指定する。パスワード環境変数とかに埋める方法はまた今後本番環境作るときにでも調べよう。

{
  "run_list": [
    (略)
    "recipe[mysql::server]",
    "recipe[mysql::client]"
  ],
  (略)
  "mysql": {
    "service_name": "default",
    "version": "5.6",
    "port": "3306",
    "server_root_password": "vagrant",
    "remove_anonymous_users": true,
    "remove_test_database": true
  }
}

準備できたら、cook。

$ knife solo cook (ノード名)

インストール完了までしばらく時間かかる。終わったら確認。

$ ssh (ノード名)
[vagrant@localhost ~]$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.23 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

とりあえずmysqlのインストールはできたよう。

参考