質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.34%

ansible-role-mysqlのroleでdatabaseとuserを追加する方法が知りたい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,819

kuriya

score 35

ansible-role-mysqlを使ってdatabaseとuserを追加したいのですが、方法が分かりません。

https://github.com/geerlingguy/ansible-role-mysql/blob/master/defaults/main.yml
こちらの

# Databases.
mysql_databases: []
#   - name: example
#     collation: utf8_general_ci
#     encoding: utf8
#     replicate: 1

# Users.
mysql_users: []
#   - name: example
#     host: 127.0.0.1
#     password: secret
#     priv: *.*:USAGE


この辺りのコメントを外して

# Databases.
mysql_databases: []
   - name: example
     collation: utf8_general_ci
     encoding: utf8
     replicate: 1

# Users.
mysql_users: []
   - name: example
     host: 127.0.0.1
     password: secret
     priv: *.*:USAGE

みたのですがエラーが出てダメでした。
エラーの内容は以下です。

ERROR! Syntax Error while loading YAML.


The error appears to have been in 'ここはrootパス/roles/geerlingguy.mysql/defaults/main.yml': line 101, column 4, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

mysql_databases: []
   - name: takeoec
   ^ here


そこで以下のようにしてみたところ

# Databases.
mysql_databases:
   - name: example
     collation: utf8_general_ci
     encoding: utf8
     replicate: 1

# Users.
mysql_users:
   - name: example
     host: 127.0.0.1
     password: secret
     priv: *.*:USAGE

以下のようなエラーが出ました。

The error appears to have been in 'ここはrootパス/roles/geerlingguy.mysql/defaults/main.yml': line 111, column 13, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

     password: secret
     priv: *.*:USAGE
            ^ here

そこで

# Databases.
mysql_databases:
   - name: example
     collation: utf8_general_ci
     encoding: utf8
     replicate: 1

# Users.
mysql_users:
   - name: example
     host: 127.0.0.1
     password: secret
     priv: "example.*:ALL"


以下のようなエラーが出ました。

TASK [geerlingguy.mysql : Disallow root login remotely] ************************
failed: [default] (item=DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')) => {"changed": false, "cmd": ["mysql", "-NBe", "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')"], "delta": "0:00:00.008562", "end": "2017-03-09 01:21:59.108040", "failed": true, "item": "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')", "rc": 1, "start": "2017-03-09 01:21:59.099478", "stderr": "ERROR 1146 (42S02) at line 1: Table 'mysql.user' doesn't exist", "stdout": "", "stdout_lines": [], "warnings": []}
    to retry, use: --limit @ここはrootパス/lamp.retry

ここで手詰まりでどうしたら良いか分かりません。

ご教授願います。

環境は
vgrantで実装していて
centos6.7を使っています。
https://github.com/CommanderK5/packer-centos-template/releases/download/0.6.7/vagrant-centos-6.7.box
roleは他に
https://galaxy.ansible.com/geerlingguy/php/
https://galaxy.ansible.com/geerlingguy/apache/
を入れています。

今回のソースは以下です。
https://github.com/geerlingguy/ansible-role-mysql
https://galaxy.ansible.com/geerlingguy/mysql/

よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

0

roleを実行するpalybookに変数を入れて実行することにしました。

---
- hosts: all
become: true
roles:
- name: geerlingguy.mysql
vars:
mysql_databases:
- name: example
collation: utf8_general_ci
encoding: utf8
replicate: 1
mysql_users:
- name: example
host: 127.0.0.1
password: secret
priv: "example.*:ALL"
tags:
- mysql
- name: geerlingguy.apache
tags:
- apache
- name: geerlingguy.php
tags:
- php

これで治りました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

普通にSQLが失敗しているだけですね。
ちなみにそのエラーはissue登録されてますのでご確認ください。
https://github.com/geerlingguy/ansible-role-mysql/issues/57

ローカルホスト以外からアクセス可能なrootアカウントを削除するだけのタスクっぽいので、当該タスクをデータベース作成後に実行すれば大丈夫な気がしますが、このプレイブックを利用したことがないのでなんとも言えないです・・・。

ちなみに第三者が作成したプレイブックを使用する場合は事前に内容を精査したほうが良いですよ!

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/09 13:35

    ご回答ありがとうございます。
    https://github.com/geerlingguy/ansible-role-mysql/issues/57を読んだのですが理解出来ませんでした涙
    roleを実行するpalybookに変数を入れて実行することにしました。
    ```
    ---
    - hosts: all
    become: true
    roles:
    - name: geerlingguy.mysql
    vars:
    mysql_databases:
    - name: example
    collation: utf8_general_ci
    encoding: utf8
    replicate: 1
    mysql_users:
    - name: example
    host: 127.0.0.1
    password: secret
    priv: "example.*:ALL"
    tags:
    - mysql
    - name: geerlingguy.apache
    tags:
    - apache
    - name: geerlingguy.php
    tags:
    - php
    ```

    このようにしたところ

    ```
    TASK [geerlingguy.mysql : Ensure MySQL is started and enabled on boot.] ********
    fatal: [default]: FAILED! => {"changed": false, "failed": true, "msg": "MySQL Daemon failed to start.\nStarting mysqld: [FAILED]\r\n"}
    ```

    という*ERROR*が出てしまいました。

    どうすれば良いのでしょうか?

    キャンセル

  • 2017/03/09 14:41

    vagrant destroyしてvagrant upし直したところ治りました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る