我正在尝试一个简单的“ 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模块,但功能太有限了。
谢谢
答案 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密码。