AnsibleでAmazon LinuxにMySQL5.6とMySQL-pythonをインストールする

AnsibleでAmazon LinuxにMySQL5.6をインストールし、mysql_userとmysql_dbモジュールを使いたいというのが趣旨です。
カンタンと思いきや、存外ハマったので記録を残しておきます。


## ハマりどころその1: MySQL5.6のインストール

2016年11月現在、Amazon Linuxにデフォルトでインストールされているバージョンは5.5です。
これを5.6にアップグレードする必要があります。


[MySQL Yum Repository](http://dev.mysql.com/downloads/repo/yum/)をリポジトリとして登録し、ここからyumでインストールする方法をまず試してみました。
実際にやってみると mysql-libsで競合が発生するので、mysql-community-libs-compat を先にインストールする等の工夫が必要になります。


参考：

 - [CentOS 6.4にMySQL 5.5をrpmインストール](http://d.hatena.ne.jp/ozuma/20130323/1364002513)
 - [CentOS 6.4 に MySQL 5.6 をサクッとインストールする](https://blog.manabusakai.com/2013/04/centos-mysql56-install/)



さて、mysql-community-serverが無事インストールできたので、MySQL-python（ansibleのmysql_userモジュールを使うために必要）をインストールしようとすると、競合が発生します。

```
$ sudo yum install MySQL-python

==============================================================================================================================================================================================================================================================================
 Package                                                            アーキテクチャー                                           バージョン                                                              リポジトリー                                                      容量
==============================================================================================================================================================================================================================================================================
インストール中:
 MySQL-python26                                                     x86_64                                                     1.2.3-11.14.amzn1                                                       amzn-main                                                         95 k
依存性関連でのインストールをします:
 mysql55-libs                                                       x86_64                                                     5.5.52-1.13.amzn1                                                       amzn-updates                                                     815 k
 python26                                                           x86_64                                                     2.6.9-2.88.amzn1                                                        amzn-main                                                        5.8 M
 python26-libs                                                      x86_64                                                     2.6.9-2.88.amzn1                                                        amzn-main                                                        697 k

トランザクションの要約
==============================================================================================================================================================================================================================================================================
インストール  1 パッケージ (+3 個の依存関係のパッケージ)

総ダウンロード容量: 7.3 M
インストール容量: 24 M
Is this ok [y/d/N]: y
Downloading packages:
(1/4): MySQL-python26-1.2.3-11.14.amzn1.x86_64.rpm                                                                                                                                                                                                     |  95 kB     00:00
(2/4): mysql55-libs-5.5.52-1.13.amzn1.x86_64.rpm                                                                                                                                                                                                       | 815 kB     00:00
(3/4): python26-2.6.9-2.88.amzn1.x86_64.rpm                                                                                                                                                                                                            | 5.8 MB     00:00
(4/4): python26-libs-2.6.9-2.88.amzn1.x86_64.rpm                                                                                                                                                                                                       | 697 kB     00:00
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                                                                                                                                                           19 MB/s | 7.3 MB  00:00:00
Running transaction check
Running transaction test


Transaction check error:
  file /usr/lib64/mysql/libmysqlclient.so.18 from install of mysql55-libs-5.5.52-1.13.amzn1.x86_64 conflicts with file from package mysql-community-libs-5.6.34-2.el6.x86_64
```

どうしたもんかと思っていたところ、http://aws.typepad.com/aws_japan/2015/09/now-available-amazon-linux-ami-2015-09.html を読むと、amazonのリポジトリに5.6が追加されてる模様です。


```bash
sudo yum install mysql56-server
```

すれば OKでした。


## ハマりどころその2: MySQL-python

普通にインストールすると sudo yum install MySQL-python と打つと思います。
依存関係はというと..

```
$ sudo yum install MySQL-python

==============================================================================================================================================================================================================================================================================
 Package                                                            アーキテクチャー                                           バージョン                                                              リポジトリー                                                      容量
==============================================================================================================================================================================================================================================================================
インストール中:
 MySQL-python26                                                     x86_64                                                     1.2.3-11.14.amzn1                                                       amzn-main                                                         95 k
依存性関連でのインストールをします:
 mysql55-libs                                                       x86_64                                                     5.5.52-1.13.amzn1                                                       amzn-updates                                                     815 k
 python26                                                           x86_64                                                     2.6.9-2.88.amzn1                                                        amzn-main                                                        5.8 M
 python26-libs                                                      x86_64                                                     2.6.9-2.88.amzn1                                                        amzn-main                                                        697 k

トランザクションの要約
==============================================================================================================================================================================================================================================================================
インストール  1 パッケージ (+3 個の依存関係のパッケージ)
```

となって、python26 と python26-libs をインストールします。
が、Amazon Linux にデフォルトでインストールされている python は2.7という。。。

自分は検証・再現していませんが、ネット上の記事をサーベイする限りにではトラブルの元になっている模様です。
回避するにはパッケージを明示的に MySQL-Python27 と指定すればOKです。

## 結論

ansibleのtaskで書くと以下の通りです。
一度通った道であればカンタンなんですがね。。


```yaml
- name: Install MySQL5.6 and MySQL-python
  yum: name={{ item }}
  with_items:
    - mysql56-server
    - MySQL-python27
```