如何使用Ansible安装MySQL 8.0.21并解决root密码为空问题
问题原因
- 你当前使用的MySQL 8.0社区版独立deb包,对应的debconf配置项名称为
mysql-community-server,而非官方源自带的mysql-server,原有配置匹配不到对应软件包的配置项,导致密码未写入。 - MySQL 8.0默认安装后root用户启用
auth_socket认证插件,仅允许本地root系统用户通过socket免密登录,也会表现为root密码为空的现象。
修正后的Ansible配置
- name: 预置MySQL root密码到debconf debconf: name: 'mysql-community-server' question: 'mysql-community-server/root_password' value: '{{ MySQL_root_pass }}' vtype: 'password' become: yes environment: DEBIAN_FRONTEND: noninteractive - name: 二次确认MySQL root密码到debconf debconf: name: 'mysql-community-server' question: 'mysql-community-server/root_password_again' value: '{{ MySQL_root_pass }}' vtype: 'password' become: yes environment: DEBIAN_FRONTEND: noninteractive - name: 安装MySQL社区版deb包 apt: deb: "required_package.deb" become: true environment: DEBIAN_FRONTEND: noninteractive # 可选:强制root用户使用密码认证,避免socket免密登录的问题 - name: 配置MySQL root用户使用密码认证 shell: > mysql -uroot -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '{{ MySQL_root_pass }}'; FLUSH PRIVILEGES;" become: yes ignore_errors: yes
注意事项
- 如果之前已经安装过MySQL未清理干净,需先执行
apt purge mysql-*并删除/var/lib/mysql目录后再运行新的playbook,避免残留配置影响。 - 不需要对
MySQL_root_pass变量加quote过滤器,debconf模块会自动处理特殊字符,加了反而可能导致密码被额外加上引号导致不匹配。
内容的提问来源于stack exchange,提问作者JINU JANAN
相关产品推荐
相关产品推荐

