番外編
Ansibleで新規データベース作成、新規ユーザー作成、データインポートを行う
やりたいこと
- 新規DB作成
- 新規ユーザー作成
- 既存DBよりデータdump
- 新規DBへデータインポート
事前準備
AnsibleよりMySQLを実行する際にMySQL-pythonが必要となる。
私の環境ではMySQL-python26では上手く動かず、MySQL-python27をインストールすることで動くようになりましたので、バージョンを指定しています。
MySQL-python26の際に出たエラー内容は「MySQL-pythonがない」というエラーでした。
MySQL-pythonがインストールされているにも関わらず、エラーになる場合はバージョンを変更して試してみるといいかもしれません。
sudo yum install MySQL-python27.x86_64
create_database.yml作成
変数化できる部分はvars_filesにまとめています。
create_database.yml
# MySQL関連のモジュールを利用する際のログインユーザー情報ファイルの作成
- name: Create .my.cnf
template:
src: templates/my.cnf.j2
dest: /root/.my.cnf
owner: root
group: root
mode: 0600
# 新規データベース作成
- name: Create Database
mysql_db:
login_host: "{{ db_host }}"
login_user: "{{ db_root_user }}"
login_password: "{{ db_root_pass }}"
name: "{{ prefix }}_{{ project_name }}"
encoding: utf8
state: present
# 新規ユーザー作成
- name: Create User
mysql_user:
login_host: "{{ db_host }}"
login_user: "{{ db_root_user }}"
login_password: "{{ db_root_pass }}"
host: '%'
name: "{{ db_user }}"
password: "{{ db_pass }}"
append_privs: yes
priv: "{{ prefix }}_{{ project_name }}.*:ALL,GRANT"
state: present
# 既存DBよりデータdump
# 既存DBからdumpするため、新規DBとは別hostを指定する
- name: Create Dump
mysql_db:
login_host: "{{ db_dump_host }}"
login_user: "{{ db_dump_user }}"
login_password: "{{ db_dump_pass }}"
name: "{{ db_dump_name }}"
target: /tmp/{{ db_dump_name }}_{{ now_date }}.sql
encoding: utf8
single_transaction: yes
state: dump
# 新規DBへデータインポート
- name: Import Date
mysql_db:
login_host: "{{ db_host }}"
login_user: "{{ db_user }}"
login_password: "{{ db_pass }}"
name: "{{ prefix }}_{{ project_name }}"
target: /tmp/{{ db_dump_name }}_{{ now_date }}.sql
encoding: utf8
state: import
実行
以下コマンドにて実行。
「-vvv」をつけることで、詳細な実行ログが出力されます。
エラーが出ている際など、非常に助かるので常にオプション付与して実行しています!
ansible-playbook -vvv -i localhost, -c local create_database.yml
確認
新規データベースに作成したユーザーでアクセスできること。
インポートしたデータが確認できること。
感想
コマンドラインとあまり変わらない感じですが、自動化することで作業時間の短縮には繋がりました。