Ubuntu 20.04离线安装MySQL 8.0.26实战避坑手册去年负责公司内部数据平台迁移时我需要在三台没有外网权限的Ubuntu 20.04服务器上部署MySQL 8.0.26。本以为按官方文档操作就能轻松搞定结果从依赖包冲突到权限配置踩遍了所有能想到的坑。这篇复盘将用真实踩坑经历带你避开那些官方手册不会告诉你的暗礁。1. 离线环境准备的隐藏陷阱1.1 依赖包版本的地雷阵在下载MySQL 8.0.26的DEB bundle包时我天真地以为所有依赖都已包含。直到在第二台服务器安装时遇到这个报错dpkg: dependency problems prevent configuration of mysql-community-server: mysql-community-server depends on libaio1 ( 0.3.110); however: Version of libaio1 on system is 0.3.105-1ubuntu1.解决方案使用apt-cache policy libaio1检查当前版本下载特定版本依赖包时注意Ubuntu代号差异focal/bionic准备备用版本方案依赖包最低要求版本推荐下载源libaio10.3.110Ubuntu官方archivelibmecab20.996-10packages.ubuntu.comlibssl1.11.1.1security.ubuntu.com1.2 传输文件的权限坑通过SCP上传文件后执行安装时频繁出现Permission denied。原来离线环境默认umask值为027导致上传的deb包权限异常# 修复命令示例 find /mysql_install -name *.deb -exec chmod 644 {} \;提示在WinSCP传输前建议先在本地用7-Zip检查tar包完整性避免传输中断导致隐藏错误2. 安装顺序的生死时速2.1 dpkg的俄罗斯方块游戏原以为按字母顺序安装就行结果在mysql-community-server-core环节卡住。后来发现正确的安装顺序应该是基础库组件sudo dpkg -i mysql-common_8.0.26-1ubuntu20.04_amd64.deb sudo dpkg -i mysql-community-client-plugins_8.0.26-1ubuntu20.04_amd64.deb客户端核心sudo dpkg -i mysql-community-client-core_8.0.26-1ubuntu20.04_amd64.deb依赖库sudo dpkg -i libmysqlclient21_8.0.26-1ubuntu20.04_amd64.deb2.2 密码加密的版本鸿沟安装过程中最坑的选项是密码加密方式选择。如果选了默认的caching_sha2_password会导致旧版客户端无法连接-- 安装后补救方案 ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY your_password; FLUSH PRIVILEGES;注意8.0.26默认的认证插件与5.x不同会影响phpMyAdmin等工具的正常使用3. 远程访问的防火墙迷宫3.1 bind-address的幽灵问题按照常规教程修改mysqld.cnf后依然无法远程连接。后来发现Ubuntu 20.04的AppArmor会限制MySQL的网络访问# 查看当前限制 sudo aa-status | grep mysql # 临时解决方案 sudo setsebool -P mysql_connect_any 13.2 用户权限的多重验证即使执行了GRANT ALL PRIVILEGES连接仍被拒绝。这是因为MySQL 8.0增加了连接限制-- 需要同时检查两个权限表 SELECT host, user FROM mysql.user; SELECT host, user FROM mysql.global_priv;4. 离线环境的故障排查技巧4.1 日志分析的三个关键点当服务无法启动时按优先级检查错误日志位置sudo tail -50 /var/log/mysql/error.log系统资源限制journalctl -xe | grep -i mysqlSELinux上下文ls -Z /var/lib/mysql4.2 回退操作的救命锦囊当安装中途失败时正确的卸载顺序是# 查看已安装组件 dpkg -l | grep mysql # 反向卸载后装的先删 sudo dpkg -r mysql-server mysql-community-server最后分享一个血泪教训在第三台服务器上我忘了先安装libaio1直接开干结果导致依赖关系彻底混乱最终只能重装系统。建议在离线环境下准备一个干净的虚拟机快照作为安装失败的恢复点。