在AWS EC2实例用Ansible安装MySQL时遇apt缓存更新失败
在AWS EC2实例上通过Ansible安装MySQL时遇到APT缓存更新失败问题
错误信息
failed: [db01] (item=mysql-server) => {"ansible_loop_var": "item", "changed": false, "item": "mysql-server", "msg": "Failed to update apt cache: "} failed: [db01] (item=mysql-client) => {"ansible_loop_var": "item", "changed": false, "item": "mysql-client", "msg": "Failed to update apt cache: "} failed: [db01] (item=python-mysqldb) => {"ansible_loop_var": "item", "changed": false, "item": "python-mysqldb", "msg": "Failed to update apt cache: "} failed: [db01] (item=python3-mysqldb) => {"ansible_loop_var": "item", "changed": false, "item": "python3-mysqldb", "msg": "Failed to update apt cache: "} failed: [db01] (item=libmysqlclient-dev) => {"ansible_loop_var": "item", "changed": false, "item": "libmysqlclient-dev", "msg": "Failed to update apt cache: "}
我的Ansible Playbook代码
--- - name: 配置MySQL(含账号、数据库及远程登录权限) hosts: group_vars/dbsrvgrp gather_facts: no tasks: - name: 安装MySQL服务及依赖包 package: name: "{{item}}" state: present update_cache: yes cache_valid_time: 86400 loop: - mysql-server - mysql-client - python-mysqldb - python3-mysqldb - libmysqlclient-dev ignore_errors: yes tags: - package
排查与解决方案
1. 手动验证APT可用性
直接登录db01实例,执行以下命令获取缓存更新失败的具体原因:
sudo apt update
此命令会输出详细错误(如网络不通、源地址失效、权限不足等),是最直接的排查手段。
2. 检查EC2实例网络配置
- 确认实例安全组出站规则允许访问公网80/443端口(APT源依赖HTTP/HTTPS获取包信息)
- 测试公网连通性:执行
ping google.com或curl http://archive.ubuntu.com验证网络是否正常
3. 修正Playbook配置问题
hosts字段错误:group_vars/dbsrvgrp是变量存储目录,不是Inventory中的主机组名称,需改为实际定义的组名(如dbsrvgrp)- 移除
ignore_errors: yes:该配置会掩盖真实错误,不利于排查,建议暂时删除 - 开启
gather_facts:设置gather_facts: yes,让Ansible自动识别目标系统的包管理器和系统信息,避免适配问题
4. 处理APT源失效问题
若实例使用的Ubuntu版本过旧(如18.04及更早),官方源已迁移至旧版本归档地址,需修改APT源配置:
- 备份原有源文件:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak - 替换源地址为旧版本归档:
sudo sed -i 's/archive.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list - 再次执行
apt update验证缓存更新
内容的提问来源于stack exchange,提问作者etranz
相关产品推荐
相关产品推荐

