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 混合使用" 的常见策略。这些内容不仅是理解数据库的理论基础,更是后续学习数据库安装、管理与优化的前提。

相关推荐
·云扬·10 分钟前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德12 分钟前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫38 分钟前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i1 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.1 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
jiunian_cn1 小时前
【Redis】渐进式遍历
数据库·redis·缓存
橙露1 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot
冰暮流星1 小时前
sql语言之分组语句group by
java·数据库·sql
符哥20081 小时前
Ubuntu 常用指令集大全(附实操实例)
数据库·ubuntu·postgresql
C++ 老炮儿的技术栈2 小时前
Qt 编写 TcpClient 程序 详细步骤
c语言·开发语言·数据库·c++·qt·算法