前言
此前与读者探讨了keepalived集群的基本概念及其部署流程,本文将聚焦于MySQL数据库的核心原理及其源码编译安装的详细步骤。
一、数据库概述
1. 基本概念解析
1.1 数据
定义:数据是用于描述客观事物的符号记录(Data),涵盖数字、文字、图像、音频等多种形式。
存储方式:
- 以统一格式按“记录”形式组织存储
- 相同类型的数据集中存放,例如“学生”信息不会与“图书”信息混合存储
1.2 表
结构组成:表由行(即记录)和列(即字段)构成 —— 这是核心要点。
主要特征:
- 每条记录由多个字段组成,字段内容为字符或数值
- 支持多用户共享访问
- 具备较低的数据冗余度,并实现较高的数据独立性
1.3 数据库
数据库本质上是若干张相关联的表的集合,按照特定结构组织并持久化存储的数据总和。
1.4 数据库管理系统(DBMS)
定义:用于操作和管理数据库的系统软件。
核心功能包括:
- 数据库构建与维护:创建表结构、执行数据转储与恢复、进行性能监控与重组
- 数据定义:设定数据逻辑结构、物理存储方式及安全保密机制
- 数据操作:实现查询、统计分析、更新等操作
- 运行控制:处理并发访问、权限验证以及系统维护任务
- 通信能力:可与其他应用软件(如Office套件、Access)交互协作
1.5 数据库系统(DBS)
系统构成:由硬件平台、操作系统、数据库本身、DBMS、应用软件以及最终用户共同组成的人机交互体系。
用户可通过DBMS或专用应用程序对数据库进行访问与操作。
关键角色说明:
- DBA(数据库管理员):负责备份恢复、日常维护、安全管理及用户权限配置
- 典型应用软件:Navicat、人事管理系统、财务系统、图书管理系统等
DBMS工作流程:
- 接收客户端请求
- 转化为底层数据库指令
- 执行对应的数据操作
- 获取执行结果
- 格式化输出内容
- 将响应返回给用户
2. 数据库发展历史
2.1 第一阶段:层次型与网状型数据库
代表系统:IMS(IBM于1969年推出)
2.2 第二阶段:关系型数据库兴起
标志性事件:1970年,IBM研究员E.F. Codd提出“关系模型(Relational Model)”
核心理念:
- 采用二维表格(行列结构)组织数据,取代传统复杂的指针链接方式
- 利用数学中的集合论与关系代数来表达和操作数据(如选择、投影、连接等)
- 显著提升数据的直观性、可查询性与可维护性
代表性成果:
- System R(IBM开发):首个真正实现关系模型的实验性系统
- Ingres(加州大学伯克利分校):另一早期系统,后衍生出PostgreSQL
深远影响:
- 推动SQL(结构化查询语言)成为行业标准
- 现代主流数据库如MySQL、Oracle、SQL Server均源于此技术路线
2.3 第三阶段:新型数据库演进
发展趋势特点:
- 面向对象设计思想融入
- 强调开放性与跨平台兼容性
- 普遍采用SQL与NoSQL混合架构
新兴数据库实例:MariaDB、PostgreSQL、时序数据库Prometheus
3. 关系型数据库详解
数据建模方式:采用E-R模型(实体-关系模型)
- 每一行(记录)表示一个实体实例
- 每一列(字段)表示实体的一个属性
- 表之间通过外键建立关联关系(一对一、一对多、多对多)
主键特性:唯一性、非空性,类比现实中的学号或身份证号码
常见产品:MySQL、Oracle、SQL Server、DB2、PostgreSQL 等
4. 非关系型数据库(NoSQL)
定义:NoSQL意为“Not Only SQL”,其数据存储不局限于表格形式,支持键值对、文档、列式等多种结构。
典型代表:Redis、Memcached、MongoDB、HBase
适用场景:高并发读写、缓存系统、大数据实时处理
优势:
- 数据格式灵活,支持Key-Value、JSON文档、图片等
- 基于内存操作,响应速度快
- 横向扩展能力强,易于分布式部署
- 多数为开源方案,部署成本低
局限性:
- 通常不支持标准SQL语句
- 缺乏完整的事务支持(ACID特性弱)
- 复杂查询能力有限
- 大量依赖内存存储,断电可能导致数据丢失(部分支持持久化)
Redis 与 Memcached 对比:
- 共性:均用于热点数据缓存,以内存为核心存储介质,具备高速读写能力
- 差异:Redis支持数据持久化到磁盘;而Memcached为纯内存运行,重启后数据清空
5. 关系型 vs 非关系型数据库对比
二、数据库安装实践
MySQL 5.7 源码编译安装流程
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
2. 源码解压与依赖处理
将下载的MySQL源码包解压至指定目录,并确保所有依赖项已正确安装。
3. CMake 编译配置
进入源码目录,使用cmake命令进行编译参数设定,例如指定安装路径、启用插件等。
4. 配置 MySQL
编写或修改my.cnf配置文件,设置数据目录、日志路径、端口、字符集等关键参数。
5. 环境变量设置
将MySQL的bin目录加入系统PATH中,便于全局调用mysql命令。
6. 数据库初始化
执行初始化脚本生成系统数据库和基础表结构,设置root默认密码(如适用版本)。
7. 服务管理
配置systemd服务单元文件,实现MySQL作为系统服务启动、停止、重启与状态查看。
8. 账号密码管理
首次登录后应及时修改默认账户密码,创建普通用户并分配最小权限,保障安全性。
总结
本文系统梳理了数据库的基础理论知识,涵盖从数据、表、DBMS到完整数据库系统的构成要素,并回顾了数据库技术的发展脉络。重点区分了关系型与非关系型数据库的技术特征与应用场景。最后,通过MySQL 5.7的源码编译安装全过程演示,帮助读者掌握实际部署技能,为后续深入学习打下坚实基础。
1. 用户权限配置 /sbin/nologin mysql 2. 源码解压与依赖环境准备 将 MySQL 源码包解压至 /opt 目录: tar zxvf mysql-5.7.17.tar.gz -C /opt 同时,将 Boost 库解压到系统指定路径并重命名以便后续编译使用: tar zxvf boost_1_59_0.tar.gz -C /usr/local/ mv /usr/local/boost_1_59_0 /usr/local/boost 3. 使用 CMake 进行编译配置 进入解压后的 MySQL 源码目录,执行如下命令完成编译参数设置: cd /opt/mysql-5.7.17/ 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 4 && make install 4. MySQL 配置与权限设置 为确保服务正常运行,需正确设置安装目录的归属权限: chown -R mysql:mysql /usr/local/mysql/ chown mysql:mysql /etc/my.cnf 接着创建或修改主配置文件 /etc/my.cnf,内容如下: [client] port = 3306 default-character-set=utf8 socket=/usr/local/mysql/mysql.sock [mysql] port = 3306 default-character-set=utf8 socket=/usr/local/mysql/mysql.sock auto-rehash [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 5. 环境变量配置 为了能够在任意路径下执行 MySQL 命令,需将二进制路径加入系统环境变量: echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile source /etc/profile 6. 初始化数据库 切换到 MySQL 的可执行文件目录,并执行初始化操作(使用无密码模式): cd /usr/local/mysql/bin/ ./mysqld \ --initialize-insecure \ --user=mysql \ --basedir=/usr/local/mysql \ --datadir=/usr/local/mysql/data 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 验证服务是否已监听 3306 端口: netstat -anpt | grep 3306 8. 账户与密码管理 首次安装后为 root 用户设置初始密码: mysqladmin -u root -p password "123456" 使用设定的密码登录数据库: mysql -u root -p123456 成功登录后,可通过以下命令查看当前数据库列表: SHOW DATABASES;总结: 本文详细介绍了 MySQL 数据库的基本概念及其通过源码编译方式进行安装的完整流程。涵盖了解压、依赖配置、CMake 编译、权限设定、服务注册以及账户管理等关键步骤,旨在帮助用户掌握手动部署 MySQL 的核心方法。


雷达卡


总结:
本文详细介绍了 MySQL 数据库的基本概念及其通过源码编译方式进行安装的完整流程。涵盖了解压、依赖配置、CMake 编译、权限设定、服务注册以及账户管理等关键步骤,旨在帮助用户掌握手动部署 MySQL 的核心方法。
京公网安备 11010802022788号







