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

Ansible无法修改MariaDB默认密码问题求助

问题解决:Ansible修改Ubuntu下MariaDB默认密码失败

问题原因

Ubuntu发行版中,MariaDB默认给root用户启用unix_socket认证方式,而非密码认证。你用sudo mysql -u root -p能登录,是因为sudo切换到root用户后,系统通过unix socket直接完成身份验证,根本不需要输入密码。但Ansible的mysql_user模块默认尝试用密码(空密码)登录数据库,哪怕加了become: yes,模块本身还是走密码认证逻辑,因此会被拒绝。

解决方案

方案1:使用mysql_user模块结合unix socket认证(推荐)

直接指定login_unix_socket参数,让模块通过unix socket登录,不需要密码验证:

修改后的playbook.yml:

- hosts: vm-bd-01
  vars:   
     mysql_root_password: password  
  tasks:
  - name: Install MariaDB Server
    apt:
      pkg:
      - mariadb-server
      - python3-pymysql
      update_cache: yes
    become: yes
  - name: Change default MariaDB password
    become: yes
    mysql_user:  
      login_host: 'localhost'
      login_user: 'root'  
      login_unix_socket: '/var/run/mysqld/mysqld.sock'  # Ubuntu默认socket路径
      name: 'root'
      password: '{{ mysql_root_password }}'
      state: present

注意:如果你的MariaDB socket路径不同,可以在目标机器执行mysql -e "SHOW VARIABLES LIKE 'socket';"获取正确路径。

方案2:通过Shell模块执行SQL命令

如果方案1不生效,也可以直接用sudo mysql执行SQL命令修改密码:

- hosts: vm-bd-01
  vars:   
     mysql_root_password: password  
  tasks:
  - name: Install MariaDB Server
    apt:
      pkg:
      - mariadb-server
      - python3-pymysql
      update_cache: yes
    become: yes
  - name: Set MariaDB root password
    become: yes
    shell: |
      mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '{{ mysql_root_password }}'; FLUSH PRIVILEGES;"
    args:
      warn: false  # 关闭Ansible的模块替换提示

两种方案都能解决权限问题,方案1更符合Ansible的最佳实践,方案2则更直接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:42:28