AnsibleでAmazon LinuxにMySQL5.6をインストールし、mysql_userとmysql_dbモジュールを使いたいというのが趣旨です。
カンタンと思いきや、存外ハマったので記録を残しておきます。
ハマりどころその1: MySQL5.6のインストール
2016年11月現在、Amazon Linuxにデフォルトでインストールされているバージョンは5.5です。
これを5.6にアップグレードする必要があります。
MySQL Yum Repositoryをリポジトリとして登録し、ここからyumでインストールする方法をまず試してみました。
実際にやってみると mysql-libsで競合が発生するので、mysql-community-libs-compat を先にインストールする等の工夫が必要になります。
参考:
さて、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が追加されてる模様です。
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で書くと以下の通りです。
一度通った道であればカンタンなんですがね。。
- name: Install MySQL5.6 and MySQL-python
yum: name={{ item }}
with_items:
- mysql56-server
- MySQL-python27