使用Ansible设置MySQL root密码失败,报cryptography依赖缺失错误求助
报错根因
MySQL 8.0及以上版本默认使用caching_sha2_password作为用户认证插件,Ansible的mysql_user模块需要依赖cryptographyPython包处理该加密认证方式的请求,目标被管控主机未安装该包就会触发此报错。
排查解决步骤
- 步骤1:在目标被管控主机安装对应Python版本的cryptography依赖包
可直接在现有MySQL配置任务前新增如下Ansible任务完成依赖安装:
也可以手动登录目标主机执行对应pip安装命令:- name: 安装MySQL加密认证依赖包 pip: name: cryptography state: present # 若目标主机默认Python为3.x,需指定pip3路径可放开下一行注释 # executable: pip3pip3 install cryptography - 步骤2:修正mysql_user模块的YAML语法
你当前使用的key=value写法为Ansible旧式参数格式,建议改为标准YAML键值对格式避免解析异常,修正后配置如下:- name: 设置root账号密码 mysql_user: login_user: root login_password: "{{mysql_root_pass.stdout}}" user: root password: "{{password}}" check_implicit_admin: yes host: "{{item}}" priv: "*.*:ALL,GRANT" with_items: - "{{ ansible_hostname }}" - 127.0.0.1 - ::1 - localhost - 步骤3:可选临时兼容方案(不推荐生产环境使用)
若暂时无法安装cryptography包,可手动登录目标主机MySQL,将root用户的认证方式临时修改为旧版的mysql_native_password:
执行完成后再运行Ansible任务即可正常执行。ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '当前root账号密码'; FLUSH PRIVILEGES; - 步骤4:额外校验项
确认目标主机/root/.my.cnf文件未配置冲突的账号密码,若存在该文件可先临时重命名后再运行任务;若为首次初始化MySQL还未设置root密码,需暂时去掉login_password参数再执行任务。
内容的提问来源于stack exchange,提问作者Greshma Shaji
相关产品推荐
相关产品推荐

