[数据库] MySQL 基础入门:从 MySQL 数据库安装、基础到MySQL架构与存储引擎

121 0
Honkers 昨天 20:29 来自手机 | 显示全部楼层 |阅读模式


1 ~> 什么是数据库?

数据库(Database,DB)是按照一定结构组织、存储和管理数据的电子仓库
为什么需要数据库呢?

比如你在做一个网站,需要保存用户信息:

id用户名密码年龄
1张三******20
2李四******22
3王五******21

这些数据如果只保存在一个普通文件中,一旦数据量变得比较大时,想要查询、修改和管理就变得非常困难了。所以,引入了数据库来管理。

数据库存储介质:

  • 磁盘
  • 内存

主流数据库:

  • SQL Server:微软的产品,.NET 程序员的最爱,中大型项目。
  • Oracle Database:甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如 MySQL。
  • MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商、SNS、论坛。
  • PostgreSQL:加州大学伯克利分校计算机系开发的关系型数据库,不管是私用、商用,还是学术研究使用,可以免费使用、修改和分发。
  • SQLite:是一款轻型的数据库,是遵守 ACID 的关系型数据库管理系统,它包含在一个相对小的 C 库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
  • H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。

2 ~> MySQL 在 CentOS 7 环境安装

说明:我们直接在 root 权限下操作!

步骤一:卸载不需要的环境

有些系统可能自带 MySQL、MariaDB(MySQL 的开源分支、完全兼容 MySQL,绝大多数语法、API、配置几乎一模一样),我们需要先将它们卸载。
检查是否存在 MySQL / MariaDB:

  1. ps axj | grep maridb
  2. ps axj | grep mysql
复制代码


我的系统下载了 MySQL,所以可以看到,但是不存在 MariaDB。
如果存在,还需要关掉服务:

  1. systemctl stop maridb.service
  2. systemctl stop mysql.service
复制代码

步骤二:卸载默认安装包

查看有哪些安装包:

  1. rpm -qa | grep maridb
  2. rpm -qa | grep mysql
复制代码


卸载安装包:

  1. // 方案一:一次性全部卸载
  2. yum remove mysql-community* -y
  3. // 方案二:一个一个卸载
  4. yum remove mysql-community-common-5.7.44.1.el7.x86_64
  5. yum remove mysql-community-client-5.7.44.1.el7.x86_64
  6. ...
复制代码

步骤三:获取MySQL官方yum源

获取mysql官方yum源:

http://repo.mysql.com/
点击链接进入官网,然后右击鼠标点击“查看网页源代码”。

例如:mysql57-community-release-el7-8.noarch.rpm

  • mysql57:代表 MySQL 5.7 版本
  • community:社区版
  • release:这是一个yum 源 rpm 包
  • el7:Enterprise Linux 7,对应 CentOS7/RHEL7

我的云服务器为Centos 7.8所以我选择mysql57-community-release-el7-8.noarch.rpm,点击之后就会自动下载。

  1. # 查看自己的系统版本
  2. cat /etc/redhat-release
复制代码

安装包如下图所示:

然后将安装包上传到云服务器:

  1. // 从系统文件选择上传到云服务器
  2. rz
复制代码


步骤四:安装yum 源

  1. # 安装
  2. rpm -Uvh mysql57-community-release-el7-8.noarch.rpm
复制代码
  1. # 查看有没有安装成功
  2. ls /etc/yum.repos.d/ -al
复制代码


步骤五:安装MySQL 服务

  1. # 安装服务
  2. yum install -y mysql-community-server
复制代码

可能遇到下面的问题:

  1. # 安装遇到密钥过期的问题:
  2. Failing package is: mysql-community-client-5.7.39-1.el7.x86_64
  3. GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
复制代码
  1. # 解决方案:执行下面的命令
  2. rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
复制代码

步骤六:查看配置文件和数据存储位置

  1. # 配置文件
  2. ls /etc/my.cnf
  3. # 数据库文件
  4. ls /var/lib/mysql
复制代码


步骤七:启动服务并查看

  1. # 启动MySQL 服务端
  2. systemctl start mysql.service
  3. # 或者
  4. systemctl start mysqld
  5. # 查看
  6. ps axj | grep mysqld
复制代码

  1. # 关闭mysql 服务端
  2. systemctl stop mysqld
复制代码


步骤八:登录 MySQL

刚开始我们并不知道密码,所以,先配置为免密码登录。

  1. # 打开配置文件
  2. vim /etc/my.cnf
  3. # 在最后面添加:
  4. skip-grant-tables
  5. # 保存退出即可
  6. shift + ; + wq
复制代码


然后登录:

  1. # 登录:
  2. # -u 指定身份
  3. # -p 指定密码
  4. mysql -u root -p
复制代码


由于我们设置了免密码登录,所以直接回车就登录进去了。

想要退出:直接输入quit即可!


步骤九:简单配置

MySQL 本质是一个基于客户端-服务端模式的网络服务

  • MySQL 服务监听的 TCP 端口,默认 3306。
  • 客户端连接数据库就访问这个端口;可以修改为别的端口,改完要重启 mysqld 服务生效。

注意:改端口之后,连接时需要加 -P端口号,例如 mysql -uroot -p -P3307。

将MySQL 服务端的字符集配置为:utf8。

将存储引擎配置为:默认使用 InnoDB 存储引擎。

  1. # 打开配置文件
  2. vim /etc/my.cnf
  3. # 插入选项
  4. port=3306
  5. character-set-server=utf8
  6. default-storage-engine=innodb
  7. # 保存退出
  8. shift + ; + wq
复制代码


重启 MySQL 服务后生效。

  1. # 重启
  2. systemctl restart mysqld
复制代码

3 ~> MySQL 基础

3.1 服务器,数据库,表关系

所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。

为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。

数据库服务器、数据库和表的关系如下:

3.2 MySQL 基本使用

3.2.1 启动 MySQL 服务端

  1. systemctl start mysqld
复制代码

3.2.2 连接 MySQL 服务器

  1. mysql -u root -p -h 127.0.0.1 -P 3306
复制代码

注意:

  • 如果没有写 -h 127.0.0.1,默认是连接本地。
  • 如果没有写 -P 3306,默认是连接 3306 端口号。

netstat -nltp 查看网络服务:

3.2.3 使用案例

  • 查看当前创建的数据库
  1. show databases;
复制代码


数据库就是 /var/lib/mysql 路径下的目录文件。

注意:命令后面需要加“;”。

  • 创建数据库
  1. create database test;
复制代码

  • 创建数据库表

在创建表之前,要在哪个数据库建表,就要先使用该数据库:

  1. # 使用数据库
  2. use db_name
  3. # 建表
  4. create table student(
  5. id int,
  6. name varchar(32),
  7. gender varchar(2)
  8. );
复制代码
  • 表中插入数据
  1. # 全列插入
  2. insert into student (id, name, gender) values(1, '张三', '男');
  3. insert into student (id, name, gender) values(2, '李四', '女');
  4. insert into student (id, name, gender) values(3, '王五', '男');
  5. # 全列插入写法二:
  6. insert into student values(1, '张三', '男');
  7. insert into student values(2, '李四', '女');
  8. insert into student values(3, '王五', '男');
复制代码
  • 查询表中数据
  1. select * from student;
复制代码

  • 删除数据库(不推荐)
  1. drop database db_name;
复制代码

3.3 MySQL 架构

MySQL 本质是基于 C/S 模式的网络服务。

  • mysql:是客户端
  • mysqld:是服务端,所以启动服务是 systemctl start mysqld

3.3.1 MySQL 的客户端

MySQL Client 是用来和 MySQL Server 进行交互的程序。

例如我们在 Linux 终端输入:

  1. mysql -u root -p
复制代码

这里启动的 mysql 就是一个客户端程序

它可以:

  • 连接 MySQL Server
  • 向 MySQL Server 发送 SQL
  • 接收 Server 返回的数据
  • 把结果显示在终端上

3.3.2 MySQL 的服务端

MySQL Server 是真正负责管理和操作数据库的程序。

它主要负责:

  • 保存数据库和表中的数据

  • 接收客户端发送的 SQL

  • 解析和执行 SQL

  • 查询,修改数据

  • 管理用户权限

  • 返回 SQL 执行结果

例如我们执行:

  1. select * from student;
复制代码

这条 SQL 是发送给 MySQL Server 执行的。

MySQL 的架构就是围绕 MySQL Server 来构建的。

(1)连接与管理层

职责:负责“接客与安全校验”。处理客户端连接、管理线程池,并校验用户的账号、密码与访问权限。

(2)服务层(Server 层)

职责:负责“思考与调度”。包含解析器和优化器,主要将 SQL 文本解析为语法树,计算出最优执行计划,并向底层发送读写指令(这一层与具体数据库引擎无关)。

(3)可插拔存储引擎层

职责:负责“真正的读写干活”。作为插件可按需切换,不同引擎实现不同的存储机制,如 InnoDB(支持事务和行锁)或 MyISAM(不支持事务但简单轻量)。

(4)物理文件存储层

职责:负责“持久化落盘”。将数据表、索引以及各类日志(Redo Log、Binlog 等)真正保存在操作系统的磁盘或网络存储中。

3.4 SQL 分类

SQL 就是 MySQL 的命令。按照功能的不同,SQL 主要分为以下四类:

分类全称作用说明代表指令典型示例
DDLData Definition Language(数据定义语言)用来维护存储数据的结构,如创建、删除、修改数据库和表create、drop、altercreate database test;、drop table student;、alter table student add column age int;
DMLData Manipulation Language(数据操纵语言)用来对表中的数据进行增、删、改操作insert、delete、updateinsert into student values(1, '张三', '男');、delete from student where id = 1;、update student set name = '李四' where id = 2;
DQLData Query Language(数据查询语言)用来查询表中的数据,是 DML 中单独划分出来的一类selectselect * from student where id = 10;
DCLData Control Language(数据控制语言)主要负责权限管理和事务控制grant、revoke、commitgrant all on *.* to 'root'@'localhost';、revoke all on *.* from 'root'@'localhost';、commit;

说明:DQL 本质上是 DML 的一部分,但由于 select 查询使用频率极高,通常单独列为一类,方便学习和记忆。

4 ~> 存储引擎

4.1 什么是存储引擎?

MySQL 存储引擎,可以理解为负责“怎么存储和读取表中数据”的组件。

MySQL Server 负责接收和处理 SQL,但具体把数据写到磁盘、怎么读取、怎么建立索引、怎么支持事务,主要由存储引擎负责。

例如执行:

  1. select * from student where id = 10;
复制代码

MySQL Server 的 SQL 层会负责解析、优化和执行这个 SQL。

真正需要从数据中找到 id = 10 的数据时,就会交给存储引擎。

  • 查看存储引擎:
  1. show engines;
复制代码

4.2 常见的存储引擎

MySQL 的核心就是插件式存储引擎,支持多种存储引擎

现在 MySQL 默认的存储引擎就是 InnoDB。

还有:

  • MyISAM
  • MEMORY
  • CSV
  • Archive

InnoDB 负责的事情:

  • 数据存储
  • 索引
  • 事务
  • MVCC
  • Buffer Pool
  • 崩溃恢复
  • Redo Log等

一个直观的比喻:将 MySQL 想象成图书馆

  1. MySQL Server = 图书馆
  2. ├── SQL解析器 = 接待员
  3. ├── 优化器 = 查找路线规划员
  4. ├── 执行器 = 执行工作人员
  5. └── 存储引擎 = 图书仓库管理系统
复制代码

5 ~> 总结

本文介绍了 MySQL 的基础知识,包括数据库、服务器与表的基本概念。

重点讲解了 MySQL 的安装!

并初步了解了 MySQL 的基本使用以及 MySQL 的客户端、服务端架构以及 SQL 分类。

最后介绍了存储引擎的基本概念,为后续学习 InnoDB、索引、事务等 MySQL 核心知识打下基础。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行