ansibleを使ってCentOS 6にmysql5.6をインストールする方法についての備忘録。

CentOS 6のデフォルトのリポジトリだとmysql5.1がインストールされるので、それ以上のバージョンをインストールする場合は、公式レポジトリからrpmを取ってきてインストールする必要があります。そこらへんの処理をansibleで書いて自動プロビジョニングできるようにしました。

3rd Partyのロールを使わない方法

playbookをヒラで書くとこんな感じ。

install rpm repository/install mysqld

最新のrpmレポジトリをインストールして、mysql56-communityを有効に、mysql57-communityを無効にして、各MySQLのパッケージをインストールします。libselinux-pythonを入れないとファイル(my.cnf)の設置ができず、MySQL-Pythonはmysql_userタスクを使うために必要なパッケージになります。

mysqld 起動・自動起動設定

mysqldを起動(state: started)し、自動起動設定(enabled: yes)します。

change root password

rootユーザのパスワードを変更しています。初回はパスワードなし、二回目以降は/root/.my.cnfの設定を使ってログインします。

/root/.my.cnf by template

jinja2のテンプレートフォーマットで書かれたファイルをリモートホストの指定パスに指定の権限で設置します。今回の場合は.my.cnfをrootに対してセットしています。これは2回目以降のprovisioning時にログインするための仕組みで、2回目以降は1回目と違ってパスワードが変更されているので、パスワードが設定されたら.my.cnfをセットしてログインできるようにしています。

3rd Partyのロールを使う場合

geerlingguy.mysqlを使うとこんな感じのplaybookになります。

ロールはそのままでは利用できないので、geerlingguy.mysql/tasks/setup-RedHat.yml を書き換えます。disablerepo={{…}}のところが追加分です。

基本的な要素は3rd Partyのロールを使わないパターンと同じです。メイン部分ではmysqldのインストールやルートのパスワード設定をやってくれるので、pre_tasksで最新リポジトリのインストールをすればOKです。また、libselinux-pythonもインストールが必要だったので加えています。

参考URL