概要
最近は魂がなく作業のようにPCに向かっている.悲しい. AnsibleでMYSQLの設定を行う.
version
Ansibel実行サーバー
$ansible --version ansible 2.4.2.0 config file = /etc/ansible/ansible.cfg configured module search path = [u'/home/motouchi/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python2.7/dist-packages/ansible executable location = /usr/bin/ansible python version = 2.7.12 (default, Nov 20 2017, 18:23:56) [GCC 5.4.0 20160609]
MYSQLがインストールされるサーバー
# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)
実行する
ディレクトリ構造
$tree . ├── README.md ├── handlers │ └── main.yml ├── inventories │ └── hosts ├── playbooks │ └── db.yml ├── tasks │ └── main.yml └── templates └── root └── okaimono_db_ddl.sql
メインのロール ./tasks/main
--- # パッケージインストール - name: install mariadb server yum: name="{{ item }}" state=present enablerepo=mariadb with_items: - MariaDB-devel - MariaDB-client - MariaDB-server - MySQL-python # DBを読み込む(/root/okaimono_db_ddl.sql がない場合のみ). - name: create schema_okaimono_db template: src=root/"{{ item }}" dest=/root/"{{ item }}" with_items: - okaimono_db_ddl.sql notify: - initialize schema_okaimono_db #DBユーザーを作成します. - name: add db user mysql_user: > name="{{ item.name }}" host="{{ item.subnet }}" password="{{ item.pass }}" priv="{{ item.schema }}":"{{ item.auth }}" append_privs=yes with_items: - { name: 'root', subnet: 'localhost', pass: '****', schema: '*.*' , auth: 'ALL' } - { name: 'sample', subnet: 'localhost', pass: '****', schema: 'temoto.*' , auth: 'ALL' } - { name: 'sample', subnet: '172.22.0.0/255.255.0.0', pass: '****', schema: 'kago.*' , auth: 'ALL' } - { name: 'sample', subnet: '127.0.0.1', pass: '****', schema: 'saihu.*' , auth: 'ALL' } - { name: 'api', subnet: '127.0.0.1', pass: '****', schema: 'temoto.*' , auth: 'SELECT,INSERT,UPDATE,DELETE' }
./handlers/main.yml
- name: initialize schema_infra_db mysql_db: > name=infra_db login_host=127.0.0.1 login_user=root login_password=sampleRootPawsswORDISBADpASSwORD state=import target=/root/okaimono_db_ddl.sql
実行
# 実行確認 ansible-playbook -i ./inventories/hosts ./playbooks/db.yml -l sample_host --check # 実行 ansible-playbook -i ./inventories/hosts ./playbooks/db.yml -l sample_host
注意点
- hostに複数ホストを登録しても良しなにコントロールしてくれるわけではない
- subnetは一つずつ指定してあげないと自動で分離はしてくれない
{ name: 'api', subnet: '127.0.0.1,localhost,172.22.0.0/16', pass: '****', schema: 'temoto.*' , auth: 'SELECT,INSERT,UPDATE,DELETE' }
参照
mysql_db - Add or remove MySQL databases from a remote host. — Ansible Documentation
mysql_replication - Manage MySQL replication — Ansible Documentation
mysql_user - Adds or removes a user from a MySQL database. — Ansible Documentation
mysql_variables - Manage MySQL global variables — Ansible Documentation
データベース - Wikipedia
SQL - Wikipedia
トランザクション処理 - Wikipedia
ACID (コンピュータ科学) - Wikipedia
MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.3.6 SET TRANSACTION 構文
トランザクション分離レベルの勉強記録(1) 4つのレベルを実験する
MySQL - InnoDBのロック関連まとめ
基礎MySQL ~その 4~ InnoDB①
InnoDB の DoubleWrite 技術をみる
以上です.社会は厳しく元気はありませんが今後もやっていきます.