

🥰个人专栏: 《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
-
- 3.1)一键安装
- [3.2)检查 MySQL 的状态](#3.2)检查 MySQL 的状态)
- 3.3)首次登录与配置调整
- 二、疑难解答
- [💻结尾--- 核心连接协议](#💻结尾— 核心连接协议)
前言一: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 检查旧版本运行状态
- 检查 MySQL 进程:
通过使用ps axj | grep mysql命令可以筛选出所有与MySQL相关的进程

如果输出中包含
grep --color=auto mysql,这说明当前系统上并没有真正运行的 MySQL 服务的后台进程
- 查 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 检查配置文件及数据残留
重点检查历史遗留的全局配置文件以及数据存放目录
- 检查全局配置文件路径
/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
完成以上几步后,环境即清理完毕

- 检查数据存储目录
/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 终端工具:
-
在
CentOS终端中安装lrzsz工具包**:bashyum install -y lrzsz -
进入目录后直接拖拽或输入上传命令:
bashcd ~/mysql rz -E -
也可以在进入目录后,直接将 Windows 桌面上的
MySQL安装包鼠标拖入终端窗口,即可自动弹出上传进度条
-
-
在
Windows PowerShell中使用scp命令上传- 在
Windows上打开一个新的PowerShell窗口 - 执行
scp上传命令(将路径和虚拟机IP替换为你实际的值)
bash# 格式:scp 本地文件路径 root@虚拟机IP:目标路径 scp "C:\Users\你的用户名\Downloads\mysql-xxxx.rpm" root@192.168.x.x:/root/mysql/- 输入 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 服务是否正确安装,并确认其可执行文件及配置文件的分布情况
- 验证配置文件与可执行程序
通过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
- 区分 服务端与用户端
- 服务端 (
/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
- 启动并查看服务进程
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
- 查看服务端默认网络端口号
进一步验证它是否正常监听了网络端口
- 用
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服务端进程(PID20019)正处于LISTEN状态,其默认的服务端口号为3306
3.3)首次登录与配置调整
- 登录引发权限问题
在完成上述步骤后,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: 后面的字符串就是生成的临时密码使用临时密码登录
bashmysql -u root -p在提示
Enter password: 后,输入(或复制鼠标右键粘贴)上面获取到的临时密码并回车即可
如果方法一不行,就试试下面的方法二
如果你安装的是最新的
MySQL,没有所谓的临时密码,因为root默认是没有密码的我们可以使用
client登录:
bashmysql在提示输入密码时直接敲回车 ,看看能否直接进入
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
- 重启服务使新配置生效:
bashsystemctl restart mysqld
- 启动
mysql服务,在要求输入密码时直接敲击回车,即可成功免密切入 MySQL 内部
bashmysql -u root -p登录成功后,可以使用
show databases;命令查看当前系统存在的数据库
sqlmysql> 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即可
💻结尾--- 核心连接协议
警告: 🌠🌠正在接入底层技术矩阵。如果你已成功破解学习中的逻辑断层,请执行以下指令序列以同步数据:🌠🌠
【📡】 建立深度链接: 关注本终端。在赛博丛林中深耕底层架构,从原始代码到进阶协议,同步见证每一次系统升级。
【⚡】 能量过载分发: 执行点赞操作。通过高带宽分发,让优质模组在信息流中高亮显示,赋予知识跨维度的传播力。
【💾】 离线缓存核心: 将本页加入收藏。把这些高频实战逻辑存入你的离线存储器,在遭遇系统崩溃或需要离线检索时,实现瞬时读取。
【💬】 协议加密解密: 在评论区留下你的散列码。分享你曾遭遇的代码冲突或系统漏洞(那些年踩过的坑),通过交互式编译共同绕过技术陷阱。
【🛰️】 信号频率投票: 通过投票发射你的选择。你的每一次点击都在重新定义矩阵的进化方向,决定下一个被全量拆解的技术节点。


