前言
作为现代信息系统的核心支撑,数据库在各类应用中扮演着不可或缺的角色。无论是社交平台、外卖服务,还是企业财务管理与业务运营系统,其底层都依赖于数据库实现数据的高效存储、管理和访问。掌握数据库的基本概念、演进历程以及不同类型数据库的特点,是构建数据处理能力的第一步。这不仅有助于理解“数据—表—数据库”之间的层次结构,还能为实际开发中选择合适的技术方案提供理论依据——例如判断应使用 MySQL 这类关系型系统,还是 Redis 等非关系型工具。本文将从基础定义出发,梳理数据库的发展阶段,对比主流类型,并建立完整的知识框架,为后续实践与深入学习奠定坚实基础。
一、数据库概述
1. 基本概念解析
1.1 数据
定义:数据是对客观事物的符号化描述(Data),涵盖数字、文本、图像、音频等多种形式。
存储方式:以统一格式按记录进行组织,相同类型的数据集中存放。例如,“学生信息”作为一个独立的数据集合进行管理。
示例说明:在一个班级的学生数据中,每位同学构成一条记录,每条记录包含多个属性字段,如学号、姓名、性别等。
数据库层级结构:MySQL 服务 → 数据库实例 → 数据表 → 行(即记录)+ 列(即字段)。
1.2 表
结构组成:由行(记录)和列(字段)构成,是数据组织的基本单元。
主要特征:记录由若干字段组成;字段内容可为字符或数值;支持多用户并发访问;具备较低的数据冗余度和较高的独立性。
1.3 数据库
数据库是一组按照特定规则组织并相互关联的数据集合,本质上是多个数据表的集合体,用于集中管理相关信息。
1.4 数据库管理系统(DBMS)
定义:用于操作和控制数据库运行的专用软件系统。
核心功能包括:
- 数据库的创建与日常维护(如建表、备份恢复、性能监控、结构调整);
- 数据定义功能(设定数据结构、存储模式及安全策略);
- 数据操作能力(执行查询、统计、增删改等操作);
- 运行时管理机制(实现并发控制、权限校验、事务管理);
- 系统通信接口(支持与其他应用程序交互,如 Office 工具套件或 Access)。
工作流程:接收用户请求 → 转换为底层数据库指令 → 执行相应操作 → 获取结果集 → 格式化输出 → 返回给客户端。
1.5 数据库系统(DBS)
组成要素:硬件环境 + 操作系统 + 数据库文件 + DBMS 软件 + 应用程序 + 最终用户。
关键角色 —— DBA(数据库管理员):负责系统的备份与恢复、权限分配、性能调优及用户账户管理。
典型应用软件示例:Navicat 可视化工具、人力资源管理系统、财务核算平台、图书馆借阅系统等。
2. 数据库技术发展简史
2.1 第一阶段:层次型与网状型数据库
早期数据库模型以层次结构或网络拓扑为基础,适用于固定路径访问的场景。
代表系统:IBM 于 1969 年推出的 IMS(Information Management System)。
2.2 第二阶段:关系型数据库兴起
核心理念:所有数据均以二维表格形式存储(行表示记录,列表示字段),利用数学中的集合论与关系代数实现数据的操作(如选择、投影、连接)。该模型直观易懂,便于查询与维护。
里程碑产品:
- System R:由 IBM 开发,首个验证关系模型可行性的实验性系统;
- Ingres:源自加州大学伯克利分校,后来演化出 PostgreSQL。
历史意义:推动了 SQL(结构化查询语言)成为行业标准,后续主流数据库如 MySQL、Oracle、SQL Server 均源于此技术路线。
2.3 第三阶段:新型数据库时代
发展趋势:面向对象设计、跨平台兼容性增强,支持 SQL 与 NoSQL 混合架构,适应多样化应用场景。
新兴代表:MariaDB、PostgreSQL、时序数据库 Prometheus 等。
3. 关系型数据库详解
数据建模方式:采用 E-R 模型(实体-联系模型),其中每一行代表一个实体,每一列对应实体的一个属性,表之间可通过一对一、一对多或多对多的关系进行关联。
唯一标识机制:主键(Primary Key)确保每条记录的唯一性和非空性,类似于身份证号或学号。
常见产品:MySQL、Oracle、SQL Server、DB2、PostgreSQL 等。
4. 非关系型数据库(NoSQL)
名称含义:NoSQL 即 “Not Only SQL”,强调不局限于传统表格结构,支持多种数据格式。
存储形式:包括键值对(Key-Value)、文档型、列式存储、图结构等。
典型代表:Redis、Memcached、MongoDB、HBase。
适用场景:高并发读写、缓存加速、大数据实时分析等。
优势特点:
- 数据格式灵活,支持 JSON、图片、序列化对象等多种类型;
- 读写速度快,多数基于内存操作;
- 横向扩展能力强,易于分布式部署;
- 成本较低,普遍开源且安装配置简便。
局限之处:
- 不原生支持 SQL 查询语言;
- 缺乏完整的事务支持(ACID 特性弱);
- 复杂查询能力有限;
- 大部分数据驻留在内存中,对硬件资源要求较高。
Redis 与 Memcached 对比
CMakeCache.txt
5. 关系型与非关系型数据库对比
两种数据库类型各有侧重,在实际项目中常根据需求互补使用:
- 数据结构:关系型强调规范化的表结构,适合强一致性场景;NoSQL 更加灵活,适合半结构或无结构数据。
- 查询语言:关系型使用 SQL,功能强大且标准化;NoSQL 多依赖 API 或自定义查询方式。
- 扩展方式:关系型通常垂直扩展(提升单机性能);NoSQL 易于水平扩展(增加节点数量)。
- 事务支持:关系型支持完整事务(ACID);NoSQL 多数仅提供最终一致性。
- 性能表现:NoSQL 在高并发、低延迟场景下更具优势,尤其适合作为缓存层。
6. 小结
通过对数据库基本概念、发展历程及主流类型的梳理,可以清晰地看到:关系型数据库凭借其成熟稳定的事务机制和强大的查询能力,仍是企业级系统的首选;而 NoSQL 凭借灵活性与高性能,在互联网高并发场景中占据重要地位。合理选择数据库类型,需结合具体业务需求、数据特征与系统架构综合考量。
二、MySQL 5.7 源码编译安装指南
2.1 环境准备
安装必要依赖工具:确保系统已安装 gcc、cmake、make、bison、libncurses5-dev 等编译所需组件。
创建专用运行用户:新增 mysql 用户用于隔离服务权限,保障安全性。
2.2 源码解压与依赖配置
将下载的 MySQL 源码包解压至指定目录,并检查依赖项是否齐全,避免编译失败。
2.3 CMake 编译配置
进入源码根目录:定位到解压后的 MySQL 源码所在路径。
执行 CMake 配置命令(关键参数设置):
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1
开始编译与安装:运行 make && make install 完成编译过程。
存储引擎说明:InnoDB 为默认推荐引擎,支持事务、外键与崩溃恢复。
2.4 配置 MySQL
权限设置:调整安装目录归属权至 mysql 用户,防止权限异常。
修改主配置文件 `/etc/my.cnf`:配置数据目录、日志路径、缓冲区大小等核心参数。
2.5 环境变量设置
将 MySQL 的 bin 目录加入系统 PATH,方便全局调用 mysql、mysqldump 等命令。
2.6 数据库初始化
执行 mysql_install_db 脚本完成初始数据库 schema 的生成,包括 mysql 系统库与权限表。
2.7 服务管理
配置 systemd 或 init 脚本实现开机启动与 service 方式启停数据库服务。
2.8 账号密码管理
设置 root 用户密码:首次登录后立即修改默认空密码,增强安全性。
登录 MySQL:使用 mysql -u root -p 命令进入交互式终端。
总结
通过源码方式安装 MySQL 5.7,虽然步骤较复杂,但能更深入理解其内部结构与依赖关系,也为定制化部署提供了可能。整个流程涵盖了环境搭建、编译配置、服务初始化与安全管理等多个环节,是掌握数据库运维技能的重要实践路径。
5. 关系型数据库与非关系型数据库的对比
| 对比维度 | 关系型数据库 | 非关系型数据库 |
|---|---|---|
| 数据结构 | 采用二维表格形式组织数据 | 支持多种模型,如键值(KV)、文档、列式存储、图形等 |
| 主要优点 | 结构明确,通用SQL语言,支持复杂的查询操作和事务处理 | 数据格式灵活,读写速度快,适合高并发场景 |
| 存在缺点 | 表结构固定,扩展性受限,易出现I/O性能瓶颈 | 缺乏标准SQL支持,事务能力较弱,复杂查询支持不足 |
| 典型代表 | MySQL、Oracle、PostgreSQL | Redis、MongoDB、HBase |
缓存系统对比:Redis 与 Memcached
共同点:两者均以内存为运行介质,用于存储热点数据,具备极高的访问速度。
差异点:Redis 支持数据持久化,可将内存中的数据保存到磁盘;而 Memcached 仅为纯内存存储,一旦断电或服务重启,数据将全部丢失。
6. 总结要点
- 当前主流数据库架构通常结合使用关系型(如 MySQL、Oracle、SQL Server)与非关系型数据库(如 Redis、MongoDB)。
- 数据库管理系统(DBMS)的核心作用是作为应用程序与数据之间的桥梁,负责接收请求、解析指令、执行操作并返回结果。
- 选型建议:
- 若数据结构清晰、关系明确、需支持复杂查询 → 推荐使用关系型数据库;
- 若面对高并发访问、非结构化数据或大数据分析场景 → 更适合选用非关系型数据库;
- 实际项目中常采用“SQL + NoSQL”混合模式,例如通过 Redis 做缓存加速,搭配 MySQL 实现数据持久化存储。
二、MySQL 5.7 源码编译安装流程
2.1 环境准备工作
安装必要的依赖工具包:
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
各依赖组件说明:
- gcc / gcc-c++: C/C++ 编译器,用于源码编译;
- ncurses / ncurses-devel: 提供字符终端下的用户交互支持;
- bison: 语法分析生成工具,协助解析SQL语句结构;
- cmake: 跨平台构建工具,MySQL 编译所依赖。
创建专用于运行 MySQL 服务的系统用户(禁止登录):
useradd -s /sbin/nologin mysql
2.2 源码解压及依赖配置
将 MySQL 源码包解压至目标目录:
tar zxvf mysql-5.7.17.tar.gz -C /opt
同时解压 boost 库至指定路径(MySQL 5.7 编译所需):
tar zxvf boost_1_59_0.tar.gz -C /usr/local/
为方便后续引用,重命名 boost 目录:
mv /usr/local/boost_1_59_0 /usr/local/boost
2.3 使用 CMake 进行编译配置
进入解压后的源码目录:
cd /opt/mysql-5.7.17/
执行 cmake 命令并设置关键参数:
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-SYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=/usr/local/boost \
-DWITH_SYSTEMD=1
CMakeCache.txt
注意:若 cmake 配置过程中报错,在修复问题后需删除 CMake 生成的缓存文件(如 CMakeCache.txt),然后重新执行配置命令。
关于存储引擎的补充说明:
- MYISAM、MERGE、MEMORY 和 CSV 引擎默认已静态编入服务器,无需额外启用;
- 其他引擎(如 INNODB、ARCHIVE 等)若需静态编译,应使用对应选项进行声明。
-DWITH_XXX_STORAGE_ENGINE=1
2.4 开始编译与安装
执行并行编译(推荐使用多核加速):
make -j 4 && make install
2.5 初始化配置与权限设置
设置 MySQL 安装目录的所有权归属:
chown -R mysql:mysql /usr/local/mysql/
确保配置文件权限正确:
chown mysql:mysql /etc/my.cnf
/etc/my.cnf
[client]
port = 3306 # 客户端连接端口(默认 3306)
socket = /usr/local/mysql/mysql.sock # 客户端 Unix socket 连接文件
default-character-set = utf8 # 客户端默认字符集
[mysqld]
user = mysql # 以 mysql 用户身份运行服务
basedir = /usr/local/mysql # MySQL 安装目录
datadir = /usr/local/mysql/data # 数据库文件存储目录
port = 3306 # 服务监听端口
character-set-server = utf8 # 服务器默认字符集
pid-file = /usr/local/mysql/mysqld.pid # 进程 ID 存储文件
socket = /usr/local/mysql/mysql.sock # 服务器端 Unix socket 文件
bind-address = 0.0.0.0 # 允许所有 IP 连接(监听所有网卡)
skip-name-resolve # 关闭 DNS 解析(用 IP 验证用户,提升连接速度)
max_connections = 2048 # 最大并发连接数(重点)
default-storage-engine = INNODB # 默认存储引擎
max_allowed_packet = 16M # 最大允许传输数据包大小
server-id = 1 # MySQL 唯一 ID(用于主从复制)
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES # SQL 模式(控制语法和数据校验)
[mysql]
port = 3306 # 客户端工具连接端口
default-character-set = utf8 # 客户端工具默认字符集
socket = /usr/local/mysql/mysql.sock # Unix socket 连接文件
auto-rehash # 开启命令行自动补全功能
2.6 环境变量配置
为方便全局调用 MySQL 命令,建议将安装路径加入系统环境变量 PATH 中。
将 MySQL 的二进制命令路径加入系统环境变量,确保全局可调用:
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
随后执行以下命令使配置立即生效:
source /etc/profile
2.6 数据库初始化
进入 MySQL 安装目录下的 bin 路径:
cd /usr/local/mysql/bin/
运行初始化命令,具体参数说明如下:
./mysqld \
--initialize-insecure \ # 采用无密码方式初始化,便于后续手动设置
--user=mysql \ # 指定以 mysql 用户运行
--basedir=/usr/local/mysql \ # 设置安装主目录
--datadir=/usr/local/mysql/data # 指定数据文件存储路径
2.7 服务管理
将 MySQL 提供的 systemd 服务配置文件复制到系统服务目录中:
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
重新加载 systemd 配置,识别新服务文件:
systemctl daemon-reload
启动 MySQL 服务进程:
systemctl start mysqld.service
设置开机自动启动,提升运维便利性:
systemctl enable mysqld
通过查看端口监听状态验证服务是否正常运行(默认为 3306 端口):
netstat -anpt | grep 3306
CMakeCache.txt
2.8 账号与密码管理
首次使用需为 root 用户设置初始密码,可通过 mysqladmin 工具完成:
mysqladmin -u root -p password "123456"
其中密码 “123456” 可根据实际安全策略自定义。
完成密码设置后,使用以下命令登录 MySQL 数据库:
mysql -u root -p123456
该命令表示以用户名 root 和对应密码进行连接认证。
总结
本文围绕“认知数据库”这一核心目标,系统梳理了数据库学习的三大基础维度。首先,厘清了数据、表、数据库以及 DBMS(数据库管理系统)之间的层级关系,特别强调了 DBMS 作为用户与数据库之间交互桥梁的关键作用;其次,回顾了数据库技术的发展脉络,从早期的层次型与网状型结构,演进至主流的关系型数据库,并突出以 MySQL 为代表的二维表模型和 SQL 语言在当前数据管理中的主导地位;最后,通过对关系型与非关系型数据库在数据结构、性能特点及应用场景上的对比分析,提出了“结构化数据优先选用关系型,高并发非结构化场景倾向非关系型”的选型建议,同时指出在实际工程实践中,“SQL 与 NoSQL 混合部署”已成为常见架构策略。上述内容不仅构建了理解数据库的基础知识体系,也为后续深入掌握数据库的安装部署、日常管理与性能优化提供了必要前提。


雷达卡


京公网安备 11010802022788号







