AnsibleでMySQLの環境構築

Tag:

ansibleを用いてCentOS7にMySQLをインストールします。DB作成なども行います。

作業環境

ここでの作業は手順3番になります。1で作業環境について取り上げています。
1. AnsibleでCentOSの初期設定
2. AnsibleでNginxとPHPの環境構築
3. AnsibleでMySQLの環境構築 ←ここ

構成ファイル

group_vars/
  all.yml
roles/
  common/           # 手順1
  mysql/
    handlers/
      main.yml
    tasks/
      main.yml
    templates/
      my.cnf        # mysqlの設定(rootユーザーのホームディレクトリに設置)
      my.cnf_base   # mysqlの設定(ベース)
  nginx/            # 手順2
  php-fpm/          # 手順2
ansible.cfg
hosts
server_init.yml     # 手順1
server_web.yml      # 手順2
server_db.yml       # 今回作業
group_vars/all.yml
---
ssh_user: ユーザ名
ssh_password: 暗号化したパスワード
ssh_groups: wheel 
ssh_port: 22
base_locale: LANG=ja_JP.UTF-8
base_timezone: Asia/Tokyo

nginx_port: 80
nginx_tls_port: 443
nginx_user: vagrant
worker_processes: 2
nginx_document_root: /vagrant/syncCode
is_development: True
php_memory_limit: 1024M

mysql_port: 3306
db_database: DB名
db_username: DBユーザ名
db_password: DBユーザパスワード
db_root_password: DB rootのパスワード
db_memory: 1536M
roles/mysql/handlers/main.yml
---
- name: Restart MySQL
  service: name=mysqld state=restarted
roles/mysql/templates/my.cnf
[client]
user=root
password={{ db_root_password }}
roles/mysql/templates/my.cnf_base
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
innodb_buffer_pool_size ={{ db_memory }}
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

character-set-server = utf8       # 文字コード
default_password_lifetime = 0     # パスワード有効期限を無効。デフォルトだと365日で切れてログインできなくなる
log_timestamps=system             # log出力タイムスタンプをJST。デフォルトだとUTC

# スロークエリログの設定
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow_query.log
long_query_time=1
min_examined_row_limit=1000
server_db.yml
---
- hosts: app
  become: True
  roles:
    - mysql

roles/mysql/tasks/main.yml

mysqlのメインとなるタスクを書きます。

---
- name: MariaDBを削除
  yum: name=mariadb-libs state=absent
  tags: mysql
 
- name: MySQLのリポジトリ取得
  get_url: url=http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm dest=/tmp/mysql57-community-release-el7-7.noarch.rpm
  tags: mysql 
 
- name: yum install mysql repo
  yum: name=/tmp/mysql57-community-release-el7-7.noarch.rpm
  tags: mysql 
 
- name: yum install mysql-community-server
  yum: name=mysql-community-server
  tags: mysql

- name: yum install MySQL-python(ansibleでMySQLを操作するのに必要)
  yum: name=MySQL-python
  tags: mysql

- name: MySQLのサービスを開始、マシン起動時の自動起動化
  service: name=mysqld enabled=yes state=started
  tags: mysql

- name: my.cnf_baseをアップロード
  template: src=my.cnf_base dest=/etc/my.cnf
  notify:
    - Restart MySQL
  tags: mysql

- name: my.cnfをアップロード (ansibleでDB作成などできるようにするため)
  template: src=my.cnf dest=/root/.my.cnf owner=root mode=0600
  tags: mysql-after

- name: DB作成
  mysql_db: name={{ db_database }}  state=present
  tags: mysql-after

- name:  DBユーザー作成
  mysql_user: 
    name={{ db_username }} 
    password={{ db_password }} 
    priv={{ db_database }}.*:ALL 
    state=present 
    host=192.168.%
  tags: mysql-after

- name: MySQL用にポートを開く
  firewalld: port={{ mysql_port }}/tcp permanent=true state=enabled immediate=yes zone=public
  tags: mysql-after

実行

ここでは、ansibleと手作業を併用してmysql環境を構築してます。

1. ansible実行

masterの「/home/vagrant/Code/ansible」配下で下記コマンドを実行します。

ansible-playbook -i hosts server_db.yml -u 手順1で作成したユーザー-t mysql

2. mysql_secure_installationを実行

ansible操作対象サーバにログインして手作業でmysql_secure_installationを実行します。mysql_secure_installationについては下記ページで紹介してます。
MySQL : CentOS7にMySQL5.7をインストール | DN-Web64

3. ansible実行

masterの「/home/vagrant/Code/ansible」配下で下記コマンドを実行します。

ansible-playbook -i hosts server_db.yml -u 手順1で作成したユーザー-t mysql-after

スポンサーリンク