MySQL 系统学习之路 第一篇:服务安装、基础概念与架构全解

第一部分:CentOS 7 环境安装 MySQL 5.7

一、安装前置说明

1.1 基础约定

约定 说明
操作权限 安装、卸载、配置全程使用 root (或 sudo),避免权限问题
账户使用 入门练习阶段统一用 root 登录 MySQL;后续学完用户权限管理再创建普通业务用户
环境冲突 CentOS 7 默认预装 MariaDB (MySQL 分支),与 MySQL 端口、配置文件、进程冲突,必须彻底卸载

1.2 整体安装流程导图

#mermaid-svg-bDWjKrRHAFgkpQ9R{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-bDWjKrRHAFgkpQ9R .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-bDWjKrRHAFgkpQ9R .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-bDWjKrRHAFgkpQ9R .error-icon{fill:#552222;}#mermaid-svg-bDWjKrRHAFgkpQ9R .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-bDWjKrRHAFgkpQ9R .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-bDWjKrRHAFgkpQ9R .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-bDWjKrRHAFgkpQ9R .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-bDWjKrRHAFgkpQ9R .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-bDWjKrRHAFgkpQ9R .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-bDWjKrRHAFgkpQ9R .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-bDWjKrRHAFgkpQ9R .marker{fill:#333333;stroke:#333333;}#mermaid-svg-bDWjKrRHAFgkpQ9R .marker.cross{stroke:#333333;}#mermaid-svg-bDWjKrRHAFgkpQ9R svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-bDWjKrRHAFgkpQ9R p{margin:0;}#mermaid-svg-bDWjKrRHAFgkpQ9R .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-bDWjKrRHAFgkpQ9R .cluster-label text{fill:#333;}#mermaid-svg-bDWjKrRHAFgkpQ9R .cluster-label span{color:#333;}#mermaid-svg-bDWjKrRHAFgkpQ9R .cluster-label span p{background-color:transparent;}#mermaid-svg-bDWjKrRHAFgkpQ9R .label text,#mermaid-svg-bDWjKrRHAFgkpQ9R span{fill:#333;color:#333;}#mermaid-svg-bDWjKrRHAFgkpQ9R .node rect,#mermaid-svg-bDWjKrRHAFgkpQ9R .node circle,#mermaid-svg-bDWjKrRHAFgkpQ9R .node ellipse,#mermaid-svg-bDWjKrRHAFgkpQ9R .node polygon,#mermaid-svg-bDWjKrRHAFgkpQ9R .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-bDWjKrRHAFgkpQ9R .rough-node .label text,#mermaid-svg-bDWjKrRHAFgkpQ9R .node .label text,#mermaid-svg-bDWjKrRHAFgkpQ9R .image-shape .label,#mermaid-svg-bDWjKrRHAFgkpQ9R .icon-shape .label{text-anchor:middle;}#mermaid-svg-bDWjKrRHAFgkpQ9R .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-bDWjKrRHAFgkpQ9R .rough-node .label,#mermaid-svg-bDWjKrRHAFgkpQ9R .node .label,#mermaid-svg-bDWjKrRHAFgkpQ9R .image-shape .label,#mermaid-svg-bDWjKrRHAFgkpQ9R .icon-shape .label{text-align:center;}#mermaid-svg-bDWjKrRHAFgkpQ9R .node.clickable{cursor:pointer;}#mermaid-svg-bDWjKrRHAFgkpQ9R .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-bDWjKrRHAFgkpQ9R .arrowheadPath{fill:#333333;}#mermaid-svg-bDWjKrRHAFgkpQ9R .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-bDWjKrRHAFgkpQ9R .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-bDWjKrRHAFgkpQ9R .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bDWjKrRHAFgkpQ9R .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-bDWjKrRHAFgkpQ9R .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bDWjKrRHAFgkpQ9R .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-bDWjKrRHAFgkpQ9R .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-bDWjKrRHAFgkpQ9R .cluster text{fill:#333;}#mermaid-svg-bDWjKrRHAFgkpQ9R .cluster span{color:#333;}#mermaid-svg-bDWjKrRHAFgkpQ9R div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-bDWjKrRHAFgkpQ9R .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-bDWjKrRHAFgkpQ9R rect.text{fill:none;stroke-width:0;}#mermaid-svg-bDWjKrRHAFgkpQ9R .icon-shape,#mermaid-svg-bDWjKrRHAFgkpQ9R .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bDWjKrRHAFgkpQ9R .icon-shape p,#mermaid-svg-bDWjKrRHAFgkpQ9R .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-bDWjKrRHAFgkpQ9R .icon-shape .label rect,#mermaid-svg-bDWjKrRHAFgkpQ9R .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bDWjKrRHAFgkpQ9R .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-bDWjKrRHAFgkpQ9R .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-bDWjKrRHAFgkpQ9R :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 检查并停止 Mariadb
检索系统残留包
卸载 + 备份数据
下载 & 配置 MySQL 官方 YUM 源
YUM 安装 MySQL 服务
启动 + 检查状态
登录 + 初始化密码
配置字符集 + 开机自启


二、卸载原有冲突环境(必做)

2.1 检查 Mariadb 运行进程

bash 复制代码
ps ajx | grep mariadb
  • 有进程 → 需先停止
  • 无进程 → 直接进入卸载

2.2 停止 Mariadb 服务

bash 复制代码
systemctl stop mariadb.service

根据提示输入 root 密码完成停止。

2.3 检索已安装的数据库包

bash 复制代码
# 查找 mariadb 相关包
rpm -qa | grep mariadb

# 查找 mysql 相关包(如有旧版)
rpm -qa | grep mysql

典型输出示例(MySQL 5.7):

复制代码
mysql-community-common-5.7.41-1.el7.x86_64
mysql-community-server-5.7.41-1.el7.x86_64
mysql57-community-release-el7-11.noarch
mysql-community-client-5.7.41-1.el7.x86_64
mysql-community-libs-5.7.41-1.el7.x86_64

2.4 卸载 & 备份(重要)

(1)卸载命令
bash 复制代码
sudo yum remove mariadb

若检索出多个组件,建议逐个卸载,避免依赖残留。

(2)数据 & 配置备份(生产环境强制要求)
类型 默认路径 作用
主配置文件 /etc/my.cnf 全局配置参数
数据目录 /var/lib/mysql 所有数据库、表的真实数据
bash 复制代码
cp /etc/my.cnf /etc/my.cnf.bak
cp -r /var/lib/mysql /var/lib/mysql.bak

三、配置 MySQL 官方 YUM 源

3.1 源文件获取要求

  • 官方源地址:http://repo.mysql.com/
  • 版本匹配原则:必须下载与当前 CentOS 系统版本对应的 MySQL 源包,否则出现兼容性错误。

查看系统版本:

bash 复制代码
cat /etc/redhat-release
# 示例:CentOS Linux release 7.8.2003 (Core)

3.2 安装 YUM 源 RPM 包

mysql57-community-release-el7-10.noarch.rpm 上传至服务器,执行:

bash 复制代码
sudo rpm -Uvh mysql57-community-release-el7-10.noarch.rpm

🔴 报错处理Permission denied → 权限不足,必须加 sudo

3.3 校验 YUM 源是否生效

方式一:查看 yum 源目录文件
安装前 安装后
无 MySQL 相关 .repo 文件 新增 mysql-community.repomysql-community-source.repo
bash 复制代码
ls /etc/yum.repos.d/ -al
方式二:检索可安装组件
bash 复制代码
yum list | grep mysql

若能检索到 mysql-community-server 等组件,代表源配置正常。


四、安装 MySQL 服务

4.1 一键安装命令

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

4.2 四大核心组件说明

组件名称 作用说明
mysql-community-common 公共基础模块,全局依赖
mysql-community-libs 底层库文件,支撑服务运行
mysql-community-client 客户端工具(mysql 命令等)
mysql-community-server MySQL 核心服务端程序

4.3 常见问题:GPG 秘钥过期

故障现象

复制代码
Failing package is: mysql-community-client-5.7.39-1.el7.x86_64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

解决方案:导入最新官方秘钥后重新安装

bash 复制代码
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

五、核心文件路径 & 服务管理

5.1 MySQL 核心默认路径(运维必记)

文件/目录 路径 核心用途
主配置文件 /etc/my.cnf 端口、字符集、存储引擎等
数据存储目录 /var/lib/mysql 持久化存放所有库、表数据
日志文件 /var/log/mysqld.log 错误日志、初始临时密码
套接字文件 /var/lib/mysql/mysql.sock 本地客户端与服务端通信
PID 文件 /var/run/mysqld/mysqld.pid 记录 MySQL 进程 ID

查看命令:

bash 复制代码
ls /etc/my.cnf
sudo ls /var/lib/mysql

5.2 启动 & 检查服务状态

bash 复制代码
# 启动
systemctl start mysqld.service

# 检查进程
ps axj | grep mysqld

出现 /usr/sbin/mysqld 进程即为正常运行。

5.3 设置开机自启(可选,生产推荐)

bash 复制代码
systemctl enable mysqld
systemctl daemon-reload

六、MySQL 三种登录方案(密码管理)

6.1 方案一:使用临时密码登录(MySQL 5.7 主流方式)

MySQL 5.7 首次启动自动生成随机临时密码,存放在日志中。

bash 复制代码
# 提取临时密码
sudo grep 'temporary password' /var/log/mysqld.log
# 示例输出:... root@localhost: yLMalT:v+5l*

# 登录
mysql -uroot -p
(1)调整密码安全策略

MySQL 5.7 默认策略:大小写字母+数字+特殊符号,长度≥8

新手可临时降低策略(仅开发环境):

sql 复制代码
set global validate_password_policy=0;   -- 0=最低,仅校验长度
set global validate_password_length=1;
(2)修改 root 登录密码
sql 复制代码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

⚠️ 易错点FLUSH PRIVILEGES 必须执行,否则权限不生效。

6.2 方案二:无初始密码场景

部分新版 MySQL 初始化后 root 默认无密码:

bash 复制代码
mysql -uroot

6.3 方案三:跳过权限表(忘记密码应急方案)

  1. 编辑配置文件 /etc/my.cnf,在 [mysqld] 下添加:

    ini 复制代码
    skip-grant-tables
  2. 重启服务并免密登录:

    bash 复制代码
    systemctl restart mysqld
    mysql -uroot

🔴 高危提醒 :密码重置完成后,务必删除 skip-grant-tables 并重启服务,否则任何人可免密登录,存在严重安全漏洞。


七、配置 my.cnf 与中文乱码解决

7.1 字符集完整配置

编辑 /etc/my.cnf,统一客户端、服务端字符集为 utf8

ini 复制代码
[mysql]
default-character-set=utf8

[mysqld]
port=3306
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8
default-storage-engine=innodb

重启生效:

bash 复制代码
systemctl restart mysqld.service

7.2 中文乱码二次排查

若配置后仍无法显示中文,检查系统终端编码:

bash 复制代码
env | grep LANG
# 应包含 utf8,如 en_US.utf8 或 zh_CN.utf8

第二部分:MySQL 数据库基础

一、数据库基本概念

1.1 传统文件存储的缺陷

使用 TXT、Excel 等普通文件存储数据存在四大硬伤:

缺陷 说明
安全性差 无权限隔离,易篡改、泄露
查询管理困难 海量数据下统计、检索效率极低
不适合海量数据 读写性能随数据量增长急剧下降
程序控制不便 不支持多用户并发,无标准接口

1.2 数据库定义及存储介质

数据库 :专门用于存储、管理、操作数据的专业软件系统。

  • 存储介质:磁盘(持久化) + 内存(缓存加速)
  • 核心作用:解决文件存储的全部问题,是后端开发、运维、数据分析的基础组件

二、主流数据库介绍

数据库 归属 类型 核心特点 典型场景
SQL Server 微软 关系型 适配 Windows + .NET 传统企业内网
Oracle 甲骨文 关系型 功能强大、高稳定、付费 银行、金融核心系统
MySQL 甲骨文 关系型 开源、轻量、并发强 电商、博客、中小型项目
PostgreSQL 开源社区 关系型 扩展性强、免费 数据分析、GIS
SQLite 开源社区 嵌入式 零配置、体积小 移动APP、桌面软件
H2 开源社区 嵌入式 Java 类库嵌入 Java 项目测试

本专栏核心学习对象:MySQL


三、MySQL 基本使用

3.1 连接服务器命令

完整语法

bash 复制代码
mysql -h 主机IP -P 端口 -u 用户名 -p
参数 说明 默认值
-h 服务器地址 127.0.0.1(本地)
-P(大写) 端口号 3306
-u 用户名
-p(小写) 密码入口(交互式输入)

最简示例(本地登录)

bash 复制代码
mysql -uroot -p

3.2 Windows 端服务管理

  1. 按下 Win + R
  2. 输入 services.msc 回车
  3. 找到 MySQL 服务,可视化完成 启动/停止/重启

3.3 服务器、数据库、表 层级关系(核心逻辑)

复制代码
MySQL 服务器
├─ 数据库1(对应一个业务项目)
│  ├─ 数据表1(存储一类实体数据)
│  ├─ 数据表2
│  └─ ...
├─ 数据库2
└─ ...

访问链路

客户端 → MySQL 服务 → 数据库 → 数据表 → 数据行/字段

3.4 数据逻辑存储

从用户视角看,数据以 行列二维表 形式存储:

  • 行(Row):一条完整记录
  • 列(Column):一个字段
  • 表(Table):相同格式的行集合
  • 数据库(Database):表的集合
  • 服务器(Server):管理多个数据库

3.5 基础操作语法示例(仅演示)

sql 复制代码
-- 创建数据库
CREATE DATABASE helloworld;

-- 切换使用数据库
USE helloworld;

-- 创建数据表
CREATE TABLE student (
    id INT,
    name VARCHAR(32),
    gender VARCHAR(2)
);

-- 插入测试数据
INSERT INTO student (id, name, gender) VALUES (1, '张三', '男');

-- 查询表数据
SELECT * FROM student;

四、MySQL 整体架构

MySQL 具备跨平台可移植性 (Linux、Windows、Mac、Solaris 等),采用 C/S 架构,分层明确。

4.1 四层架构拆分

架构分层 包含内容 核心职责
客户端连接层 JDBC、ODBC、Python、PHP 等驱动 连接接入、身份认证、连接池
服务层(核心层) SQL接口、解析器、优化器、执行器、缓存、视图、存储过程、触发器、复制 解析SQL、生成执行计划、调度
存储引擎层 可插拔式引擎(InnoDB、MyISAM 等) 数据读写、事务、锁机制实现
文件系统层 磁盘、SAN、NAS 数据、日志持久化落地

4.2 整体执行流程

客户端发起请求 → 连接层认证 → 服务层解析优化 SQL → 执行器调用存储引擎 → 文件系统读写数据 → 结果原路返回客户端


五、SQL 语句四大分类(面试/基础必考)

分类 英文全称 中文名称 操作对象 核心关键字
DDL Data Definition Language 数据定义语言 数据库、表结构 CREATE, DROP, ALTER
DML Data Manipulation Language 数据操纵语言 表中数据(增、删、改) INSERT, DELETE, UPDATE
DQL Data Query Language 数据查询语言 表中数据(查询) SELECT
DCL Data Control Language 数据控制语言 权限、事务 GRANT, REVOKE, COMMIT, ROLLBACK

补充说明 :DQL 由 DML 单独拆分而出,是日常开发使用频率最高的语句。

DDL 操作「表结构」,DML/DQL 操作「表数据」,二者概念务必区分。


六、存储引擎

6.1 存储引擎概念

存储引擎是 MySQL 数据存储、索引管理、数据读写 的底层实现方案。

MySQL 特色:插件式引擎架构,服务层与存储引擎解耦,可按需选择、单表单独指定引擎。

6.2 查看当前支持的所有引擎

sql 复制代码
SHOW ENGINES;

示例输出(部分)

Engine Support Comment Transactions
InnoDB DEFAULT Supports transactions, row-level locking, and foreign keys YES
MyISAM YES MyISAM storage engine NO
MEMORY YES Hash based, stored in memory, useful for temporary tables NO
ARCHIVE YES Archive storage engine NO

6.3 主流存储引擎特性对比

特性 InnoDB MyISAM Memory Archive
默认状态 MySQL 5.5+ 默认 5.5 之前默认 可选 可选
事务支持 ✅ 支持 ❌ 不支持 ❌ 不支持 ❌ 不支持
锁粒度 行锁 + 表锁 仅表锁 表锁 无锁
外键支持 ✅ 支持 ❌ 不支持 ❌ 不支持 ❌ 不支持
MVCC ✅ 支持 ❌ 不支持 ❌ 不支持 ❌ 不支持
聚簇索引 ✅ 支持 ❌ 不支持 ❌ 不支持 ❌ 不支持
数据缓存 ✅ 支持 ❌ 不支持 ✅(内存) ❌ 不支持
压缩数据 ❌ 不支持 ❌ 不支持 ❌ 不支持 ✅ 支持
适用场景 高并发、需要事务、崩溃恢复 纯静态查询、读多写少 临时表、缓存 日志、归档数据

七、全篇汇总:高频易错点清单(12条)

  1. CentOS 7 未卸载 Mariadb 直接装 MySQL → 端口冲突、服务启动失败
  2. 修改密码后未执行 FLUSH PRIVILEGES → 新密码、权限不生效
  3. 开启 skip-grant-tables 后忘记删除 → 数据库无密码保护,重大安全隐患
  4. 字符集只配置服务端、未配置客户端 → 终端中文乱码
  5. mysqldump 是 Linux 系统命令,不能在 mysql> 命令行中执行 → 会报语法错误
  6. 混淆「库、表、数据」层级关系 → SQL 执行报错(如 use database 写成 use table
  7. 分不清 DDL / DML / DQL / DCL → 语句使用逻辑混乱(例如用 ALTER 改数据)
  8. GPG 秘钥过期未导入新秘钥 → MySQL 安装中断
  9. 下载 yum 源时系统版本不匹配(el7 vs el8) → 安装失败或依赖缺失
  10. 忘记停止 Mariadb 直接安装 MySQL → 端口 3306 被占用
  11. 修改密码策略前未登录 → 无法执行 set global 命令
  12. 在 MySQL 命令行内执行系统命令 (如 systemctl) → 语法错误

结语

  • ✅ CentOS 7 下 MySQL 5.7 的完整安装、卸载、配置、排错流程
  • ✅ 数据库核心概念、主流产品对比、架构、SQL 分类、存储引擎等理论基础

如果觉得本文对你有帮助,欢迎 点赞👍、收藏⭐、转发💬

有任何问题或建议,请在评论区留言交流。

相关推荐
焦虑的说说2 小时前
mysql为什么回表会慢
mysql·面试
峥无2 小时前
MySQL 数据库 & 数据表基础操作总结
数据库·mysql
OSwich2 小时前
【UE5学习笔记】UMG中控件命名规范
笔记·学习·ue5
闪闪发亮的小星星2 小时前
STK-01-通信卫星方向学习路线
网络·学习
Amnesia0_02 小时前
MYSQL索引
数据库·mysql
Tipriest_2 小时前
没有nvidia的卡上装sogou拼音的特殊处理
运维·服务器·mysql
uzong2 小时前
企业智能助手的实践分享(LLM/RAG)
后端·程序员·架构
@insist1232 小时前
系统架构设计师-存储管理核心机制:页式、段式、段页式架构原理
架构·系统架构·软考·系统架构设计师·软件水平考试