使用Ansible community.mysql.mysql_query模块执行查询时报错求助
问题原因及解决办法
核心原因
- 模块版本不兼容:你使用的Ansible 2.6.20版本过于老旧,
community.mysql.mysql_query模块是在Ansible 2.10及以上版本才被纳入community.mysql集合的,2.6版本根本不存在这个模块。 - 错误行号偏移:由于Ansible无法识别不存在的模块,导致错误提示的行号不准确,实际问题出在模块本身,而非任务名称行。
解决步骤
方案一:升级Ansible及相关集合(推荐)
若环境允许,升级到支持目标模块的版本:
- 升级Ansible到2.10+版本:
pip install ansible>=2.10 - 安装
community.mysql集合:ansible-galaxy collection install community.mysql - 保持现有playbook结构不变,重新执行命令即可。
方案二:适配Ansible 2.6版本(不升级环境)
2.6版本无原生mysql_query模块,可通过调用MySQL客户端执行查询:
修改playbook的tasks部分为:
- name: Simple select query to db shell: | mysql -h {{ host_name }} -P {{ database_port }} -u {{ database_user }} -p'{{ database_password }}' {{ database_name }} -e "SELECT * FROM DECOM_QUEUE" register: query_result - name: Print query result debug: var: query_result.stdout_lines
注意:此方式要求目标主机(此处为localhost)已安装MySQL客户端工具;命令行明文写密码存在安全风险,建议改用环境变量或MySQL配置文件传递认证信息。
额外注意点
你的inventory文件中[vars]组写法不符合Ansible标准,标准写法应为:
[localhost] localhost ansible_connection=local [localhost:vars] host_name=mydb.localdomain database_name=serverdb database_port=5501 database_user=sql_svc database_password=Test1234
也可直接在playbook中覆盖变量,避免inventory与playbook变量冲突。
内容的提问来源于stack exchange,提问作者itinneed2022_1
相关产品推荐
相关产品推荐

