Mysql 数据库部署

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、数据库概述
    • [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 环境准备)
    • [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)

  • 定义:操作和管理数据库的软件。
  • 主要功能:
    1. 建库与维护(建表、转储与恢复、重组、性能监视);
    2. 数据定义(数据结构、存储结构、保密模式);
    3. 数据操作(查询、统计、更新);
    4. 运行管理(并发控制、存取控制、维护);
    5. 通信(与其他软件交互,如 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. 小结

  1. 主流数据库系统:关系型(MySQL/Oracle/SQL Server)+ 非关系型(Redis/MongoDB)。
  2. DBMS 核心作用:作为桥梁,接收请求、转化指令、执行数据库操作并返回结果。
  3. 选型思路:
    • 数据关系清晰、结构化 → 关系型数据库;
    • 高并发、非结构化、大数据分析 → 非关系型数据库;
    • 实际应用常采用 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 混合使用" 的常见策略。这些内容不仅是理解数据库的理论基础,更是后续学习数据库安装、管理与优化的前提。

相关推荐
数据库学啊1 小时前
国产时序数据库哪个靠谱
数据库·时序数据库
尋有緣1 小时前
力扣2292-连续两年有3个及以上的订单产品
leetcode·oracle·数据库开发
网安老伯1 小时前
什么是网络安全?网络安全包括哪几个方面?学完能做一名黑客吗?
linux·数据库·python·web安全·网络安全·php·xss
瀚高PG实验室2 小时前
postgresql日期/时间数据类型中有无时区的差异使用
数据库·postgresql·瀚高数据库
Elastic 中国社区官方博客2 小时前
Elasticsearch 中的文档级基于属性的访问控制 - ABAC
大数据·数据库·elasticsearch·搜索引擎·全文检索
数据库学啊2 小时前
国产时序数据库供应商排名
数据库·时序数据库
songtaiwu3 小时前
golang开发日常注意
开发语言·数据库·golang
NineData3 小时前
NineData社区版V4.7.0发布!新增MySQL至TiDB等6条数据复制对比链路,SQL窗口新增谷歌云6种数据源类型
数据库·dba
乄bluefox3 小时前
如何快速迁移redis - RedisShake(RDB方式)
数据库·redis·缓存