MySQL 系统学习之路 第一篇:服务安装、基础概念与架构全解 第一部分CentOS 7 环境安装 MySQL 5.7一、安装前置说明1.1 基础约定约定说明操作权限安装、卸载、配置全程使用root或sudo避免权限问题账户使用入门练习阶段统一用root登录 MySQL后续学完用户权限管理再创建普通业务用户环境冲突CentOS 7 默认预装MariaDBMySQL 分支与 MySQL 端口、配置文件、进程冲突必须彻底卸载1.2 整体安装流程导图检查并停止 Mariadb检索系统残留包卸载 备份数据下载 配置 MySQL 官方 YUM 源YUM 安装 MySQL 服务启动 检查状态登录 初始化密码配置字符集 开机自启二、卸载原有冲突环境必做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.7mysql-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.repols/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-serverMySQL 核心服务端程序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 首次启动自动生成随机临时密码存放在日志中。# 提取临时密码sudogreptemporary password/var/log/mysqld.log# 示例输出... rootlocalhost: yLMalT:v5l*# 登录mysql-uroot-p1调整密码安全策略MySQL 5.7 默认策略大小写字母数字特殊符号长度≥8。新手可临时降低策略仅开发环境setglobalvalidate_password_policy0;-- 0最低仅校验长度setglobalvalidate_password_length1;2修改 root 登录密码ALTERUSERrootlocalhostIDENTIFIEDBY123456;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-setutf8 [mysqld] port3306 datadir/var/lib/mysql socket/var/lib/mysql/mysql.sock symbolic-links0 log-error/var/log/mysqld.log pid-file/var/run/mysqld/mysqld.pid character-set-serverutf8 default-storage-engineinnodb重启生效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开源社区关系型扩展性强、免费数据分析、GISSQLite开源社区嵌入式零配置、体积小移动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 语句四大分类面试/基础必考分类英文全称中文名称操作对象核心关键字DDLData Definition Language数据定义语言数据库、表结构CREATE,DROP,ALTERDMLData Manipulation Language数据操纵语言表中数据增、删、改INSERT,DELETE,UPDATEDQLData Query Language数据查询语言表中数据查询SELECTDCLData Control Language数据控制语言权限、事务GRANT,REVOKE,COMMIT,ROLLBACK补充说明DQL 由 DML 单独拆分而出是日常开发使用频率最高的语句。DDL 操作「表结构」DML/DQL 操作「表数据」二者概念务必区分。六、存储引擎6.1 存储引擎概念存储引擎是 MySQL数据存储、索引管理、数据读写的底层实现方案。MySQL 特色插件式引擎架构服务层与存储引擎解耦可按需选择、单表单独指定引擎。6.2 查看当前支持的所有引擎SHOWENGINES;示例输出部分EngineSupportCommentTransactionsInnoDBDEFAULTSupports transactions, row-level locking, and foreign keysYESMyISAMYESMyISAM storage engineNOMEMORYYESHash based, stored in memory, useful for temporary tablesNOARCHIVEYESArchive storage engineNO6.3 主流存储引擎特性对比特性InnoDBMyISAMMemoryArchive默认状态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 分类、存储引擎等理论基础如果觉得本文对你有帮助欢迎点赞、收藏⭐、转发有任何问题或建议请在评论区留言交流。