読者です 読者をやめる 読者になる 読者になる

$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

chefでCentOS用の簡単なmysqlレシピを書いてみた

最近chefを勉強しているので適当にMySQL用のレシピを書いてみた。入門的にやったのでCentOSにしか使えないし、良い設定みたいなのは適用していないので、ちゃんとしたところには使わないほうが良いです。

setup

まずはcookbookのセットアップをしないといけません。以下のコマンドで雛形ができます。

$ cd target-directory
$ knife cookbook create mysql -o site-cookbooks

client用

clientはpackageを入れればいいだけなので簡単に作れる。

# site-cookbooks/mysql/recipes/client.rb
%w{mysql mysql-devel}.each do |package_name|
  package package_name do
    action :install
  end
end
  • package action :installで指定したpackageを入れる
  • CentOSではmysqlmysql-develを入れれば良いのでruby的にloopして書いてる

server用

serverの方は少し面倒。packageを入れて、mysql_install_dbして、service startする必要がある。

# site-cookbooks/mysql/recipes/server.rb
include_recipe "mysql::client"

package "mysql-server" do
  action :install
end

execute "mysql-install-db" do
  command "mysql_install_db"
  action  :run
  not_if  { File.exists?('/var/lib/mysql/mysql/user.frm') }
end

service "mysqld" do
  supports status: true, restart: true, reload: true
  action   [ :enable, :start ]
end
  • serverがあるところではclientも必要でしょということでclientをincludeしてる
  • mysql-serverをpackage action :install
  • mysql_install_dbを実行
    • 冪等性を確保するために/var/lib/mysql/mysql/user.frmがあったら実行しないようにしている
  • service :enable, :startする

まとめ

今回は勉強がてら適当にmysqlのレシピを書いてみた。もうちょっとちゃんとやろうとするとtemplateとかを使ったりして、設定ファイルをちゃんと作るとかしないといけないですね。