社内ツールを作ったり壊したりしている永井です。
名前は覚えなくていいので「スプラトゥーン2は楽しい」ということだけ覚えておいて下さい。
お仕事でmysql5.7の環境を構築する機会がありました。
今更ですがせっかくなのでAnsibleでいい感じに入れてみるかーと思いAnsibleで構築してみたところ詰まったり詰まったりしたので完成品と共に紹介したいと思います。
環境
- デプロイ元
- ansible
- 2.3.1.0
- ansible
- デプロイ先
- CentOS
- 7.2
- CentOS
要件
- インストール
- validate_passwordのアンインストール
- 任意のrootパスワードに変更
完成品
できたものがこちらです。
--- - name: install mysql repository yum: state: present name: http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm validate_certs: no - name: install necessary libraries yum: state: present name: "{{ item }}" with_items: - yum-utils - MySQL-python - mysql-community-server - name: running mysqld service: name: mysqld state: started enabled: yes - name: chack root login shell: mysql -uroot -pany_password register: root_login_result ignore_errors: True - name: get temporary password shell: cat /var/log/mysqld.log | grep "temporary password" | awk '{print $11}' register: mysql_default_password when: root_login_result.rc != 0 - name: change root user password for updating expiration date shell: | mysql -u root -p'{{ mysql_default_password.stdout }}' --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'Do_You_Love_MySQL5.7?';" when: root_login_result.rc != 0 - name: uninstall validate_password shell: | mysql -u root -p"Do_You_Love_MySQL5.7?" --connect-expired-password -e "uninstall plugin validate_password;" when: root_login_result.rc != 0 - name: change root user password shell: | mysql -u root -p'Do_You_Love_MySQL5.7?' --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'any_password';" # 任意のパスワード when: root_login_result.rc != 0
とりあえずインストールしたい方は、これをピーッとコピーしてペッとrolesの中やplaybookのtasks内にでも貼って貰えれば動くと思います。多分。
パスワードは今回は直打ちにしてありますが、セキュリティのため環境変数にすると良いと思います。
ざっくり解説
インストール自体はyumでサクッとできます。リポジトリを追加してからyum install
でmysqlをインストールします。
しかしパスワード周りが少し厄介です。インストール直後のmysql5.7は仮のrootパスワードが設定されています。この仮パスワードは有効期限が切れていて、真っ先にこれを変更しないと大体何もできません。
仮rootパスワードは/var/log/mysqld.log
に記録されているので読み取ってログインしパスワードを変えます。
パスワードの縛りも激しく、8文字以上で英大文字小文字数字記号の4種類を含む必要があります。これはmysql5.7.8以降に標準で有効になっている"validate_password"というプラグインの働きによるものです。
少し厳しすぎるのもあり、いの一番にそいつを消してやりたいところですが期限の切れたrootパスワードを変えない限り消すこともできません。パスワードを変えないといけない、縛りがキツい、縛りを取りたい、パスワードを変えないといけない、縛りがk(ry。
任意のパスワードに変える流れは以下のとおりです。
/var/log/mysqld.log
から初期パスワードを取得しログイン- 8文字以上で英大文字小文字数字記号の4種類を含む文字列を使ったパスワードに変更
- validate_passwordをアンインストール
- 任意のパスワードに変更する。
まとめ
mysql5.7はセキュリティのレベルが高い反面初見殺しが増えております。
ただ最初の方はrootパスワードさえ突破してやれば問題なく使うことができると思います。
新機能も増え、3倍速くなったと言われるmysql5.7を活用しましょう!(もうmysql8とか出てるけど)ちなみ自分の運用しているサービスで走っているあるクエリは90倍速くなりました。
ではこのへんで、ありがとうございました。