You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Ansible设置MySQL root密码失败,报cryptography依赖缺失错误求助

报错根因

MySQL 8.0及以上版本默认使用caching_sha2_password作为用户认证插件,Ansible的mysql_user模块需要依赖cryptographyPython包处理该加密认证方式的请求,目标被管控主机未安装该包就会触发此报错。

排查解决步骤
  • 步骤1:在目标被管控主机安装对应Python版本的cryptography依赖包
    可直接在现有MySQL配置任务前新增如下Ansible任务完成依赖安装:
    - name: 安装MySQL加密认证依赖包
      pip:
        name: cryptography
        state: present
        # 若目标主机默认Python为3.x,需指定pip3路径可放开下一行注释
        # executable: pip3
    
    也可以手动登录目标主机执行对应pip安装命令:
    pip3 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:
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '当前root账号密码';
    FLUSH PRIVILEGES;
    
    执行完成后再运行Ansible任务即可正常执行。
  • 步骤4:额外校验项
    确认目标主机/root/.my.cnf文件未配置冲突的账号密码,若存在该文件可先临时重命名后再运行任务;若为首次初始化MySQL还未设置root密码,需暂时去掉login_password参数再执行任务。

内容的提问来源于stack exchange,提问作者Greshma Shaji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:45:01