Ansible剧本在尝试执行mysql操作时陷入困境

时间:2019-04-04 13:58:39

标签: mysql ansible

我正在尝试一个简单的“ SHOW DATABASES”;命令和一个可播放的剧本,执行命令时会卡住。

我尝试了不同的选择

- hosts: servers
  become: true
  vars_prompt:
    - name: "db_passw"
      prompt: "DB root password?"
  tasks:
    - name: Configure Database
      shell: |
        mysql -u root -p {{ db_passw }} < ~/sql_query.sql

- hosts: servers
  become: true
  vars_prompt:
    - name: "db_passw"
      prompt: "DB root password?"
  tasks:
    - name: Configure Database
      shell: |
        mysql -u root -p {{ db_passw }} -e "SHOW DATABASES;"

而且,作为测试,我还尝试了明确输入密码

- hosts: servers
  become: true
  vars_prompt:
    - name: "db_passw"
      prompt: "DB root password?"
  tasks:
    - name: Configure Database
      shell: |
        mysql -u root -p <root_passw> -e "SHOW DATABASES;"

但是它总是卡在同一点上。我试图在远程机器外壳中执行上面的mysql命令,它们正常工作。我还尝试在mysql的命令之前执行其他命令,并且正在执行它们。

ansible和mysql之间有问题吗?

我知道有Ansible的MySQL模块,但功能太有限了。

谢谢

1 个答案:

答案 0 :(得分:0)

为我工作。下面的游戏

- hosts: dbserver
  tasks:
    - command: |
        mysql -e "SHOW DATABASES;"
      register: result
    - debug:
        var: result

给予:

TASK [debug] 
ok: [dbserver] => {
    "result": {
        "changed": true, 
        "cmd": [
            "mysql", 
            "-e", 
            "SHOW DATABASES;"
        ], 
        "delta": "0:00:00.010958", 
        "end": "2019-04-04 16:19:58.359100", 
        "failed": false, 
        "rc": 0, 
        "start": "2019-04-04 16:19:58.348142", 
        "stderr": "", 
        "stderr_lines": [], 
        "stdout": 
        ...

当“ become:true”时,不必指定“ -u root”。我尚未为root设置MySQL密码。