MySQLインストール(Ansible)


はじめに

Ansibleを使用してMySQLインストールを行う際の手順を記述します
サンプルアプリケーションはgithubになります

前提事項

Ansibleセットアップ手順はREADMEを参照ください
アプリケーション環境構築イメージはアプリケーション環境構築(Ansible)を参照ください

MySQLインストール(Ansible)

MySQLインストールを行うplaybookを定義します

ファイル 内容
変数ファイル MySQLのユーザやDB等の変数を定義します
タスクファイル MySQL関連のパッケージのインストールやユーザ及びDB作成等を定義します

MySQL関連のパッケージインストール

MySQL関連のパッケージをインストールします

- name: MySQL関連のパッケージインストール
  apt:
    force_apt_get: yes
    state: latest
    name:
      - mysql-server-5.7
      - mysql-client-5.7
      - python-mysqldb

各項目の説明は以下のとおり

項目 内容
force_apt_get 警告を回避するためにapt-get使用を指定します
※詳細は#56832を参照ください
state latestを指定して最新バージョンをインストールします
name mysqlサーバ等の必要なパッケージ名を指定します

rootユーザのパスワード設定

rootユーザのパスワード設定を行います

- name: rootユーザのパスワード設定
  mysql_user:
    login_user: "{{ admin_user_name }}"
    login_password: "{{ admin_user_password }}"
    name: "{{ admin_user_name }}"
    password: "{{ admin_user_password }}"
    check_implicit_admin: yes
    state: present

各項目の説明は以下のとおり

項目 内容
login_user MySQL接続時のユーザ名(root)を指定します
login_password MySQL接続時のパスワードを指定します
name ユーザ名(root)を指定します
password パスワードを指定します
check_implicit_admin パスワードなしでログイン可能かをチェックします
※MySQLインストール直後はrootユーザのパスワードはないためチェックを行います
state presentを指定してパスワード変更済の場合はスキップします

匿名ユーザ削除

セキュリティを強化するため匿名ユーザを削除します

- name: 匿名ユーザ削除
  mysql_user:
    login_user: "{{ admin_user_name }}"
    login_password: "{{ admin_user_password }}"
    name: ''
    host_all: yes
    state: absent

各項目の説明は以下のとおり

項目 内容
login_user MySQL接続時のユーザ名(root)を指定します
login_password MySQL接続時のパスワードを指定します
name 匿名ユーザを指定します
host_all 全ホストを対象にします
state 該当ユーザが存在する場合は削除します

文字コード設定変更

MySQLの文字コードを変更します

- name: MySQL接続時の文字コードセット
  lineinfile:
    path: /etc/mysql/conf.d/mysql.cnf
    insertafter: '\[mysqld\]'
    line: 'default-character-set=utf8mb4'

- name: サーバ起動時の文字コードセット
  lineinfile:
    dest: /etc/mysql/mysql.conf.d/mysqld.cnf
    insertafter: '\[mysqld\]'
    line: "character-set-server=utf8mb4"

各項目の説明は以下のとおり

項目 内容
path 変更ファイルのパスを指定します
insertafter 文字列の挿入先を指定します
line 挿入する文字列を指定します

DB作成

MySQLのDBを作成します

- name: DB作成
  mysql_db:
    login_user: "{{ admin_user_name }}"
    login_password: "{{ admin_user_password }}"
    name: "{{ db_name }}"
    state: present
    encoding: utf8mb4

各項目の説明は以下のとおり

項目 内容
login_user mysql接続時のユーザ名(root)を指定します
login_password mysql接続時のパスワードを指定します
name DB名を指定します
state 該当DBが存在する場合はスキップします
encoding DBの文字コードを指定します

ユーザ追加

MySQLのユーザを作成します

- name: ユーザ追加
  mysql_user:
    login_user: "{{ admin_user_name }}"
    login_password: "{{ admin_user_password }}"
    name: "{{ user_name }}"
    password: "{{ user_password }}"
    priv: '{{ db_name }}.*:ALL'
    state: present

各項目の説明は以下のとおり

項目 内容
login_user MySQL接続時のユーザ名(root)を指定します
login_password MySQL接続時のパスワードを指定します
name ユーザ名を指定します
password パスワードを指定します
priv DBの権限付与を指定します
state 該当ユーザが存在する場合はスキップします

MySQLサービス再起動

MySQLサービスを再起動します

- name: mysqlサービス再起動
  service:
    name: mysql
    enabled: yes
    state: restarted

各項目の説明は以下のとおり

項目 内容
name mysqlを指定します
enabled yesを指定してサーバ起動時にサービスの起動を行います
state restartedを指定して再起動を行います

参考情報