Ubuntu 20.04 离线安装 MySQL 8.0.39 超详细教程(自定义端口+数据目录)
在生产环境或无外网服务器中离线安装 MySQL 是高频需求。本文手把手带你在 Ubuntu 20.04 上离线部署 MySQL 8.0.39包含自定义端口3326、自定义数据目录/data/mysqldata、防火墙配置、权限开放全流程一步到位不踩坑。一、环境准备1. 安装包规划所有依赖包、MySQL 官方 deb 捆绑包统一存放路径/data/mysql8.0需提前上传以下文件到该目录MySQL 8.0.39 官方 deb 捆绑包mysql-server_8.0.39-1ubuntu20.04_amd64.deb-bundle.tar依赖包libaio1_0.3.112-5_amd64.deb、libmecab2_0.996-10build1_amd64.deb官方下载地址MySQL 8.0.39 deb 捆绑包https://cdn.mysql.com/Downloads/MySQL-8.0/mysql-server_8.0.39-1ubuntu20.04_amd64.deb-bundle.tarlibaio1 依赖http://archive.ubuntu.com/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-5_amd64.deblibmecab2 依赖http://archive.ubuntu.com/ubuntu/pool/main/m/mecab/libmecab2_0.996-10build1_amd64.deb2. 创建安装目录# 创建统一存放目录sudomkdir-p/data/mysql8.0二、解压 MySQL 安装包将官方 deb 捆绑包解压到/data/mysql8.0目录获取所有安装组件tar-xvf/data/mysql8.0/mysql-server_8.0.39-1ubuntu20.04_amd64.deb-bundle.tar-C/data/mysql8.0解压后会生成多个.deb格式的 MySQL 组件包后续按顺序安装即可。三、按顺序安装依赖与 MySQL 组件MySQL 8.0 组件有严格依赖关系必须按以下顺序执行安装否则会报错1. 安装系统依赖包# 安装 libaio 依赖sudodpkg-i/data/mysql8.0/libaio1_0.3.112-5_amd64.deb# 安装 mecab 依赖sudodpkg-i/data/mysql8.0/libmecab2_0.996-10build1_amd64.deb2. 安装 MySQL 客户端组件# 安装客户端插件sudodpkg-i/data/mysql8.0/mysql-community-client-plugins_8.0.39-1ubuntu20.04_amd64.deb# 安装客户端核心sudodpkg-i/data/mysql8.0/mysql-community-client-core_8.0.39-1ubuntu20.04_amd64.deb# 安装公共配置sudodpkg-i/data/mysql8.0/mysql-common_8.0.39-1ubuntu20.04_amd64.deb# 安装客户端sudodpkg-i/data/mysql8.0/mysql-community-client_8.0.39-1ubuntu20.04_amd64.deb# 安装客户端元包sudodpkg-i/data/mysql8.0/mysql-client_8.0.39-1ubuntu20.04_amd64.deb3. 安装 MySQL 服务端组件# 安装服务端核心sudodpkg-i/data/mysql8.0/mysql-community-server-core_8.0.39-1ubuntu20.04_amd64.deb# 安装服务端sudodpkg-i/data/mysql8.0/mysql-community-server_8.0.39-1ubuntu20.04_amd64.deb# 安装服务端元包sudodpkg-i/data/mysql8.0/mysql-server_8.0.39-1ubuntu20.04_amd64.deb执行到这一步MySQL 基础安装完成接下来进行自定义配置。四、自定义 MySQL 配置端口数据目录默认 MySQL 端口为 3306、数据目录为/var/lib/mysql生产环境建议自定义本文修改为端口3326数据目录/data/mysqldata1. 修改 MySQL 主配置文件# 编辑配置文件vi/etc/mysql/my.cnf在[mysqld]模块下添加/修改以下配置[mysqld] # 自定义数据目录 datadir/data/mysqldata # 自定义端口 port3326保存退出:wq。2. 创建数据目录并授权MySQL 运行需要专用用户权限必须手动创建目录并授权# 创建数据目录sudomkdir-p/data/mysqldata# 授权 mysql 用户访问sudochown-Rmysql:mysql /data/mysqldata五、配置 AppArmor 权限关键Ubuntu 默认启用 AppArmor 安全模块会限制 MySQL 访问自定义目录不配置会导致服务启动失败。1. 修改 AppArmor 配置文件vi/etc/apparmor.d/usr.sbin.mysqld找到# Allow data dir access注释行修改下方目录规则# 原配置注释替换为以下内容 /data/mysqldata/ r, /data/mysqldata/** rwk,保存退出。2. 重载 AppArmor 服务sudosystemctl reload apparmor六、启动 MySQL 服务1. 启动服务sudosystemctl start mysql2. 查看服务状态sudosystemctl status mysql显示active (running)说明服务启动成功。3. 服务启动失败解决方案若启动失败按以下步骤排查清理数据目录清空残留文件sudorm-rf/data/mysqldata/*重新初始化数据目录sudomysqld--initialize--usermysql--basedir/usr--datadir/data/mysqldata再次启动服务sudosystemctl start mysql七、防火墙配置开放 3326 端口根据服务器使用的防火墙工具选择对应配置1. UFW 防火墙Ubuntu 默认sudoufw allow3326/tcp2. Firewalld 防火墙# 检查并启动 firewalldsudosystemctl status firewalldsudosystemctl start firewalld# 开放 3326 端口永久生效sudofirewall-cmd--zonepublic --add-port3326/tcp--permanent# 重载防火墙sudofirewall-cmd--reload# 验证端口是否开放sudofirewall-cmd--zonepublic --list-ports八、MySQL 初始化与远程权限配置1. 获取初始 root 密码初始化后MySQL 会自动生成随机密码查看日志获取sudogreptemporary password/var/log/mysql/error.log2. 登录 MySQLmysql-uroot-p-P3326粘贴刚才获取的临时密码登录。3. 修改 root 密码首次登录必须操作ALTERUSERrootlocalhostIDENTIFIEDBY你的新密码;FLUSHPRIVILEGES;4. 开启远程访问权限生产环境需允许远程工具Navicat/DBeaver连接两种方式任选其一方式一直接授权所有权限推荐GRANTALLPRIVILEGESON*.*TOroot%WITHGRANTOPTION;FLUSHPRIVILEGES;方式二修改用户主机权限USEmysql;UPDATEuserSETHost%WHEREUserroot;FLUSHPRIVILEGES;5. 验证远程权限配置SELECTUser,HostFROMmysql.user;看到root用户对应的Host为%说明配置成功。九、常用验证命令查看 MySQL 数据存储路径SHOWVARIABLESLIKEdatadir;查看 MySQL 监听端口SHOWVARIABLESLIKEport;设置 MySQL 开机自启sudosystemctlenablemysql十、总结本文完整覆盖了Ubuntu 20.04 离线安装 MySQL 8.0.39的全流程核心亮点严格遵循依赖顺序避免安装报错自定义端口数据目录符合生产规范解决 AppArmor 权限限制、防火墙开放等常见坑远程权限一键配置开箱即用。按照此教程操作即可快速完成无外网环境下的 MySQL 部署适合服务器运维、开发人员参考使用。总结离线安装核心按依赖顺序安装 deb 包缺一不可、顺序不能乱服务启动关键配置 AppArmor 权限 正确授权数据目录远程连接必备开放防火墙端口 授权 root 远程权限自定义配置通过my.cnf修改端口和数据目录灵活适配生产环境。