AnsibleでRPMのMySQL5.7のインストール・初期設定を自動化してみた
MySQL v5.7ではrootの初期設定まわりがいろいろ変わっており、 v5.6をベースにした記事を見てもそのままでは使えなかったりします。
Ansibleを使ってMySQL 5.7をインストール・初期設定するところまでできたのでやり方を紹介します。
注意
これはあくまで簡易版で、Vagrantのような開発環境構築を想定しています。 本番サーバに適用する場合はもっとセキュリティを重視する必要があるでしょう。
自分はMySQLに関しては初級者なので、ツッコミ歓迎です。もっといいやり方があれば教えてください。
手順
- RPMを使ってMySQL5.7をインストールする
- ログファイルを解析してrootのパスワードを得る
- rootのパスワードを /root/.tmp.my.cnf に記述する
- /root/.tmp.my.cnf を使ってrootログインし、rootのパスワードを変更する
- と同時に新パスワードを/root/.my.cnf に記述する
- /root/.my.cnf を使って rootログインし、GRANT文やCREATE DATABASE文を実行する
RPMを使ってMySQL5.7をインストールする
下記記事に従ってMySQLをインストールし起動します。
CentOS7にMySQL5.7をYumでインストールする方法
ログファイルを解析してrootのパスワードを得る
ログファイル (/var/log/mysqld.log) にrootの初期パスワードが書かれているのでこれをパースして取得します。
log_file=/var/log/mysqld.log
tmp_pass=$(sudo grep 'password is generated' $log_file | awk -F'root@localhost: ' '{print $2}')
rootのパスワードを /root/.tmp.my.cnf に記述する
取得したパスワードを一時設定ファイルに保存しておきます。
tmp_file=/root/.tmp.my.cnf
umask 0077
cat > $tmp_file <<EOF
[client]
user=root
password=$tmp_pass
connect-expired-password
EOF
/root/.tmp.my.cnf を使ってrootログインし、rootのパスワードを変更する
上記の設定ファイルを使ってログインし、パスワードを変更します。
new_pass='MyNewPass4@'
mysql --defaults-file=/root/.tmp.my.cnf -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$new_pass' "
変更したらそれを保存しておきます。
umask 0077
cat > /root/.my.cnf <<EOF
[client]
user=root
password=$new_pass
EOF
これで、自分用のパスワードでrootログインすることができるようになります。
新規ユーザを作成する
GRANT文でユーザを作成します。
mysql -e "GRANT ALL ON mydatabase.* TO pikachu IDENTIFIED BY 'FooBar12345@' "
後はこんな感じでCREATE DATABASEしたりテーブルを作ったりすればOKです。
Ansibleのplaybook
上記の手順をplaybookに書くとこんな感じになります。
- name: add repo
command: rpm -ih http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm creates=/etc/yum.repos.d/mysql-community.repo
- name: install mysql-community-server
yum: name=mysql-community-server state=installed
- name: install MySQL-python for ansible mysql_user module
yum: name=MySQL-python state=installed
- name: start server
service: name=mysqld state=started enabled=yes
- name: save-mysql-tmp-password.sh
script: save-mysql-tmp-password.sh creates=/root/.tmp.my.cnf
- name: set new password
script: change-root-password.sh creates=/root/.my.cnf
- name: create new user
shell: mysql -e "GRANT ALL ON *.* TO pikachu IDENTIFIED BY 'FooBar12345@' "
参考
[Ansible] dev.mysql.comのrpmでMySQL 5.6をインストール
カテゴリ:
MySQL