避坑指南:在Ubuntu 20.04上手动安装MySQL 8.0.26,我踩过的那些依赖和权限的坑
2026/6/8 10:57:24 网站建设 项目流程

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官方archive
libmecab20.996-10packages.ubuntu.com
libssl1.11.1.1security.ubuntu.com

1.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环节卡住。后来发现正确的安装顺序应该是:

  1. 基础库组件
    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
  2. 客户端核心
    sudo dpkg -i mysql-community-client-core_8.0.26-1ubuntu20.04_amd64.deb
  3. 依赖库
    sudo dpkg -i libmysqlclient21_8.0.26-1ubuntu20.04_amd64.deb

2.2 密码加密的版本鸿沟

安装过程中最坑的选项是密码加密方式选择。如果选了默认的caching_sha2_password,会导致旧版客户端无法连接:

-- 安装后补救方案 ALTER USER 'root'@'localhost' 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 1

3.2 用户权限的多重验证

即使执行了GRANT ALL PRIVILEGES,连接仍被拒绝。这是因为MySQL 8.0增加了连接限制:

-- 需要同时检查两个权限表 SELECT host, user FROM mysql.user; SELECT host, user FROM mysql.global_priv;

4. 离线环境的故障排查技巧

4.1 日志分析的三个关键点

当服务无法启动时,按优先级检查:

  1. 错误日志位置
    sudo tail -50 /var/log/mysql/error.log
  2. 系统资源限制
    journalctl -xe | grep -i mysql
  3. SELinux上下文
    ls -Z /var/lib/mysql

4.2 回退操作的救命锦囊

当安装中途失败时,正确的卸载顺序是:

# 查看已安装组件 dpkg -l | grep mysql # 反向卸载(后装的先删) sudo dpkg -r mysql-server mysql-community-server

最后分享一个血泪教训:在第三台服务器上,我忘了先安装libaio1直接开干,结果导致依赖关系彻底混乱,最终只能重装系统。建议在离线环境下准备一个干净的虚拟机快照,作为安装失败的恢复点。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询