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 关闭原有正在运行的旧服务

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

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

systemctl stop mysqld

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


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

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

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

rpmCentOS、RHEL、Fedora、OpenCloudOS的底层包管理器

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

rpm -qa | grep mysql

  • -qarpm 的组合查询参数

    • -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)
  • mysqlMySQL 客户端程序的可执行命令
  • -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 的核心管理库,存储系统运行所需的基础配置与安全信息
    • 内容:包含用户账号信息、密码哈希、权限控制表(如 userdbtables_priv)、时区配置、插件以及存储过程定义等
    • 注意:修改权限(如 GRANTCREATE USER)实际上就是在变更这个库中的数据
  • performance_schema(性能监控库)
    • 作用:用于收集和监控 MySQL 服务器运行时的底层性能指标与事件
    • 内容:记录锁等待、内存消耗、I/O 读写延迟、语句执行耗时等低级别性能数据,常用于 SQL 调优与性能瓶颈诊断
  • sys(性能分析视图库)
    • 作用:基于 information_schemaperformance_schema 构建的高可读性视图库
    • 内容:将复杂的底层性能数据整理为人类易读的报表(如哪些 SQL 耗时最长、哪些索引从未被使用、未释放的锁等),简化了日常 DBA 运维排查

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


二、疑难解答

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

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

Q2:如何设置开机启动?

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

Q3:如何退出 MySQL?

按快捷键 ctrl + d即可


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

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


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

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

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

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

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


相关推荐
码农颜3 小时前
6.1.2 常⽤⽅法的问题
数据库·sql·oracle
明志数科4 小时前
宇树科技IPO背后的产业逻辑:人形机器人从“讲故事“到“交数据“
运维·服务器·数据库
淼澄研学4 小时前
基于RAG与Milvus向量数据库的搜题长尾问题检索实操教程
数据库·milvus
Dovis(誓平步青云)4 小时前
DevEco Studio 6.1.1 Windows 安装实录:从下载校验到首次启动
android·开发语言·数据库·人工智能·windows·harmonyos
Data_Journal4 小时前
什么是 CAPTCHA,它是如何工作的?
java·大数据·服务器·前端·数据库
霸道流氓气质4 小时前
Redis Pub/Sub — 概念、原理、场景与代码示例
数据库·redis·缓存
李高钢5 小时前
C# WPF Prism 进阶(二):区域(Region)与模块化(Module)
java·前端·数据库
long3165 小时前
枚举(Enums)
java·开发语言·数据库
TJHHH.5 小时前
SQL注入学习总结
数据库·笔记·sql·学习·注入