第一部分: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.repo 和 mysql-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 方案三:跳过权限表(忘记密码应急方案)
-
编辑配置文件
/etc/my.cnf,在[mysqld]下添加:iniskip-grant-tables -
重启服务并免密登录:
bashsystemctl 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 端服务管理
- 按下
Win + R - 输入
services.msc回车 - 找到 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条)
- CentOS 7 未卸载 Mariadb 直接装 MySQL → 端口冲突、服务启动失败
- 修改密码后未执行
FLUSH PRIVILEGES→ 新密码、权限不生效 - 开启
skip-grant-tables后忘记删除 → 数据库无密码保护,重大安全隐患 - 字符集只配置服务端、未配置客户端 → 终端中文乱码
mysqldump是 Linux 系统命令,不能在mysql>命令行中执行 → 会报语法错误- 混淆「库、表、数据」层级关系 → SQL 执行报错(如
use database写成use table) - 分不清 DDL / DML / DQL / DCL → 语句使用逻辑混乱(例如用
ALTER改数据) - GPG 秘钥过期未导入新秘钥 → MySQL 安装中断
- 下载 yum 源时系统版本不匹配(el7 vs el8) → 安装失败或依赖缺失
- 忘记停止 Mariadb 直接安装 MySQL → 端口 3306 被占用
- 修改密码策略前未登录 → 无法执行
set global命令 - 在 MySQL 命令行内执行系统命令 (如
systemctl) → 语法错误
结语
- ✅ CentOS 7 下 MySQL 5.7 的完整安装、卸载、配置、排错流程
- ✅ 数据库核心概念、主流产品对比、架构、SQL 分类、存储引擎等理论基础
如果觉得本文对你有帮助,欢迎 点赞👍、收藏⭐、转发💬 !
有任何问题或建议,请在评论区留言交流。