一、数据库概述
1、前置知识
在现代企业系统架构中,常见的技术组合包括 LAMP 和 LNMP 架构:
- LAMP = Linux + Apache + MySQL/MariaDB + PHP
- LNMP = Linux + Nginx + MySQL/MariaDB + PHP
其中,数据库承担着核心数据的存储与管理功能。例如:
- 微信:用于保存聊天记录中的文字、语音、图片和视频等信息。
- 外卖平台(如美团、饿了么):处理订单详情、支付记录以及商家相关信息。
- 游戏应用(如王者荣耀、绝地求生):维护玩家资料、装备配置及对战战绩。
2、数据库基本概念
2.1 数据
数据是描述客观事物的符号表示,形式多样,包括数字、文本、图像、音频等。
其存储方式具有以下特点:
- 以统一格式进行记录式存储;
- 同类数据集中存放,避免不同类型混合(如学生信息不与图书信息混存);
- 举例来说,在一个班级名单中,每位同学构成一条“记录”,每条记录包含多个属性字段,如学号、姓名、性别等。
从结构上看,MySQL 中的数据组织层级为:
MySQL 服务 → 数据库 → 数据表 → 行(记录) + 列(字段)
2.2 表
表由行(即记录)和列(即字段)组成。
主要特征如下:
- 每条记录由若干字段构成,而字段本身由字符或数值组成;
- 支持多用户共享访问;
- 具备较低的数据冗余度,并实现较高的数据独立性。
2.3 数据库
数据库是一组按照特定结构组织并相互关联的数据集合,本质上是多个数据表的集合。
2.4 数据库管理系统(DBMS)
数据库管理系统是一种专门用于操作和管理数据库的软件工具。
其核心功能涵盖以下几个方面:
- 数据库建立与维护:建表、数据转储、恢复机制、系统重组、性能监控等;
- 数据定义:设定数据结构、存储模式、安全保密策略;
- 数据操作:执行查询、统计分析、更新操作;
- 运行管理:控制并发访问、权限认证、系统维护;
- 通信能力:可与其他应用程序交互,比如 Access 或 Office 组件集成。
DBMS 的工作流程如下:
- 接收用户的请求指令;
- 将高层请求转化为底层数据库操作命令;
- 调用数据库执行相应动作;
- 获取执行结果;
- 对结果进行格式化处理;
- 将最终结果返回给用户。
数据库系统属于人机协作系统,通常由硬件设备、操作系统、数据库本身、DBMS、应用软件以及终端用户共同构成。用户可通过 DBMS 或直接通过应用程序来访问和操作数据库内容。
2.5 数据库系统(DBS)
完整的数据库系统包含以下组成部分:
- 硬件资源
- 操作系统
- 数据库
- 数据库管理系统(DBMS)
- 应用软件
- 终端用户
其中,DBA(数据库管理员)负责日常运维任务,如备份与恢复、系统维护、账号权限分配等。
典型的应用软件包括 Navicat、人事管理系统、财务系统、图书馆管理系统等。
3、数据库发展史
3.1 第一阶段:层次型与网状型数据库
早期代表产品为 IBM 于 1969 年推出的 IMS(Information Management System),采用树状或网络结构组织数据,依赖指针连接节点,结构复杂但效率较高。
IMS DB:基于层次数据模型,数据以树形结构组织,支持高效的父-子关系查询。其设计适合固定结构的数据,如账单、库存等场景。
IMS DC(后更名为IMS TM):事务管理组件,支持高吞吐量的在线事务处理(OLTP),例如银行交易或航班预订系统。
3.2 第二阶段:关系型数据库兴起
1970 年,IBM 研究员 E.F. Codd 提出了“关系模型”(Relational Model),标志着数据库技术的重大突破。
该模型的核心理念包括:
- 使用二维表格(行与列)组织数据,取代复杂的指针链接方式;
- 利用数学中的集合论与关系代数进行数据描述与操作(如选择、投影、连接等运算);
- 使得数据更加直观,便于查询与维护。
代表性研究成果包括:
- System R:由 IBM 开发,首个真正实现关系模型的实验性系统;
- Ingres:加州大学伯克利分校研发的关系型数据库项目,后续演化出 PostgreSQL。
这一阶段的重要成果是推动了 SQL(结构化查询语言)成为行业标准。如今广泛使用的 MySQL、Oracle、SQL Server 等均源于此体系。
3.3 第三阶段:新型数据库时代
随着应用场景多样化,数据库进入多元化发展阶段,呈现出以下特征:
- 支持面向对象设计;
- 强调开放性和跨平台兼容性;
- 普遍采用 SQL 与 NoSQL 混合架构;
- 涌现出多种新型数据库产品,如 MariaDB、PostgreSQL、时序数据库等。
4、关系型数据库
关系型数据库基于 E-R 模型(实体-关系模型)构建:
- 每一行代表一个实体(如一名学生);
- 每一列对应一个属性(如姓名、年龄);
- 不同表之间可通过外键建立联系,支持一对一、一对多、多对多的关系类型;
- 主键要求唯一且非空,类似于身份证号或学号的作用。
主流产品包括:MySQL、Oracle、SQL Server、DB2、PostgreSQL 等。
5、非关系型数据库(NoSQL)
NoSQL 并非“无 SQL”,而是“Not Only SQL”的缩写,意味着其数据存储方式不仅限于传统表格,还可支持键值对、文档、列族等多种格式。
常见代表产品有:Redis、Memcached、MongoDB、HBase。
主要适用于高并发读写、缓存机制、大数据实时处理等场景。
5.1 优点
| 特性 | 描述 |
|---|---|
| 格式灵活 | 支持 Key-Value、文档、多媒体等多种数据格式 |
| 速度快 | 多数基于内存存储,具备极高的读写性能 |
| 高扩展性 | 易于横向扩展,适合应对大规模并发请求 |
| 成本低 | 可在普通硬件上部署,降低总体拥有成本 |
5.2 缺点
- 缺乏统一的标准查询语言,学习成本较高;
- 事务支持较弱,部分产品仅提供有限的 ACID 特性;
- 不适合需要强一致性的业务场景;
- 数据持久化机制因产品而异,可靠性差异较大。
5.3 Redis 与 Memcached 对比
两者均为内存型缓存数据库,但在功能上有明显区别:
- Redis 支持丰富数据类型(字符串、哈希、列表、集合等),具备持久化能力,支持主从复制和集群模式;
- Memcached 仅支持简单的 Key-Value 结构,无持久化功能,更适合纯缓存用途。
6、关系型 vs 非关系型数据库对比
两种数据库各有优劣:
- 关系型数据库 强调结构化、一致性、事务完整性,适合金融、ERP 等严谨场景;
- NoSQL 更注重性能、扩展性与灵活性,适用于社交网络、物联网、日志分析等海量数据场景。
7、小结
数据库作为信息系统的核心组件,经历了从层次/网状模型到关系模型,再到现代混合架构的发展历程。当前,关系型数据库仍占据主导地位,而在高并发、大数据背景下,NoSQL 技术也发挥着不可替代的作用。合理选择数据库类型,需结合具体业务需求、数据规模、一致性要求等因素综合考量。
二、数据库安装
1、MySQL 5.7 源码编译安装
1.1 环境准备
确保操作系统为 Linux,已安装必要的开发工具链(如 gcc、g++)、CMake 工具及依赖库(如 bison、ncurses-devel)。
1.2 源码解压与依赖处理
下载 MySQL 5.7 源码包后,进行解压,并检查并安装所有编译所需依赖项。
1.3 CMake 编译配置
使用 CMake 进行编译前的参数配置,指定安装路径、数据目录、字符集等关键选项。
1.4 配置 MySQL
1.4.1 权限管理
创建专用的 mysql 用户和组,用于运行数据库进程,提升安全性。
1.4.2 修改配置文件 `/etc/my.cnf`
根据实际环境调整 my.cnf 文件,设置缓冲区大小、连接数限制、日志路径等参数。
1.5 环境变量设置
将 MySQL 的 bin 目录添加至系统的 PATH 变量中,以便全局调用命令行工具。
1.6 数据库初始化
执行初始化脚本生成系统数据库和基础表结构,完成 root 账户初始密码设置。
1.7 服务管理
配置 systemd 或 init 脚本,实现 MySQL 服务的开机自启与 systemctl 控制。
1.8 账号密码管理
首次登录后应立即修改默认密码,创建应用专用账户并分配最小必要权限,保障系统安全。
三、总结
本文系统梳理了数据库的基本概念、发展历程、分类特点及其安装实践过程。通过理解关系型与非关系型数据库的本质差异,有助于在实际项目中做出更合理的选型决策。同时,掌握源码级安装流程,有助于深入理解数据库内部机制,提升运维能力。
数据库核心总结表格
| 类别 | 说明 |
|---|---|
| 数据 | 描述事物的符号记录,如数字、文字、图像等 |
| 表 | 由行(记录)和列(字段)组成的二维结构 |
| 数据库 | 相关表的集合,按一定方式组织存储 |
| DBMS | 用于管理数据库的软件,提供定义、操作、控制等功能 |
| DBS | 包含硬件、OS、数据库、DBMS、应用软件和用户的完整系统 |
| 关系型数据库 | 基于表格结构,支持 SQL 查询,强调一致性与事务 |
| NoSQL | 非关系型数据库,支持多种数据模型,适用于高并发场景 |
| 典型产品 | MySQL、Oracle、Redis、MongoDB 等 |
开源特性显著,部署过程简便,整体运维开销相对较低。
5.2 局限性分析
- 不支持 SQL 查询:缺乏对标准 SQL 语法的支持,限制了其在传统数据库查询场景中的应用。
- 事务处理能力缺失:无法保障复杂操作的原子性,不适合需要强一致性的业务逻辑。
- 复杂查询能力弱:在多表连接、嵌套查询等高级查询功能方面表现不足。
- 内存依赖导致成本上升:数据主要存储于内存中,随着数据量增长,硬件投入相应增加。
CMakeCache.txt
5.3 Redis 与 Memcached 对比
共同点:两者均以内存为存储介质,运行速度快,常用于缓存热点数据以提升系统性能。
差异点:Redis 支持数据持久化,可将内存数据写入磁盘,实现断电后恢复;而 Memcached 完全基于内存,服务重启后数据丢失。
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #指定mysql的安装路径
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ #指定mysql进程监听套接字文件(数据库连接文件)的存储路径
-DSYSCONFDIR=/etc \ #指定配置文件的存储路径
-DSYSTEMD_PID_DIR=/usr/local/mysql \ #指定进程文件的存储路径
-DDEFAULT_CHARSET=utf8 \ #指定默认使用的字符集编码,如 utf8
-DDEFAULT_COLLATION=utf8_general_ci \ #指定默认使用的字符集校对规则
-DWITH_EXTRA_CHARSETS=all \ #指定支持其他字符集编码
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ #安装INNOBASE存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \ #安装ARCHIVE存储引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ #安装BLACKHOLE存储引擎
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ #安装FEDERATED存储引擎
-DMYSQL_DATADIR=/usr/local/mysql/data \ #指定数据库文件的存储路径
-DWITH_BOOST=/usr/local/boost \ #指定boost的路径,若使用mysql-boost集成包安装则-DWITH_BOOST=boost
-DWITH_SYSTEMD=1 #生成便于systemctl管理的文件
6、关系型数据库与非关系型数据库对比
| 对比维度 | 关系型数据库 | 非关系型数据库 |
|---|---|---|
| 数据结构 | 采用二维表格形式组织数据 | 支持键值(KV)、文档、列式、图结构等多种模型 |
| 优势 | 结构清晰,通用 SQL 接口,支持复杂的关联查询 | 数据格式灵活,读写效率高,适合高并发访问 |
| 劣势 | 表结构固定,扩展性差,易出现 I/O 瓶颈 | 通常不支持 SQL,事务机制薄弱,复杂查询能力有限 |
| 典型产品 | MySQL、Oracle、PostgreSQL | Redis、MongoDB、HBase |
/etc/my.cnf
7、总结归纳
当前主流数据库体系主要包括两大类:关系型(如 MySQL、Oracle、SQL Server)和非关系型(如 Redis、MongoDB)。DBMS 作为核心组件,充当应用程序与数据之间的桥梁,负责接收请求、解析指令、执行操作并返回结果。
选型建议:
- 若数据结构明确、关系复杂,优先选择关系型数据库;
- 面对高并发访问、非结构化数据或大数据分析场景,推荐使用非关系型数据库;
- 实际项目中,常采用 SQL 与 NoSQL 混合架构,例如利用 Redis 做缓存加速,结合 MySQL 实现数据持久化。
数据库本质上是结构化的数据集合,由 DBMS 统一管理。技术演进路径从传统的关系型向多样化非关系型发展,现代应用多采用融合方案,兼顾高性能与数据可靠性。
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock
default-character-set=utf8
[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1
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
[mysql]
port = 3306
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock
auto-rehash
二、数据库安装配置
1、MySQL 5.7 源码编译安装流程
1.1 系统环境准备
安装必要依赖包:
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
各组件作用说明:
gcc / gcc-c++:C/C++ 编译器,用于源码编译;ncurses / ncurses-devel:提供字符终端界面支持库;bison:语法分析生成工具;cmake:跨平台构建工具,MySQL 编译所依赖。
创建专用运行用户:
useradd -s /sbin/nologin mysql
1.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/
重命名目录以便引用:
mv /usr/local/boost_1_59_0 /usr/local/boost
[client] 客户端配置
port = 3306:客户端连接 MySQL 的端口,默认是 3306。
socket=/usr/local/mysql/mysql.sock:客户端通过 Unix socket 文件连接 MySQL(Linux/Unix 环境)。
default-character-set=utf8:默认字符集为 UTF-8。
[mysqld] 服务器端配置
user = mysql:MySQL 服务以 `mysql` 用户身份运行。
basedir=/usr/local/mysql:MySQL 安装目录。
datadir=/usr/local/mysql/data:MySQL 数据库文件存放目录。
port = 3306:MySQL 服务监听端口。
character-set-server=utf8:服务器默认字符集 UTF-8。
pid-file = /usr/local/mysql/mysqld.pid:存放 MySQL 进程 ID 的文件路径。
socket=/usr/local/mysql/mysql.sock:服务器端 socket 文件路径。
bind-address = 0.0.0.0:允许任意 IP 连接 MySQL(0.0.0.0 表示监听所有网卡)。
skip-name-resolve:关闭 DNS 解析,使用 IP 地址验证用户,提高连接速度。
max_connections=2048:最大允许同时连接数。
default-storage-engine=INNODB:默认存储引擎为 InnoDB。
max_allowed_packet=16M:最大允许传输的数据包大小。
server-id = 1:MySQL 唯一 ID,常用于主从复制。
sql_mode=...:设置 SQL 模式,控制 SQL 语法和数据校验规则,如严格模式、禁止零日期、ANSI 引号模式等。
[mysql] 客户端工具配置
port = 3306:客户端连接端口。
default-character-set=utf8:客户端默认字符集 UTF-8。
socket=/usr/local/mysql/mysql.sock:使用 Unix socket 文件连接。
auto-rehash:开启自动补全功能(方便在 `mysql` 命令行中自动补全数据库和表名)。
1.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 \
-DSYSTEMD_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
开始编译并安装(启用多线程加速):
make -j 6 && make install
注:使用 6 核并行编译可加快构建速度。若 CMake 阶段报错,需清除缓存文件后再重新执行。
存储引擎说明:
MYISAM、MERGE、MEMORY 和 CSV 引擎默认已集成到服务器中,无需额外配置。若需静态链接其他引擎,可通过 -DWITH_engine_STORAGE_ENGINE=1 参数启用。
支持的引擎类型包括:ARCHIVE、BLACKHOLE、EXAMPLE、FEDERATED、INNODB(即 InnoDB)、PARTITION(分区支持)、PERFSCHEMA(性能模式)等。
1.4 MySQL 初始化配置
1.4.1 权限设置
赋予 MySQL 用户对安装目录的完全控制权:
chown -R mysql:mysql /usr/local/mysql/
确保配置文件归属正确:
chown mysql:mysql /etc/my.cnf
1.4.2 配置文件调整
根据实际需求编辑 my.cnf 文件,完成服务端参数定制。
1.5 环境变量配置
将 MySQL 可执行路径加入系统全局环境变量:
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile 1.6 数据库初始化 进入 MySQL 执行目录并执行初始化命令: cd /usr/local/mysql/bin/ ./mysqld \ --initialize-insecure \ --user=mysql \ --basedir=/usr/local/mysql \ --datadir=/usr/local/mysql/data 该操作将生成初始数据库文件,使用 --initialize-insecure 参数表示不设置默认 root 密码。 1.7 服务管理配置 将 MySQL 的 systemd 服务文件复制到系统服务目录中,以便进行服务管理: cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ systemctl daemon-reload systemctl start mysqld.service systemctl enable mysqld netstat -anpt | grep 3306 上述命令依次完成:重载服务配置、启动 mysqld 服务、设置开机自启,并通过端口监听检查服务是否正常运行。1.8 账户与密码配置 初始化完成后,为 root 用户设置初始密码: mysqladmin -u root -p password "123456" 执行后会提示输入原密码(因之前未设密码,直接回车),随后设置新密码为 123456。 登录 MySQL 数据库验证配置结果:mysql -u root -p123456登录成功后可执行以下 SQL 命令进行功能测试: SHOW DATABASES; 确认系统数据库列表正常显示,表明安装和初始化流程已完成。 三、总结:数据库核心知识点归纳
| 分类 | 关键点 |
|---|---|
| 架构角色 | LAMP/LNMP 架构中的核心组成部分,负责持久化存储业务数据,例如微信聊天记录、外卖订单信息等 |
| 基本概念 | 数据以表形式组织,每张表由行和列构成;数据库即多个表的集合;DBMS 提供创建、操作及维护数据库的能力 |
| 发展历程 | 从早期的层次型、网状型数据库,发展至关系型数据库(基于 E.F. Codd 提出的二维表格模型),再到应对大数据场景的 NoSQL(如 Redis、MongoDB) |
| 关系型数据库 | 适用于结构化数据存储,支持标准 SQL 查询语言,具备复杂查询与事务处理能力,典型代表包括 MySQL、Oracle |
| NoSQL | 面向高并发读写场景,支持灵活的数据模型(如键值对、文档型),牺牲部分事务一致性以换取高性能与横向扩展性 |
| 选型策略 | 结构化数据优先选择关系型数据库;非结构化或超高并发场景采用 NoSQL;实际应用中常采用混合架构,例如 Redis 做缓存 + MySQL 实现数据持久化 |


雷达卡


登录成功后可执行以下 SQL 命令进行功能测试:
SHOW DATABASES;
确认系统数据库列表正常显示,表明安装和初始化流程已完成。
三、总结:数据库核心知识点归纳
京公网安备 11010802022788号







