
枫亭湖区个人主页个人专栏《C知识分享》 《Linux 入门到实践零基础也能懂》 有善始者实繁能克终者盖寡索引与导读前言一MySQL版本介绍了解即可一、产品与商业发行版本## 二、核心历史大版本演进前言二文章大体内容一、MySQL 下载工作1 查看和卸载你的机器上原有的Mysql1.1 检查旧版本运行状态1.2 关闭原有正在运行的旧服务1.3 查看并卸载已有的安装包1.4 检查配置文件及数据残留2下载 yum 源2.1 定位官方软件仓库与版本筛选2.2 上传至 Linux 服务器2.3 部署官方 YUM 源文件2.4 验证安装后的源状态3安装与登录MySQL3.1一键安装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的统一数据字典支持真正的原子DDLSQL能力增强全面支持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 --colorauto 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-qarpm的组合查询参数-q--query发起查询操作-a--all查询系统中所有已安装的软件包列表管道符将前一个命令rpm -qa的标准输出作为下一个命令grep的标准输入grep mysql文本过滤工具从输入的全部软件包列表中逐行检索仅打印包含mysql关键字的行如果执行命令后没有任何回显说明当前的系统没有通过rpm安装任何 MySQL 关联的软件包标准环境下的卸载补充说明如果输入命令后系统列出了具体的安装包则需要将其送入后面的卸载程序推荐使用这个高效的一键式卸载组合命令rpm -qa | grep mysql | xargs yum -y remove1.4 检查配置文件及数据残留重点检查历史遗留的全局配置文件以及数据存放目录检查全局配置文件路径/etc/my.cnfMySQL的核心配置都保存在该文件中[rooth_l_c ~]# ls /etc/my.cnf/etc/my.cnf#说明还有配置文件残留[rooth_l_c ~]# cat /etc/my.cnf#查看当前的 /etc/my.cnf 属于谁#如果里面有 mariadb 相关字样说明是系统自带的 MariaDB 配置#检查系统中是否残留了相关软件包[rooth_l_c ~]# rpm -qa | grep -E mariadb|mysqlmariadb-libs-5.5.68-1.el7.x86_64#卸载 MariaDB 软件包#如果上一步查到了类似 mariadb-libs、mariadb-common 等包直接执行批量强制卸载[rooth_l_c ~]# rpm -e --nodeps $(rpm -qa | grep -E mariadb|mysql)#将旧的 MariaDB 配置文件重命名备份防止干扰后续 MySQL 初始化[rooth_l_c ~]# mv /etc/my.cnf /etc/my.cnf.bak完成以上几步后环境即清理完毕检查数据存储目录/var/lib/mysql/该目录用来存放数据库的表结构、数据文件以及服务证书等[rooth_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 7CoreKernel——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工具包**yuminstall-ylrzsz进入目录后直接拖拽或输入上传命令cd~/mysql rz-E也可以在进入目录后直接将 Windows 桌面上的MySQL安装包鼠标拖入终端窗口即可自动弹出上传进度条在Windows PowerShell中使用scp命令上传在Windows上打开一个新的PowerShell窗口执行scp上传命令将路径和虚拟机IP替换为你实际的值# 格式scp 本地文件路径 root虚拟机IP:目标路径scpC:\Users\你的用户名\Downloads\mysql-xxxx.rpmroot192.168.x.x:/root/mysql/输入 CentOS 的 root 密码等待进度条传输完成文件传输完毕后执行 ls -l 检查文件的大小与完整性[rooth_l_c mysql]# ls -l总用量12-rw-r--r--.1root root111968月272022mysql80-community-release-el7-7.noarch.rpm2.3 部署官方 YUM 源文件我们可以先查看一下系统当前处于未安装前的初始源状态查看系统存放源配置的全局目录/etc/yum.repos.d/[rooth_l_c ~]# ls /etc/yum.repos.d/ -al总用量16drwxr-xr-x.3root root418月1721:32.drwxr-xr-x.73root root81928月1721:54..drwxr-xr-x.2root root2208月1721:32 bak -rw-r--r--.1root root17298月1721:32 CentOS-Base.repo接下来通过rpm -ivh命令正式把这个官方商店安装进系统rpm底层软件包管理器负责本地.rpm文件的解包、安装、查询和卸载-i核心操作指令代表执行安装操作-v显示详细信息在执行过程中输出详细的安装日志和处理细节-h打印进度条在安装和解压包时以一串#哈希字符共50个#代表100%的形式直观展示安装进度[rooth_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安装与登录MySQL3.1一键安装yuminstall-ymysql-community-server这时候会出现报错提示报错提示mysql-community-common-8.0.46-1.el7.x86_64.rpm的公钥尚未安装Key ID a8d3785c是因为MySQL官方在近年更新了RPM包的签名密钥而旧版release源中自带的GPG密钥不包含该新公钥解决方案导入最新密钥# 导入 2023 与 2025 的密钥rpm--importhttps://repo.mysql.com/RPM-GPG-KEY-mysql-2023rpm--importhttps://repo.mysql.com/RPM-GPG-KEY-mysql-2025# 导入之后直接执行安装即可yuminstall-ymysql-community-server--nogpgcheck3.2检查 MySQL 的状态检查MySQL服务是否正确安装并确认其可执行文件及配置文件的分布情况验证配置文件与可执行程序通过ls /etc/my.cnf确认全局配置文件是否已经生成[rooth_l_c mysql]# ls /etc/my.cnf/etc/my.cnf接着使用which命令查找MySQL服务端核心程序mysqld的安装路径[rooth_l_c mysql]# which mysqld/usr/sbin/mysqld区分 服务端与用户端服务端/sbin/mysqld位于sbin目录下这意味着它是超级管理员专属的可执行程序通常只有超级管理员权限才能够直接启动和管理该系统服务用户端/bin/mysql位于bin目录下属于通用用户端工具系统中任何普通用户都可以运行该程序来连接和访问数据库分别查看服务端mysqld与客户端mysql程序的所在路径[rooth_l_c mysql]# which mysqld/usr/sbin/mysqld[rooth_l_c mysql]# which mysql/usr/bin/mysql启动并查看服务进程systemctl start mysqld命令正式启动MySQL进程启动后利用ps axj | grep mysqld检查其在后台的运行状态[rooth_l_c mysql]# systemctl start mysqld[rooth_l_c mysql]# ps axj | grep mysqld1200192001920019?-1Ssl270:01 /usr/sbin/mysqld205220068200672004pts/020067S00:00grep--colorauto mysqld/usr/sbin/mysqld已经在后台成功启动进程且关联的进程 IDPID为20019查看服务端默认网络端口号进一步验证它是否正常监听了网络端口用netstat -nltp命令过滤网络状态[rooth_l_c mysql]# netstat -nltpActive Internet connections(only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp000.0.0.0:220.0.0.0:* LISTEN900/sshd tcp00127.0.0.1:250.0.0.0:* LISTEN1076/master tcp600:::22 :::* LISTEN900/sshd tcp600::1:25 :::* LISTEN1076/master tcp600:::33060 :::* LISTEN20019/mysqld tcp600:::3306 :::* LISTEN20019/mysqld最后一行的网络监听信息显示MySQL服务端进程PID20019正处于LISTEN状态其默认的服务端口号为33063.3首次登录与配置调整登录引发权限问题在完成上述步骤后MySQL 就可以正常对外服务了然而当我们直接尝试使用管理员身份进行登录时会遇到权限拦截[rooth_l_c mysql]# mysql -u root -pEnter password: ERROR1045(28000): Access deniedforuserrootlocalhost(using password: NO)mysqlMySQL客户端程序的可执行命令-u root指定登录所使用的用户名 这里的root是数据库的超级管理员账号注意与Linux系统的root账号区分-p通知客户端使用密码验证 执行命令后终端会换行提示Enter password:此时输入的密码在屏幕上不会明文回显防止旁人偷窥由于MySQL 8.0及高版本引入了更严格的安全策略默认情况下无法直接通过无密码或不正确的密码安全登入方法一获取临时密码[rooth_l_c mysql]# sudo grep temporary password /var/log/mysqld.log2026-08-17T19:24:42.055135Z6[Note][MY-010454][Server]A temporary password is generatedforrootlocalhost: PqVzy_C*3h)执行后其中rootlocalhost: 后面的字符串就是生成的临时密码使用临时密码登录mysql-uroot-p在提示Enter password: 后输入或复制鼠标右键粘贴上面获取到的临时密码并回车即可如果方法一不行就试试下面的方法二如果你安装的是最新的MySQL没有所谓的临时密码因为root默认是没有密码的我们可以使用client登录mysql在提示输入密码时直接敲回车看看能否直接进入MySQL命令行如果方法二不行那就试试最后的方法三临时调整对全局文件的配置使用vim打开/etc/my.cnf直接把下面这段代码复制进入[mysqld]datadir/var/lib/mysqlsocket/var/lib/mysql/mysql.sock log-error/var/log/mysqld.log pid-file/var/run/mysqld/mysqld.pid# 跳过权限验证skip-grant-tables重启服务使新配置生效systemctl restart mysqld启动mysql服务在要求输入密码时直接敲击回车即可成功免密切入 MySQL 内部mysql-uroot-p登录成功后可以使用show databases;命令查看当前系统存在的数据库mysqlshowdatabases;--------------------|Database|--------------------|information_schema||mysql||performance_schema||sys|--------------------4rowsinset(0.02sec)我们可以清晰地看到系统内部保存的所有数据库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.sockQ2如何设置开机启动#开启开机启动systemctlenablemysqld systemctl daemon-reloadQ3如何退出MySQL?按快捷键ctrl d即可结尾— 核心连接协议警告正在接入底层技术矩阵。如果你已成功破解学习中的逻辑断层请执行以下指令序列以同步数据【】 建立深度链接关注本终端。在赛博丛林中深耕底层架构从原始代码到进阶协议同步见证每一次系统升级。【⚡】 能量过载分发执行点赞操作。通过高带宽分发让优质模组在信息流中高亮显示赋予知识跨维度的传播力。【】 离线缓存核心将本页加入收藏。把这些高频实战逻辑存入你的离线存储器在遭遇系统崩溃或需要离线检索时实现瞬时读取。【】 协议加密解密在评论区留下你的散列码。分享你曾遭遇的代码冲突或系统漏洞那些年踩过的坑通过交互式编译共同绕过技术陷阱。【️】 信号频率投票通过投票发射你的选择。你的每一次点击都在重新定义矩阵的进化方向决定下一个被全量拆解的技术节点。