欢迎光临
我们一直在努力

【2026最新版Linux安装Mysql】CentOS 7 安装 MySQL 8.4.9 完整流程(RPM 手动安装+避坑+面试)

前言:本文记录在 CentOS 7 / RHEL 7 上,通过官网 RPM Bundle tar 包手动安装 MySQL 8.4.9(LTS) 的完整可复现流程。适合需要在老版本 CentOS 上部署 MySQL、为 Python/AI 后端或 Java 项目准备数据库环境的读者。读完可按步骤完成安装、改密、远程访问配置,并快速定位 6 类常见安装故障。

⚡ 快速参考

  • 适用场景:CentOS 7 无法直接用 yum 装到目标版本;需要指定 MySQL 8.4.x LTS;生产/测试机离线或半离线部署
  • 核心结论:先卸 MariaDB → 按固定顺序装 6 个核心 RPM → mysqld –initialize 拿临时密码 → chown mysql → systemctl 启服 → ALTER USER 改密
  • 最简步骤:下载 mysql安装包 → 解压 → 卸 mariadb-libs → 装依赖 → 顺序 rpm -ivh → 初始化 → 改权限 → 启动 → 改 root 密码
  • 必备命令:mysqld –initialize –console、chown -R mysql:mysql /var/lib/mysql/、systemctl start mysqld
  • 高危避坑:RPM 安装顺序不能乱;初始化后数据目录所有者必须是 mysql;远程访问需同时处理 用户授权 + 防火墙 + bind-address

📚 学习目标

  • 理解 MySQL 8.4 RPM Bundle 各包职责及与系统 MariaDB 的冲突关系
  • 能独立完成 CentOS 7 上 MySQL 8.4.9 的安装、初始化、改密与远程访问配置
  • 掌握初始化、权限、防火墙、SELinux 等典型故障的定位与修复方法

  • 一、环境

    1.1 环境与版本

    项目说明
    操作系统 CentOS 7 / RHEL 7
    MySQL 版本 8.4.9(8.4 系列 LTS,长期支持)
    安装包 mysql-8.4.9-1.el7.x86_64.rpm-bundle.tar
    安装方式 从 tar 解压后 手动 rpm -ivh(非 yum 源一键装)

    1.2 为什么要先卸载 MariaDB

    CentOS 7 默认自带 MariaDB 客户端库(如 mariadb-libs),与 MySQL 官方 RPM 中的 mysql-community-libs 会冲突(同名能力、不同实现)。不卸载会导致 MySQL RPM 安装失败或运行时链接错误。

    1.3 RPM Bundle 核心包职责(必装 6 个)

    包名作用
    mysql-community-common 公共文件(错误信息、字符集等)
    mysql-community-client-plugins 客户端认证插件
    mysql-community-libs 共享库(客户端与服务端共用)
    mysql-community-client 命令行工具(mysql、mysqldump 等)
    mysql-community-icu-data-files 国际化数据(MySQL 8 必需)
    mysql-community-server 数据库服务 mysqld

    可选包(devel、test、debuginfo 等)一般无需安装。

    1.4 与 yum 在线安装对比

    方式优点缺点适用
    RPM Bundle 手动装 版本精确、可离线、与官网一致 步骤多、依赖需自己处理 指定 8.4.9、内网、老系统
    MySQL Yum 仓库 省事、易升级 需配 repo、网络 能访问官方源的环境

    二、安装解释

    2.1 安装顺序为什么固定

    RPM 之间存在 依赖关系:server 依赖 libs、client、icu-data-files 等;libs 又依赖 common。逆序安装会报依赖不满足。因此必须按:common → client-plugins → libs → client → icu-data-files → server。

    2.2 mysqld –initialize 做了什么

    • 在数据目录(默认 /var/lib/mysql/)创建系统库、权限表等文件结构
    • 为 root@localhost 生成 随机临时密码(控制台或 /var/log/mysqld.log 中可见)
    • 首次启动前必须完成;若目录非空会报 data directory has files in it

    2.3 为什么必须 chown mysql:mysql

    mysqld 服务进程以 mysql 系统用户运行,不能读写 root 拥有的数据文件。若 –initialize 后以 root 执行过操作,易出现 Error: 13(权限不够),服务 failed。

    2.4 远程连接的三道关

    客户端 –TCP 3306–> 防火墙 –允许–> mysqld 监听地址(bind-address)
    |
    用户 host(如 root@'%')

    仅改 bind-address 不够;还需 MySQL 用户授权 与 firewalld/iptables(及可能的 SELinux)。


    三、完整过程

    3.1 环境准备

    • 操作系统:CentOS 7 / RHEL 7
    • MySQL 版本:8.4.9(LTS)
    • 安装方式:RPM 包手动安装(从 tar 包解压)

    3.2 Step 1:下载 MySQL 安装包

    从 MySQL 官网 下载:

    mysql-8.4.9-1.el7.x86_64.rpm-bundle.tar

    上传到服务器(如 /opt 或 /root)。 在这里插入图片描述

    3.3 Step 2:解压 tar 包

    tar -xvf mysql-8.4.9-1.el7.x86_64.rpm-bundle.tar

    解压后得到多个 .rpm 文件,进入该目录进行后续安装。

    验证:ls *.rpm 应能看到 common、libs、server 等包。

    3.4 Step 3:卸载系统自带的 MariaDB 库(避免冲突)

    # 查看是否已安装
    rpm -qa | grep mariadb

    # 强制卸载(忽略依赖)——包名以实际查询结果为准
    rpm -e –nodeps mariadb-libs-5.5.60-1.el7_5.x86_64

    注意:包名可能略有不同,务必以 rpm -qa | grep mariadb 输出为准。

    3.5 Step 4:安装依赖工具

    MySQL 服务启动需要 net-tools 和 perl:

    yum install -y net-tools perl

    若安装 RPM 时提示 libnuma.so.1 缺失,额外执行:

    yum install -y numactl

    3.6 Step 5:按顺序安装 MySQL RPM 包(顺序非常重要)

    进入解压后的目录,依次执行:

    rpm -ivh mysql-community-common-8.4.9-1.el7.x86_64.rpm
    rpm -ivh mysql-community-client-plugins-8.4.9-1.el7.x86_64.rpm
    rpm -ivh mysql-community-libs-8.4.9-1.el7.x86_64.rpm
    rpm -ivh mysql-community-client-8.4.9-1.el7.x86_64.rpm
    rpm -ivh mysql-community-icu-data-files-8.4.9-1.el7.x86_64.rpm
    rpm -ivh mysql-community-server-8.4.9-1.el7.x86_64.rpm

    可选包(devel、test、debuginfo 等)无需安装。

    3.7 Step 6:初始化数据库

    mysqld –initialize –console

    执行后会生成临时 root 密码,务必复制保存。示例输出:

    [Note] A temporary password is generated for root@localhost: aS!F_LC>24NJ

    若控制台无输出,请查看 /var/log/mysqld.log:

    grep 'temporary password' /var/log/mysqld.log

    若报错 data directory has files in it,说明 /var/lib/mysql/ 非空,见 五、避坑总结 问题 3。

    3.8 Step 7:修正数据目录权限

    初始化后,数据目录 /var/lib/mysql/ 下文件所有者可能为 root,需改为 mysql 用户:

    chown -R mysql:mysql /var/lib/mysql/

    3.9 Step 8:启动 MySQL 服务并设置开机自启

    systemctl start mysqld
    systemctl enable mysqld
    systemctl status mysqld # 确认状态为 active (running)

    3.10 Step 9:登录并修改 root 密码

    使用临时密码登录:

    mysql -uroot -p
    # 输入临时密码(如 aS!F_LC>24NJ)

    进入 MySQL 命令行后执行:

    ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新强密码';
    FLUSH PRIVILEGES;
    EXIT;

    MySQL 8 默认启用密码策略,新密码需足够复杂(大小写、数字、特殊字符等),否则 ALTER USER 可能失败。

    3.11 Step 10:配置远程访问(可选)

    10.1 授权 root 用户允许任意 IP 连接

    CREATE USER 'root'@'%' IDENTIFIED BY '你的密码';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;

    生产建议:不要长期使用 root@'%',应创建业务专用账号并最小权限授权。

    10.2 开放防火墙 3306 端口

    firewall-cmd –zone=public –add-port=3306/tcp –permanent
    firewall-cmd –reload

    10.3 检查 bind-address

    查看 /etc/my.cnf 中是否有 bind-address=127.0.0.1:

    • 若有:注释掉或改为 bind-address=0.0.0.0
    • 若无:默认通常已监听所需接口(以实际 my.cnf 与 ss -lntp | grep 3306 为准)
    10.4 重启 MySQL 使配置生效

    systemctl restart mysqld

    10.5 测试远程连接

    在其他机器上用客户端(DataGrip、Navicat)或命令行:

    mysql -h 服务器IP -u root -p

    3.12 最终验证

    检查项命令
    本地登录 mysql -uroot -p
    远程登录 mysql -h 服务器IP -uroot -p
    服务状态 systemctl status mysqld
    查看版本 mysql –version

    四、场景应用

    场景 1: 后端本地联调库

    • 需求:在 CentOS 7 测试机上为 FastAPI、Django、LangChain 等应用提供持久化存储
    • 方案:按本文安装 MySQL 8.4.9,创建业务库与用户,应用连接串指向内网 IP:3306
    • 收益:版本与生产一致,避免「开发用 SQLite、上线用 MySQL」的语法差异

    场景 2:内网离线或弱网服务器

    • 需求:服务器无法访问外网 yum 源,但必须固定 8.4.9 版本
    • 方案:在有网机器下载 rpm-bundle.tar 拷贝到目标机,走 RPM 手动安装全流程
    • 收益:安装包可审计、可归档,满足合规与版本锁定

    场景 3:从 MariaDB 迁移到 MySQL 8.4

    • 需求:原系统依赖 CentOS 自带 MariaDB,现需 MySQL 8.4 特性(如窗口函数、JSON、认证插件)
    • 方案:先 –nodeps 卸载 mariadb-libs,再装 MySQL Bundle;数据迁移用 mysqldump 或逻辑复制(迁移前务必备份)
    • 收益:统一技术栈,便于与云 RDS MySQL 8.4 对齐

    五、开发避坑总结(高频错误)

    5.1 常见问题及解决方案(保留原笔记全部案例)

    问题 1:rpm -e mariadb-libs 提示依赖错误
    • 现象:无法卸载,提示被其他包依赖
    • 原因:其他 RPM 声明依赖 mariadb-libs
    • 解决:使用 –nodeps 强制卸载

    rpm -e –nodeps mariadb-libs

    (包名以 rpm -qa | grep mariadb 为准。)

    问题 2:安装 RPM 包时提示 libnuma.so.1 缺失
    • 原因:未安装 NUMA 相关库
    • 解决:

    yum install -y numactl

    问题 3:mysqld –initialize –console 没有输出(或报错 data directory has files in it)
    • 原因:数据目录 /var/lib/mysql/ 非空,可能之前已初始化过
    • 解决:
    • 优先查看日志获取已有临时密码:grep 'temporary password' /var/log/mysqld.log
    • 若确需重新初始化(会清空数据):

    rm -rf /var/lib/mysql/*
    mysqld –initialize –console
    chown -R mysql:mysql /var/lib/mysql/

    问题 4:启动失败,systemctl status mysqld 显示 Error: 13(权限不够)
    • 现象:Active: failed,日志提示权限问题
    • 原因:/var/lib/mysql/ 或其中文件所有者为 root,而 mysqld 以 mysql 用户运行
    • 解决:

    chown -R mysql:mysql /var/lib/mysql/
    systemctl start mysqld

    问题 5:远程连接报 Host 'xxx' is not allowed to connect
    • 原因:root 仅允许 localhost,未授权远程 host
    • 解决:按上文 10.1 创建 root@'%' 或单独业务用户;或修改现有用户的 host 字段
    问题 6:远程连接超时或拒绝连接
    • 可能原因:
      • 防火墙未开放 3306
      • MySQL 绑定了 127.0.0.1
      • SELinux 阻止
    • 解决:
      • 开放防火墙端口(见 10.2)
      • 检查 /etc/my.cnf 中 bind-address
      • 临时测试:setenforce 0(生产环境不建议永久关闭 SELinux,应配置正确策略)

    5.2 最佳实践

    • 安装前对重要数据 全量备份;rm -rf /var/lib/mysql/* 仅用于确定可丢弃的空库环境
    • 记录并妥善保管 临时密码,首次登录后立即 ALTER USER
    • 生产环境使用 独立业务账号 + 最小权限,避免 root@'%'
    • 改配置后习惯 systemctl restart mysqld,并用 tail -f /var/log/mysqld.log 观察启动日志
    • CentOS 7 已 EOL,新环境优先考虑 Rocky/Alma 8+ 或容器化 MySQL;本文适用于必须留在 el7 的场景

    附录:常用 MySQL 管理命令

    操作命令
    启动服务 systemctl start mysqld
    停止服务 systemctl stop mysqld
    重启服务 systemctl restart mysqld
    查看服务状态 systemctl status mysqld
    查看错误日志 tail -f /var/log/mysqld.log
    修改 root 密码 ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
    创建用户并授权 CREATE USER 'user'@'%' IDENTIFIED BY 'pwd'; GRANT ALL ON *.* TO 'user'@'%';
    刷新权限 FLUSH PRIVILEGES;

    本文为 MY_TRUCK 原创实战学习笔记,持续更新 Java 后端与 AI 应用领域干货,问题欢迎评论区交流。

    赞(0)
    未经允许不得转载:171主机测评 » 【2026最新版Linux安装Mysql】CentOS 7 安装 MySQL 8.4.9 完整流程(RPM 手动安装+避坑+面试)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址