Ansible 自上周起无法连接到 MySLQ 数据库

Ansible 自上周起无法连接到 MySLQ 数据库

我有一个带有 jenkins 的 docker 容器,它使用 ansible 执行一些自动化命令。一个特定的命令连接到另一个 docker 容器上的数据库并执行一些检查(如清理数据库)。这些命令长期以来运行良好,但现在我在尝试连接到 MySQL 时遇到问题。该问题是一个非常著名的错误:

 "msg": "unable to connect to database, check login_user and login_password are correct or /var/jenkins_home/.my.cnf has the credentials. Exception message: __init__() got an unexpected keyword argument 'password'"

显然,这似乎是与凭据相关的连接错误。我解决这个问题的第一个方法是检查密码以确保它是正确的。我已经检查过了,我可以使用 mysql 客户端从 jenkins docker 容器连接,并且使用提供给 ansible 脚本的相同凭据。此外,“var/jenkins_home/.my.cnf”现在具有正确的凭据(我仍然更喜欢将这些凭据放在脚本上,因为不同脚本之间存在差异,但无论如何,我已经更新了它)。但它们都没有解决问题。

我搜索了所有修复它的建议,也检查了login_unix_socket是否有更新按照某些地方的建议更改了套接字的路径,但没有成功。同样的问题。

Docker 容器内的当前版本:

Jenkins: 2.291
Ansible: 2.10.9
Python: 2.7

ansible 上执行的命令很简单:

- name: delete existing usmo database
  delegate_to: localhost
  mysql_db:
    login_user={{ jenkins_database_login_user }}
    login_password={{ jenkins_database_login_password }}
    login_host={{ jenkins_database_host }}
    name={{ jenkins_database }}
    state=absent

所有变量{{ jenkins_database_login_user }}{{ jenkins_database_login_password }}{{ jenkins_database_host }}{{ jenkins_database }}经过检查,具有正确的值。此外,这个脚本已经运行多年。唯一可能发生的事情是,我更新了 jenkins docker 容器(新的 jenkins 版本,也许还有一些新的 SO 包版本),但之前发布的使用版本似乎不是问题。

请注意,我所有访问数据库(具有不同凭据的不同数据库)的 ansible 脚本都失败了。然后我假设这可能是某些东西的更新,但我没有任何线索。我还查看了 Ansible 官方文档musql_db但我没有看到任何影响我的脚本的变化。

这是来自 ansible 的完整详细答案:

fatal: [XXX]: FAILED! => {
    "changed": false, 
    "invocation": {
        "module_args": {
            "ca_cert": null, 
            "check_hostname": null, 
            "check_implicit_admin": false, 
            "client_cert": null, 
            "client_key": null, 
            "collation": "", 
            "config_file": "/var/jenkins_home/.my.cnf", 
            "config_overrides_defaults": false, 
            "connect_timeout": 30, 
            "dump_extra_args": null, 
            "encoding": "", 
            "force": false, 
            "hex_blob": false, 
            "ignore_tables": [], 
            "login_host": "myhost", 
            "login_password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER", 
            "login_port": 3306, 
            "login_unix_socket": "/var/lib/mysqld/mysqld.sock", 
            "login_user": "myuser", 
            "master_data": 0, 
            "name": [
                "database_name"
            ], 
            "quick": true, 
            "restrict_config_file": false, 
            "single_transaction": false, 
            "skip_lock_tables": false, 
            "state": "absent", 
            "target": null, 
            "unsafe_login_password": false, 
            "use_shell": false
        }
    }, 

其中database_namemyusermyhost不是真正的变量,因为我为了安全起见隐藏了它们。

任何能够指出错误之处的线索或建议都将不胜感激。

答案1

好的。今天我在 Jenkins 上看到有一个更新 (2.293),并且我已经用新版本更新了 docker 容器。现在似乎一切都恢复正常,mysql 连接器的问题也消失了。我不知道以前的版本对我的 ansible 脚本有何影响(可能是一些 python 包版本),但在新版本上似乎一切都得到了纠正。

相关内容