MySQL 系统学习之路 第一篇:服务安装、基础概念与架构全解
第一部分:CentOS 7 环境安装 MySQL 5.7
一、安装前置说明
1.1 基础约定
| 约定 | 说明 |
|---|---|
| 操作权限 | 安装、卸载、配置全程使用root(或sudo),避免权限问题 |
| 账户使用 | 入门练习阶段统一用root登录 MySQL;后续学完用户权限管理再创建普通业务用户 |
| 环境冲突 | CentOS 7 默认预装MariaDB(MySQL 分支),与 MySQL 端口、配置文件、进程冲突,必须彻底卸载 |
1.2 整体安装流程导图
二、卸载原有冲突环境(必做)
2.1 检查 Mariadb 运行进程
psajx|grepmariadb- 有进程 → 需先停止
- 无进程 → 直接进入卸载
2.2 停止 Mariadb 服务
systemctl stop mariadb.service根据提示输入 root 密码完成停止。
2.3 检索已安装的数据库包
# 查找 mariadb 相关包rpm-qa|grepmariadb# 查找 mysql 相关包(如有旧版)rpm-qa|grepmysql典型输出示例(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_642.4 卸载 & 备份(重要)
(1)卸载命令
sudoyum remove mariadb若检索出多个组件,建议逐个卸载,避免依赖残留。
(2)数据 & 配置备份(生产环境强制要求)
| 类型 | 默认路径 | 作用 |
|---|---|---|
| 主配置文件 | /etc/my.cnf | 全局配置参数 |
| 数据目录 | /var/lib/mysql | 所有数据库、表的真实数据 |
cp/etc/my.cnf /etc/my.cnf.bakcp-r/var/lib/mysql /var/lib/mysql.bak三、配置 MySQL 官方 YUM 源
3.1 源文件获取要求
- 官方源地址:
http://repo.mysql.com/ - 版本匹配原则:必须下载与当前 CentOS 系统版本对应的 MySQL 源包,否则出现兼容性错误。
查看系统版本:
cat/etc/redhat-release# 示例:CentOS Linux release 7.8.2003 (Core)3.2 安装 YUM 源 RPM 包
将mysql57-community-release-el7-10.noarch.rpm上传至服务器,执行:
sudorpm-Uvhmysql57-community-release-el7-10.noarch.rpm🔴报错处理:Permission denied→ 权限不足,必须加sudo。
3.3 校验 YUM 源是否生效
方式一:查看 yum 源目录文件
| 安装前 | 安装后 |
|---|---|
无 MySQL 相关.repo文件 | 新增mysql-community.repo和mysql-community-source.repo |
ls/etc/yum.repos.d/-al方式二:检索可安装组件
yum list|grepmysql若能检索到mysql-community-server等组件,代表源配置正常。
四、安装 MySQL 服务
4.1 一键安装命令
sudoyuminstall-ymysql-community-server4.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解决方案:导入最新官方秘钥后重新安装
rpm--importhttps://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 |
查看命令:
ls/etc/my.cnfsudols/var/lib/mysql5.2 启动 & 检查服务状态
# 启动systemctl start mysqld.service# 检查进程psaxj|grepmysqld出现/usr/sbin/mysqld进程即为正常运行。
5.3 设置开机自启(可选,生产推荐)
systemctlenablemysqld systemctl daemon-reload六、MySQL 三种登录方案(密码管理)
6.1 方案一:使用临时密码登录(MySQL 5.7 主流方式)
MySQL 5.7 首次启动自动生成随机临时密码,存放在日志中。
# 提取临时密码sudogrep'temporary password'/var/log/mysqld.log# 示例输出:... root@localhost: yLMalT:v+5l*# 登录mysql-uroot-p(1)调整密码安全策略
MySQL 5.7 默认策略:大小写字母+数字+特殊符号,长度≥8。
新手可临时降低策略(仅开发环境):
setglobalvalidate_password_policy=0;-- 0=最低,仅校验长度setglobalvalidate_password_length=1;(2)修改 root 登录密码
ALTERUSER'root'@'localhost'IDENTIFIEDBY'123456';FLUSHPRIVILEGES;⚠️易错点:FLUSH PRIVILEGES必须执行,否则权限不生效。
6.2 方案二:无初始密码场景
部分新版 MySQL 初始化后 root 默认无密码:
mysql-uroot6.3 方案三:跳过权限表(忘记密码应急方案)
- 编辑配置文件
/etc/my.cnf,在[mysqld]下添加:skip-grant-tables - 重启服务并免密登录:
systemctl restart mysqld mysql-uroot
🔴高危提醒:密码重置完成后,务必删除skip-grant-tables并重启服务,否则任何人可免密登录,存在严重安全漏洞。
七、配置 my.cnf 与中文乱码解决
7.1 字符集完整配置
编辑/etc/my.cnf,统一客户端、服务端字符集为utf8:
[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重启生效:
systemctl restart mysqld.service7.2 中文乱码二次排查
若配置后仍无法显示中文,检查系统终端编码:
env|grepLANG# 应包含 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 连接服务器命令
完整语法:
mysql-h主机IP-P端口-u用户名-p| 参数 | 说明 | 默认值 |
|---|---|---|
-h | 服务器地址 | 127.0.0.1(本地) |
-P(大写) | 端口号 | 3306 |
-u | 用户名 | 无 |
-p(小写) | 密码入口(交互式输入) | 无 |
最简示例(本地登录):
mysql-uroot-p3.2 Windows 端服务管理
- 按下
Win + R - 输入
services.msc回车 - 找到 MySQL 服务,可视化完成启动/停止/重启
3.3 服务器、数据库、表 层级关系(核心逻辑)
MySQL 服务器 ├─ 数据库1(对应一个业务项目) │ ├─ 数据表1(存储一类实体数据) │ ├─ 数据表2 │ └─ ... ├─ 数据库2 └─ ...访问链路:
客户端 → MySQL 服务 → 数据库 → 数据表 → 数据行/字段
3.4 数据逻辑存储
从用户视角看,数据以行列二维表形式存储:
- 行(Row):一条完整记录
- 列(Column):一个字段
- 表(Table):相同格式的行集合
- 数据库(Database):表的集合
- 服务器(Server):管理多个数据库
3.5 基础操作语法示例(仅演示)
-- 创建数据库CREATEDATABASEhelloworld;-- 切换使用数据库USEhelloworld;-- 创建数据表CREATETABLEstudent(idINT,nameVARCHAR(32),genderVARCHAR(2));-- 插入测试数据INSERTINTOstudent(id,name,gender)VALUES(1,'张三','男');-- 查询表数据SELECT*FROMstudent;四、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 查看当前支持的所有引擎
SHOWENGINES;示例输出(部分):
| 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 分类、存储引擎等理论基础
如果觉得本文对你有帮助,欢迎点赞👍、收藏⭐、转发💬!
有任何问题或建议,请在评论区留言交流。
