MySQL 5.7 在 CentOS 7 环境安装:从清理 MariaDB 到初始化与完善配置


💯枫亭湖区: 个人主页

🥰个人专栏: 《C++知识分享》 《Linux 入门到实践:零基础也能懂》

🌠 有善始者实繁,能克终者盖寡


索引与导读

  • 前言一:MySQL版本介绍(了解即可)
  • 前言二:文章大体内容
  • [一、MySQL 下载工作](#一、MySQL 下载工作)
    • [1) 查看和卸载你的机器上原有的Mysql](#1) 查看和卸载你的机器上原有的Mysql)
      • [1.1 检查旧版本运行状态](#1.1 检查旧版本运行状态)
      • [1.2 关闭原有正在运行的旧服务](#1.2 关闭原有正在运行的旧服务)
      • [1.3 查看并卸载已有的安装包](#1.3 查看并卸载已有的安装包)
      • [1.4 检查配置文件及数据残留](#1.4 检查配置文件及数据残留)
    • [2)下载 yum 源](#2)下载 yum 源)
      • [2.1 定位官方软件仓库与版本筛选](#2.1 定位官方软件仓库与版本筛选)
      • [2.2 上传至 Linux 服务器](#2.2 上传至 Linux 服务器)
      • [2.3 部署官方 YUM 源文件](#2.3 部署官方 YUM 源文件)
      • [2.4 验证安装后的源状态](#2.4 验证安装后的源状态)
    • 3)安装与登录MySQL
  • 二、疑难解答
  • [💻结尾--- 核心连接协议](#💻结尾— 核心连接协议)

前言一:MySQL版本介绍(了解即可)

一、产品与商业发行版本

发行版本 授权与定位 核心特点与适用场景
社区版 开源免费(GPL) 包含完整的数据库核心功能,无官方商业 SLA 支持 绝大多数互联网项目、个人开发者及中小型业务的首选
企业版 商业付费(闭源增强) 提供企业级监控(MySQL Enterprise Monitor)、线程池(Thread Pool)、透明数据加密(TDE)、企业级审计与官方 7×24 技术支持
NDB 集群版 开源/企业两种 基于 NDB 引擎的高可用、高并发内存数据库架构,主要用于电信级、金融级要求"99.999%"可用性的场景

## 二、核心历史大版本演进

1. MySQL 5.7 (经典时代,已于 2023 年底 EOL)

  • 定位:服役时间最长、最成熟稳定的版本之一
  • 核心特性:原生支持 JSON 数据类型、引入虚拟列、增强了多源复制与并行复制、引入 sys 系统库
  • 现状:官方支持已正式终止,不建议新项目使用

2. MySQL 8.0 (现代化重构,主流 LTS)

  • 架构重构:移除了传统的 .frm 元数据文件,改为基于 InnoDB 的统一数据字典,支持真正的原子 DDL
  • SQL 能力增强:全面支持 CTE(通用表表达式 / WITH 语法)和窗口函数
  • 性能与存储:支持不可见索引、降序索引、直方图、Hash Join 以及 Instant DDL 快速加列
  • 安全增强:引入基于角色的访问控制(RBAC)、默认 caching_sha2_password 认证插件

3. MySQL 8.4 LTS (新一代长期支持版)

  • 定位:8.0 之后的首个 LTS 版本
  • 核心变化:移除老旧的 mysql_native_password 默认支持;调整并优化了 InnoDB 与复制相关参数的默认值;注重长期稳定性与安全性补丁,不再引入破坏性新特性

前言二:文章大体内容

本文详细介绍在 Linux 系统上实现部署、配置、调试 MySQL 数据库的全流程

  • 如何检查旧版本 MySQL 的运行状态检查、服务关闭、残留配置文件卸载方法
  • 讲解 MySQL 如何进行一键安装包部署以及密钥过期问题的解决方案
  • 关于首次登录 MySQL 引发的权限问题,并提供临时密码、直接登录及绕过权限认证三种核心调整方法
  • 最后解析修改配置文件端口号失败 的问题以及设置开机自启等边缘运维问题

一、MySQL 下载工作

1) 查看和卸载你的机器上原有的Mysql

首先 彻底检查系统中是否已经存在正在运行的 MySQL 或其开源分支 MariaDB 进程

  • 如果存在旧的版本或者残余的安装包,必须先将其安全关闭并进行彻底卸载,以防止后续安装新版本时发生端口冲突、依赖冲突或配置覆盖等问题

1.1 检查旧版本运行状态

  1. 检查 MySQL 进程:
    通过使用 ps axj | grep mysql 命令可以筛选出所有与 MySQL 相关的进程

如果输出中包含 grep --color=auto mysql ,这说明当前系统上并没有真正运行的 MySQL 服务的后台进程


  1. 查 MariaDB 进程:
    MariaDB 是 MySQL 的一个开源分支,常被作为默认数据库在很多 Linux 主流发行版中进行内置安装

检查:

ps axj|grep mariadb

输出中显示了 grep 过滤命令自身,表明系统中也没有正在运行的 MariaDB 进程


1.2 关闭原有正在运行的旧服务

卸载原有的 MySQL 或 MariaDB 之前,必须先手动关闭它,且该操作对权限要求较高,需要切换至 root 用户或使用 sudo 提升权限

如果你在第一步查出了正在运行的 MySQL(MariaDB) 数据库进程 ,可以执行以下的命令来停止服务

systemctl stop mysqld

系统中提示 Unit mysqld.service not loaded ,说明当前系统此前并未安装或者未启动 MySQL 服务


1.3 查看并卸载已有的安装包

即便 MySQL 服务没有运行,系统中也可能残留有通过包管理器安装的静态安装包

  • 我们可以通过 RPM 机制将其检索并一键清除

rpm是CentOS、RHEL、Fedora、OpenCloudOS的底层包管理器

检索系统内已安装的 MySQL 关联包:

rpm -qa | grep mysql

  • -qa:rpm 的组合查询参数

    • -q(--query):发起查询操作
    • -a(--all):查询系统中所有已安装的软件包列表
  • 管道符 :将前一个命令(rpm -qa)的标准输出,作为下一个命令(grep)的标准输入

  • grep mysql:文本过滤工具,从输入的全部软件包列表中逐行检索,仅打印包含 mysql 关键字的行

如果执行命令后没有任何回显,说明当前的系统没有通过 rpm 安装任何 MySQL 关联的软件包

标准环境下的卸载补充说明:

如果输入命令后系统列出了具体的安装包,则需要将其送入后面的卸载程序

推荐使用这个高效的一键式卸载组合命令:rpm -qa | grep mysql | xargs yum -y remove


1.4 检查配置文件及数据残留

重点检查历史遗留的全局配置文件以及数据存放目录

  1. 检查全局配置文件路径 /etc/my.cnf:
    MySQL 的核心配置都保存在该文件中:
bash 复制代码
[root@h_l_c ~]#  ls /etc/my.cnf
/etc/my.cnf	#说明还有配置文件残留

[root@h_l_c ~]# cat /etc/my.cnf  
#查看当前的 /etc/my.cnf 属于谁
#如果里面有 mariadb 相关字样,说明是系统自带的 MariaDB 配置

#检查系统中是否残留了相关软件包
[root@h_l_c ~]# rpm -qa | grep -E 'mariadb|mysql'
mariadb-libs-5.5.68-1.el7.x86_64

#卸载 MariaDB 软件包
#如果上一步查到了类似 mariadb-libs、mariadb-common 等包,直接执行批量强制卸载:
[root@h_l_c ~]# rpm -e --nodeps $(rpm -qa | grep -E 'mariadb|mysql')

#将旧的 MariaDB 配置文件重命名备份,防止干扰后续 MySQL 初始化
[root@h_l_c ~]# mv /etc/my.cnf /etc/my.cnf.bak

完成以上几步后,环境即清理完毕

  1. 检查数据存储目录 /var/lib/mysql/
    该目录用来存放数据库的表结构、数据文件以及服务证书等
bash 复制代码
[root@h_l_c ~]# ls  /var/lib/mysql/
ls: 无法访问/var/lib/mysql/: 没有那个文件或目录

若在实际机器中发现 /var/lib/mysql/ 存在残留数据文件且确实不再需要,可以使用重命名备份的方式进行处理,如 mv /var/lib/mysql /var/lib/mysql.bak,来确保新环境不会受历史数据影响



2)下载 yum 源

2.1 定位官方软件仓库与版本筛选

下载版本必须与操作系统匹配

小编自己的Operating System是------CentOS Linux 7(Core)

Kernel------Linux 3.10.0-1160.el7.x86_64

需要安装wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm


访问 MySQL 官方的源下载入口:🔗Lucy的空间骇客裂缝:MySQL 官方


2.2 上传至 Linux 服务器

当我们下载完本地对应的.rpm安装包后,我们需要将其传递到 Linux 环境下的专属文件夹内

  • 在 root 用户目录下为本次安装创建独立的目录
    • 你如果你使用的是 Xshell / FinalShell / MobaXterm 等 SSH 终端工具:

      1. 在 CentOS 终端中安装 lrzsz 工具包**:

        bash 复制代码
        yum install -y lrzsz
      2. 进入目录后直接拖拽或输入上传命令:

        bash 复制代码
        cd ~/mysql
        rz -E
      3. 也可以在进入目录后,直接将 Windows 桌面上的 MySQL 安装包鼠标拖入终端窗口,即可自动弹出上传进度条

    • 在 Windows PowerShell 中使用 scp 命令上传

      1. 在 Windows 上打开一个新的 PowerShell 窗口
      2. 执行 scp 上传命令(将路径和虚拟机 IP 替换为你实际的值)
      bash 复制代码
       # 格式:scp 本地文件路径 root@虚拟机IP:目标路径
      scp "C:\Users\你的用户名\Downloads\mysql-xxxx.rpm" 			root@192.168.x.x:/root/mysql/
      1. 输入 CentOS 的 root 密码,等待进度条传输完成

文件传输完毕后,执行 ls -l 检查文件的大小与完整性:

bash 复制代码
[root@h_l_c mysql]# ls -l
总用量 12
-rw-r--r--. 1 root root 11196 8月  27 2022 mysql80-community-release-el7-7.noarch.rpm

2.3 部署官方 YUM 源文件

我们可以先查看一下系统当前处于未安装前的初始源状态

  • 查看系统存放源配置的全局目录 /etc/yum.repos.d/:
bash 复制代码
[root@h_l_c ~]# ls /etc/yum.repos.d/ -al
总用量 16
drwxr-xr-x.  3 root root   41 8月  17 21:32 .
drwxr-xr-x. 73 root root 8192 8月  17 21:54 ..
drwxr-xr-x.  2 root root  220 8月  17 21:32 bak
-rw-r--r--.  1 root root 1729 8月  17 21:32 CentOS-Base.repo
  • 接下来,通过 rpm -ivh 命令正式把这个官方商店安装进系统:
  • rpm :底层软件包管理器,负责本地 .rpm 文件的解包、安装、查询和卸载
  • -i:核心操作指令,代表执行安装操作
  • -v:显示详细信息,在执行过程中输出详细的安装日志和处理细节
  • -h :打印进度条,在安装和解压包时,以一串 #(哈希字符,共 50 个 # 代表 100%)的形式直观展示安装进度
bash 复制代码
[root@h_l_c mysql]# rpm -ivh mysql80-community-release-el7-7.noarch.rpm
警告:mysql80-community-release-el7-7.noarch.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:mysql80-community-release-el7-7  ################################# [100%]

注意:安装过程中出现的 NOKEY 警告是由于尚未导入 MySQL 官方的 GPG 密钥文件,不影响软件源的正常写入,属于正常现象


2.4 验证安装后的源状态

用 ls /etc/yum.repos.d/ -al 命令查看源目录的变化

此时多了 3 个以 mysql-community 开头的全新 .repo 配置文件


3)安装与登录MySQL

3.1)一键安装

bash 复制代码
yum install -y mysql-community-server

这时候会出现报错提示:

报错提示 mysql-community-common-8.0.46-1.el7.x86_64.rpm 的公钥尚未安装(Key ID a8d3785c),是因为 MySQL 官方在近年更新了 RPM 包的签名密钥,而旧版 release 源中自带的 GPG 密钥不包含该新公钥

解决方案: 导入最新密钥

bash 复制代码
# 导入 2023 与 2025 的密钥
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2025

# 导入之后直接执行安装即可
yum install -y mysql-community-server --nogpgcheck

3.2)检查 MySQL 的状态

检查 MySQL 服务是否正确安装,并确认其可执行文件及配置文件的分布情况

  1. 验证配置文件与可执行程序
    通过 ls /etc/my.cnf 确认全局配置文件是否已经生成
bash 复制代码
[root@h_l_c mysql]# ls /etc/my.cnf
/etc/my.cnf

接着,使用which命令查找 MySQL 服务端核心程序 mysqld 的安装路径

bash 复制代码
[root@h_l_c mysql]# which mysqld
/usr/sbin/mysqld
  1. 区分 服务端与用户端
  • 服务端 (/sbin/mysqld):位于 sbin 目录下,这意味着它是超级管理员专属的可执行程序,通常只有超级管理员权限才能够直接启动和管理该系统服务
  • 用户端 (/bin/mysql):位于 bin 目录下,属于通用用户端工具,系统中任何普通用户都可以运行该程序来连接和访问数据库

分别查看服务端 mysqld 与客户端 mysql 程序的所在路径:

bash 复制代码
[root@h_l_c mysql]# which mysqld
/usr/sbin/mysqld
[root@h_l_c mysql]# which mysql
/usr/bin/mysql

  1. 启动并查看服务进程
    systemctl start mysqld 命令正式启动 MySQL 进程
    启动后,利用 ps axj | grep mysqld 检查其在后台的运行状态
bash 复制代码
[root@h_l_c mysql]# systemctl start mysqld
[root@h_l_c mysql]#  ps axj | grep mysqld
     1  20019  20019  20019 ?            -1 Ssl     27   0:01 /usr/sbin/mysqld
  2052  20068  20067   2004 pts/0     20067 S+       0   0:00 grep --color=auto mysqld

/usr/sbin/mysqld已经在后台成功启动进程,且关联的进程 ID(PID)为 20019


  1. 查看服务端默认网络端口号
    进一步验证它是否正常监听了网络端口
  • 用 netstat -nltp 命令过滤网络状态:
bash 复制代码
[root@h_l_c mysql]# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      900/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1076/master
tcp6       0      0 :::22                   :::*                    LISTEN      900/sshd
tcp6       0      0 ::1:25                  :::*                    LISTEN      1076/master
tcp6       0      0 :::33060                :::*                    LISTEN      20019/mysqld
tcp6       0      0 :::3306                 :::*                    LISTEN      20019/mysqld

最后一行的网络监听信息显示,MySQL 服务端进程(PID 20019)正处于 LISTEN 状态,其默认的服务端口号为 3306


3.3)首次登录与配置调整

  1. 登录引发权限问题
    在完成上述步骤后,MySQL 就可以正常对外服务了
    然而,当我们直接尝试使用管理员身份进行登录时,会遇到权限拦截
bash 复制代码
[root@h_l_c mysql]# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
  • mysql:MySQL 客户端程序的可执行命令
  • -u root:指定登录所使用的用户名 这里的 root 是数据库的超级管理员账号(注意与 Linux 系统的 root 账号区分)
  • -p:通知客户端使用密码验证 执行命令后,终端会换行提示 Enter password:,此时输入的密码在屏幕上不会明文回显(防止旁人偷窥)
    由于 MySQL 8.0 及高版本引入了更严格的安全策略,默认情况下无法直接通过无密码或不正确的密码安全登入

方法一:获取临时密码

bash 复制代码
[root@h_l_c mysql]# sudo grep 'temporary password' >/var/log/mysqld.log
2026-08-17T19:24:42.055135Z 6 [Note] [MY-010454] [Server] A temporary password is generated for >root@localhost: PqVz+y_C*3h)

执行后其中 root@localhost: 后面的字符串就是生成的临时密码

使用临时密码登录

bash 复制代码
mysql -u root -p

在提示 Enter password: 后,输入(或复制鼠标右键粘贴)上面获取到的临时密码并回车即可


如果方法一不行,就试试下面的方法二

如果你安装的是最新的 MySQL,没有所谓的临时密码,因为root默认是没有密码的

我们可以使用 client 登录:

bash 复制代码
mysql 

在提示输入密码时直接敲回车 ,看看能否直接进入 MySQL 命令行


如果方法二不行,那就试试最后的方法三

临时调整对全局文件的配置

  • 使用vim打开 /etc/my.cnf,直接把下面这段代码复制进入
bash 复制代码
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

# 跳过权限验证
skip-grant-tables
  • 重启服务使新配置生效:
bash 复制代码
systemctl restart mysqld
  • 启动mysql服务,在要求输入密码时直接敲击回车,即可成功免密切入 MySQL 内部
bash 复制代码
mysql -u root -p

登录成功后,可以使用 show databases; 命令查看当前系统存在的数据库

sql 复制代码
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.02 sec)

我们可以清晰地看到系统内部保存的所有数据库

  • information_schema(元数据字典)
    • 作用:存储关于数据库所有其他对象的元数据(只读视图)
    • 内容:包含当前有哪些数据库、表名、字段名、数据类型、索引信息以及用户访问权限等
    • 特点:属于虚拟库,不占用实际磁盘物理文件,数据全部在内存中动态生成
  • mysql(核心系统权限库)
    • 作用:MySQL 的核心管理库,存储系统运行所需的基础配置与安全信息
    • 内容:包含用户账号信息、密码哈希、权限控制表(如 user、db、tables_priv)、时区配置、插件以及存储过程定义等
    • 注意:修改权限(如 GRANT、CREATE USER)实际上就是在变更这个库中的数据
  • performance_schema(性能监控库)
    • 作用:用于收集和监控 MySQL 服务器运行时的底层性能指标与事件
    • 内容:记录锁等待、内存消耗、I/O 读写延迟、语句执行耗时等低级别性能数据,常用于 SQL 调优与性能瓶颈诊断
  • sys(性能分析视图库)
    • 作用:基于 information_schema 和 performance_schema 构建的高可读性视图库
    • 内容:将复杂的底层性能数据整理为人类易读的报表(如哪些 SQL 耗时最长、哪些索引从未被使用、未释放的锁等),简化了日常 DBA 运维排查

即使后续进行了服务升级或重启,存放在 datadir(如 /var/lib/mysql)下的历史数据库与表数据也不会被删除或丢失


二、疑难解答

Q1:当你把配置文件里面的端口号改了以后,为什么以前的网络远程客户端无法访问了,而为什么在同一台机器上的客户端却可以正常访问

  • 客户端在连接 MySQL 服务端时,存在两条截然不同的访问路径:
连接路径类型 第一条路:走网络(TCP/IP 协议) 第二条路:走内部秘密通道(Unix Socket)
适用场景 远程访问(如 Windows 连 Linux),或者本机通过 -h 127.0.0.1 强行指定走网络 客户端和服务器在同一台 Linux 机器上,且你直接输入 mysql 登录而不指定 IP
通信媒介 必须通过"IP + 端口号" 端口一旦修改,旧客户端必须同步修改,否则无法通信 不看端口号,它看的是一个特殊的本地文件(通常叫 mysql.sock)

Q2:如何设置开机启动?

bash 复制代码
#开启开机启动
systemctl enable mysqld
systemctl daemon-reload

Q3:如何退出 MySQL?

按快捷键 ctrl + d即可


💻结尾--- 核心连接协议

警告: 🌠🌠正在接入底层技术矩阵。如果你已成功破解学习中的逻辑断层,请执行以下指令序列以同步数据:🌠🌠


【📡】 建立深度链接: 关注本终端。在赛博丛林中深耕底层架构,从原始代码到进阶协议,同步见证每一次系统升级。

【⚡】 能量过载分发: 执行点赞操作。通过高带宽分发,让优质模组在信息流中高亮显示,赋予知识跨维度的传播力。

【💾】 离线缓存核心: 将本页加入收藏。把这些高频实战逻辑存入你的离线存储器,在遭遇系统崩溃或需要离线检索时,实现瞬时读取。

【💬】 协议加密解密: 在评论区留下你的散列码。分享你曾遭遇的代码冲突或系统漏洞(那些年踩过的坑),通过交互式编译共同绕过技术陷阱。

【🛰️】 信号频率投票: 通过投票发射你的选择。你的每一次点击都在重新定义矩阵的进化方向,决定下一个被全量拆解的技术节点。


相关推荐
weixin_404551242 小时前
Oracle SQL 优化知识库:构建方案与价值评估
数据库·sql·oracle
茉莉玫瑰花茶2 小时前
OpenGL [ 基础概念 ]
java·前端·数据库
温暖小土3 小时前
Spring AI 接入 DeepSeek Chat 模型
数据库·人工智能·spring
张小姐的猫3 小时前
【AI大模型接入SDK】 —— 前端页面 & 项目总结与拓展
前端·数据结构·数据库·c++·人工智能·chatgpt
IvorySQL3 小时前
去 IOE 的最后一公里:IvorySQL 5.4 × RISC-V 实测
数据库·人工智能·ai·postgresql·risc-v
-madongyu-3 小时前
HCIE-GaussDB V2.0 笔试考点总览:模块权重、核心要点与高频数字速记
数据库·华为·gaussdb
LRL_3 小时前
Oracle 19c 创建用户并连接 PDB 完整避坑指南
数据库·oracle
雨落在了我的手上3 小时前
MySQL数据库基础(3):库的操作
数据库
slandarer4 小时前
MATLAB | R2026b 更新了哪些有趣的新东西
开发语言·数据库·matlab