使用Ansible修改MariaDB-Server初始root密码时遭遇访问拒绝
解决Ansible mysql_user模块修改MariaDB root密码失败的问题
问题原因
RHEL 9.2 上的 MariaDB 默认 root 用户采用 unix_socket 认证方式,而非密码认证。这就是为什么你能通过 sudo mysql -u root -h localhost 直接登录(sudo 关联系统root的unix socket),但用空密码通过TCP/IP方式(localhost对应TCP连接)登录会被拒绝。
解决方案
方案1:先切换认证方式再设置密码
先通过shell命令修改root的认证规则,再用mysql_user模块确认密码:
- name: 临时修改root认证方式并设置初始密码 shell: sudo mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '12345';" become: yes - name: 确认root用户密码配置 mysql_user: login_host: 'localhost' login_user: 'root' login_password: '12345' name: 'root' password: '12345' state: present host: 'localhost' become: yes
方案2:通过Unix Socket直接连接
利用MariaDB的unix_socket认证特性,跳过密码登录直接修改:
- name: 设置root用户密码(通过Unix Socket) mysql_user: login_unix_socket: '/var/lib/mysql/mysql.sock' # RHEL9默认路径,若不符请自行调整 name: 'root' password: '12345' state: present host: 'localhost' become: yes
补充说明
- 方案1切换认证方式后,后续可通过密码正常TCP连接管理数据库;
- 方案2贴合系统默认配置,无需密码,但需确认socket文件路径正确。
内容的提问来源于stack exchange,提问作者enigmaedge
相关产品推荐
相关产品推荐

