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
相关产品推荐
相关产品推荐

