系列文章目录
文章目录
- 系列文章目录
- 前言
- 一、数据库概述
-
- [1. 数据库基本概念](#1. 数据库基本概念)
-
- [1.1 数据](#1.1 数据)
- [1.2 表](#1.2 表)
- [1.3 数据库](#1.3 数据库)
- [1.4 数据库管理系统(DBMS)](#1.4 数据库管理系统(DBMS))
- [1.5 数据库系统(DBS)](#1.5 数据库系统(DBS))
- [2. 数据库发展史](#2. 数据库发展史)
-
- [2.1 第一阶段(层次型/网状型)](#2.1 第一阶段(层次型/网状型))
- [2.2 第二阶段(关系型)](#2.2 第二阶段(关系型))
- [2.3 第三阶段(新型数据库)](#2.3 第三阶段(新型数据库))
- [3. 关系型数据库](#3. 关系型数据库)
- [4. 非关系型数据库(NoSQL)](#4. 非关系型数据库(NoSQL))
- [5. 关系型 vs 非关系型数据库对比](#5. 关系型 vs 非关系型数据库对比)
- [6. 小结](#6. 小结)
- [二、数据库安装(MySQL 5.7 源码编译安装)](#二、数据库安装(MySQL 5.7 源码编译安装))
-
- [2.1 环境准备](#2.1 环境准备)
-
- 安装依赖工具
- [创建 MySQL 专用用户](#创建 MySQL 专用用户)
- [2.2 源码解压与依赖配置](#2.2 源码解压与依赖配置)
- [2.3 CMake 编译配置](#2.3 CMake 编译配置)
- [2.4 配置 MySQL](#2.4 配置 MySQL)
-
- 权限设置
- [修改配置文件 `/etc/my.cnf`](#修改配置文件
/etc/my.cnf)
- [2.5 环境变量设置](#2.5 环境变量设置)
- [2.6 数据库初始化](#2.6 数据库初始化)
- [2.7 服务管理](#2.7 服务管理)
- [2.8 账号密码管理](#2.8 账号密码管理)
-
- [设置 root 密码](#设置 root 密码)
- [登录 MySQL](#登录 MySQL)
- 总结
前言
数据库是现代信息系统的核心基础设施,无论是日常使用的社交软件、外卖平台,还是企业级的财务系统、业务平台,其背后都依赖数据库实现核心数据的存储、管理与高效调用。理解数据库的基础概念、发展脉络及不同类型数据库的特性,是掌握数据管理能力的第一步 ------ 它不仅能帮你厘清 "数据、表、数据库" 的层级关系,还能让你在后续面对实际业务时,清晰判断该选择关系型数据库(如 MySQL)还是非关系型数据库(如 Redis)。本部分将从数据库基本概念切入,逐步展开其发展历史、两类主流数据库的对比,最终形成完整的数据库认知框架,为后续实操与深入学习打下基础。
一、数据库概述
1. 数据库基本概念
1.1 数据
- 定义:描述客观事物的符号记录(Data),包括数字、文字、图像、声音等。
- 存储方式:以记录形式存储,统一格式;相同类型数据集中存放(如"学生"数据独立存储)。
- 示例:班级同学数据中,一名同学为一条记录,每条记录包含学号、姓名、性别等多个属性。
- 数据库保存形式:MySQL 服务 → 数据库 → 数据表 → 行(记录)+ 列(字段)。
1.2 表
- 结构:行(记录)+ 列(字段)(核心)。
- 特点:记录由字段组成,字段由字符/数字构成;支持多用户共享;冗余度低、数据独立性高。
1.3 数据库
数据库是表的集合,是按照一定组织方式存储的相关数据集合。
1.4 数据库管理系统(DBMS)
- 定义:操作和管理数据库的软件。
- 主要功能:
- 建库与维护(建表、转储与恢复、重组、性能监视);
- 数据定义(数据结构、存储结构、保密模式);
- 数据操作(查询、统计、更新);
- 运行管理(并发控制、存取控制、维护);
- 通信(与其他软件交互,如 Access 和 Office 组件)。
- 工作模式:接收请求 → 转换为底层指令 → 执行数据库操作 → 获取结果 → 格式化结果 → 返回给用户。
1.5 数据库系统(DBS)
- 组成:硬件 + 操作系统 + 数据库 + DBMS + 应用软件 + 用户。
- 关键角色:DBA(数据库管理员),负责备份恢复、维护、用户管理。
- 应用软件:Navicat、人事管理系统、财务系统、图书管理系统等。
2. 数据库发展史
2.1 第一阶段(层次型/网状型)
代表产品:IMS(IBM,1969年)。
2.2 第二阶段(关系型)
- 核心思想:数据存储在二维表(行、列)中,用数学集合和关系代数描述与操作数据(如选择、投影、连接),数据直观、易查询维护。
- 代表产品:
- System R(IBM 开发):首个实现关系模型的实验性数据库系统;
- Ingres(加州大学伯克利):衍生出 PostgreSQL。
- 意义:推动 SQL(结构化查询语言)成为主流,后续 MySQL、Oracle、SQL Server 均为其后代。
2.3 第三阶段(新型数据库)
- 特点:面向对象、开放性、多平台,支持 SQL + NoSQL 混合使用。
- 新兴数据库:MariaDB、PostgreSQL、时序数据库 Prometheus。
3. 关系型数据库
- 数据模型:E-R 模型(实体-关系),行(记录)= 实体,列(字段)= 属性,表与表之间存在 1 对 1、1 对多、多对多关系。
- 核心标识:主键(唯一、非空,类比学号/身份证号)。
- 常见产品:MySQL、Oracle、SQL Server、DB2、PostgreSQL 等。
4. 非关系型数据库(NoSQL)
- 定义:Not Only SQL,存储方式不限于表,支持键值对、文档、列式数据等。
- 典型产品:Redis、Memcached、MongoDB、HBase。
- 应用场景:高并发、缓存、大数据实时计算。
- 优点:格式灵活(支持 Key-Value、文档、图片等);速度快(基于内存存储);高扩展性;成本低(开源、部署简单)。
- 缺点:不支持 SQL;缺少事务处理;复杂查询支持不足;大部分数据存于内存,硬件成本较高。
- Redis 与 Memcached 对比:
- 相同点:存储热点数据、内存运行、速度快;
- 不同点:Redis 支持持久化(数据可落盘),Memcached 纯内存存储(断电丢失)。
5. 关系型 vs 非关系型数据库对比
| 特点 | 关系型数据库 | 非关系型数据库 |
|---|---|---|
| 数据结构 | 表(二维表) | KV、文档、列式、图形 |
| 优点 | 结构清晰,SQL 通用,支持复杂查询 | 格式灵活,速度快,高并发 |
| 缺点 | 表结构固定,I/O 瓶颈 | 无 SQL、事务差、复杂查询弱 |
| 代表产品 | MySQL、Oracle、PostgreSQL | Redis、MongoDB、HBase |
6. 小结
- 主流数据库系统:关系型(MySQL/Oracle/SQL Server)+ 非关系型(Redis/MongoDB)。
- DBMS 核心作用:作为桥梁,接收请求、转化指令、执行数据库操作并返回结果。
- 选型思路:
- 数据关系清晰、结构化 → 关系型数据库;
- 高并发、非结构化、大数据分析 → 非关系型数据库;
- 实际应用常采用 SQL + NoSQL 混合使用(如 Redis 缓存 + MySQL 持久化)。
二、数据库安装(MySQL 5.7 源码编译安装)
2.1 环境准备
安装依赖工具
bash
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
- 依赖说明:
- gcc/gcc-c++:编译工具;
- ncurses/ncurses-devel:字符终端交互库;
- bison:语法分析器;
- cmake:MySQL 编译工具。
创建 MySQL 专用用户
bash
useradd -s /sbin/nologin mysql
2.2 源码解压与依赖配置
bash
# 解压 MySQL 源码包至 /opt 目录
tar zxvf mysql-5.7.17.tar.gz -C /opt
# 解压 boost 依赖包至 /usr/local/ 目录
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 编译配置
进入源码目录
bash
cd /opt/mysql-5.7.17/
执行 CMake 配置(关键参数)
bash
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ # 指定 MySQL 安装路径(重要)
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ # 指定进程监听套接字文件路径(重要)
-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 \ # 安装 PERFSCHEMA 存储引擎
-DMYSQL_DATADIR=/usr/local/mysql/data \ # 指定数据库文件存储路径(重要)
-DWITH_BOOST=/usr/local/boost \ # 指定 boost 依赖路径
-DWITH_SYSTEMD=1 # 生成 systemctl 管理文件
编译安装
bash
make -j 4 && make install
- 注意:若 CMake 配置出错,解决问题后需删除
CMakeCache.txt文件,再重新执行 CMake 命令。
存储引擎说明
- MYISAM、MERGE、MEMORY 和 CSV 引擎默认编译到服务器,无需额外指定;
- 静态编译其他存储引擎需使用
-DWITH_XXX_STORAGE_ENGINE=1(XXX 为引擎名,如 INNODB、ARCHIVE 等)。
2.4 配置 MySQL
权限设置
bash
# 设置 MySQL 安装目录属组为 mysql
chown -R mysql:mysql /usr/local/mysql/
# 设置配置文件属组为 mysql
chown mysql:mysql /etc/my.cnf
修改配置文件 /etc/my.cnf
ini
[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.5 环境变量设置
bash
# 将 MySQL 二进制命令路径添加到系统环境变量
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
# 生效环境变量
source /etc/profile
2.6 数据库初始化
bash
cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \ # 无密码初始化(后续手动设置密码)
--user=mysql \ # 以 mysql 用户身份初始化
--basedir=/usr/local/mysql \ # 安装目录
--datadir=/usr/local/mysql/data # 数据库文件存储目录
2.7 服务管理
bash
# 复制 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
2.8 账号密码管理
设置 root 密码
bash
mysqladmin -u root -p password "123456" # 密码设为 123456(可自定义)
登录 MySQL
bash
mysql -u root -p123456 # 用户名 root,密码 123456
总结
综上,"数据库概述" 部分围绕 "认知数据库" 核心目标,梳理了三大关键维度:其一,明确了数据、表、数据库、DBMS(数据库管理系统)的层级概念及作用,尤其是 DBMS 作为 "用户与数据库桥梁" 的核心功能;其二,回顾了数据库从层次型 / 网状型、关系型到新型混合架构的发展历程,重点突出关系型数据库(以 MySQL 为代表)的二维表模型与 SQL 语言的主流地位;其三,通过对比关系型与非关系型数据库的结构、优缺点及适用场景,给出 "结构化数据选关系型、高并发非结构化数据选非关系型" 的选型思路,且强调实际应用中 "SQL+NoSQL 混合使用" 的常见策略。这些内容不仅是理解数据库的理论基础,更是后续学习数据库安装、管理与优化的前提。