LoginSignup
8
7

More than 5 years have passed since last update.

Ansible の mysql_variables モジュールのメモ

Posted at

はじめに

とりま Ansible で MySQL の設定をチェックするようにしたかったのでやってみた。
既存の MySQL サーバが開発ステージング本番マスタースレーブあわせて80機ほどあるのでツールなしで面倒見るのもう無理ぽ。

mysql_variables モジュール

他のモジュールは require 書いてあるのにこれには書いてない。
けど MySQL-python (pyhons-mysqldb?)が必要っぽい(当然MySQLサーバ機上に)。
CentOSでデフォルトのpythonならyumでおk


sudo yum install -y MySQL-python

もちろん pip でもいい(はず)

pip install MySQL-python

playbook


# cat playbooks/mysql_check.yml
- hosts: all
  sudo: yes
  gather_facts: no
  tasks:

    - name: check max_connections
      mysql_variables:
        variable=max_connections
        login_user=接続ユーザ
        login_password=パスワード

発生したエラーと対処方法


$ ansible-playbook playbooks/mysql_check.yml -l XXXXX
PLAY [all] ********************************************************************

TASK: [check max_connections] *************************************************
failed: [XXXXX] => {"failed": true}
msg: the python mysqldb module is required

FATAL: all hosts have already failed -- aborting

PLAY RECAP ********************************************************************
           to retry, use: --limit @/home/myaccount/mysql_check.retry

XXXXX              : ok=0    changed=0    unreachable=0    failed=1

※ 対象のサーバに MySQL-python が入っていないので前述のとおりインストールする

$ ansible-playbook playbooks/mysql_check.yml -l XXXXX

PLAY [all] ********************************************************************

TASK: [check max_connections] *************************************************
failed: [XXXXX] => {"failed": true}
msg: unable to connect to database, check login_user and login_password are correct or ~/.my.cnf has the credentials

FATAL: all hosts have already failed -- aborting

PLAY RECAP ********************************************************************
           to retry, use: --limit @/home/myaccount/mysql_check.retry

XXXXX              : ok=0    changed=0    unreachable=0    failed=1

※ 権限系エラー。MySQLの権限まわりは別途調べましょう。
ちなみにAnsibleだとローカルホスト扱いみたいなので root で接続してもいい、ハズ。。。(いやよくない(反語

成功


$ ansible-playbook playbooks/mysql_check.yml -l XXXXX

PLAY [all] ********************************************************************

TASK: [check max_connections] *************************************************
ok: [XXXXX] => {"changed": false, "msg": [["max_connections", "151"]]}

PLAY RECAP ********************************************************************
XXXXX              : ok=1    changed=0    unreachable=0    failed=0

※ わざわざ changed_when: False 書かなくても参照時はちゃんとfalseなのは小町的にポイント高い

one more thing

sudo:yes の場合には root ユーザの、sudo:no の場合には実行時ユーザの、ホームディレクトリの .my.cnf に user と password を設定しておけば、playbook 中からは login_user と login_password は外すことができる。
もっとも、Ansible 実行側の vars 等にホスト毎の変数として置いておいたほうが取り回しは楽だと思うけど。

あと、この .my.cnf に余計な設定があるとエラーになるので注意。
no-auto-rehash と interactive-timeout が ConfigParser.py でエラーになった。

8
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7