MySQL架构与数据库基础
一、数据库概念数据库是一个以某种由构造的方式存储的数据聚集。我们可以把数据库想象称为一个文件柜。此文件柜是一个存放数据的物理位置,不管数据是什么以及如何构造的。数据库本质也必要像文件一样,可以大概长期化存储,故数据库存储介质为:磁盘、内存。
数据库(database):保存有构造的数据的容器。(通常是一个文件或一组文件)
人们通常用数据库这个术语来代表他们使用误用导致混淆的数据库软件。这是不正确的,它是引起混淆的根源。确切地说,数据库软件应称为DBMS(数据库管理系统)。数据库是通过DBMS创建和操纵的容器。数据库可以是保存在硬装备上的文件,但也可以不是。在很大程度上说,数据库毕竟是文件照旧别的什么东西并不重要,因为我们并不直接访问数据库;我们使用的是DBMS,它替我们访问数据库。
DBMS可分为两类:一类为基于共享文件系统的DBMS,另一类为基于客户端-服务器(C/S)架构的。
MySQL、Oracle以及SQL Server等数据库是基于CS架构的数据库。这种数据库应用分为两个差异的部门。服务器部门是负责全部数据访问和处置惩罚的一个软件。这个软件运行在称为数据库服务器的计算机上。
与数据文件打交道的只有服务器软件。关于数据、数据添加、删除和数据更新的全部请求都由服务器软件完成。这些请求或更改来自运行客户机软件的计算机。客户机是与用户打交道的软件。比方,如果请求一个按字母顺序列出的产品表,则客户机软件通过网络提交该请求给服务器软件。服务器软件处置惩罚这个请求,根据必要过滤、抛弃和排序数据:然后把结果送回到我们的客户机软件。
客户机和服务器软件大概安装在两台计算机或一台计算机上。不管它们在不在相同的计算机上,为进行全部数据库交互,客户机软件都要与服务器软件进行通讯。
全部这些运动对用户都是透明的。数据存储在别的地方,或者数据库服务器为我们完成这个处置惩罚这一事实是隐藏的。我们不必要直接访问数据文件。事实上,多数网络的建立使用户不具有对数据的访问权,甚至不具有对存储数据的驱动器的访问权。
这样的意义何在?因为为了使用MySQL,我们必要访问运行MySQL服务器软件的计算机和发布下令到MySQL的客户机软件的计算机。
[*]服务器软件为MySQL DBMS。我们可以在当地安装的副本上运行也可以毗连到运行在我们具有访问权的远程服务器上的一个副本。
[*]客户机可以是MySQL提供的工具、脚本语言(如Perl)、Web应用开辟语言(如JSP和PHP)、程序设计语言(如C、C++、Java)等。
https://i-blog.csdnimg.cn/direct/977893aced5442728d32531ab3735848.png#pic_center
[*]/usr/bin/mysql 是客户端程序,用于从下令行与MySQL数据库服务器进行交互。
[*]/usr/sbin/mysqld 是服务器守护进程,用于启动和运行MySQL数据库服务器。
MySQL本质:基于C(mysql)S(mysqld)模式的一种网络服务;我们可以使用netstat -nltp查看对应端口是否有数据库服务端程序在运行。
通常,/usr/bin目录用于存放用户下令,而/usr/sbin目录则用于存放系统管理员下令。因此,mysql下令通常位于/usr/bin,而mysqld则位于/usr/sbin。
MySQL客户端
[*]客户端的角色:客户端是用户与MySQL数据库交互的接口。它可以是一个下令行工具、图形用户界面(GUI)工具,或者是一个应用程序中的数据库驱动或库。
[*]常见的MySQL客户端:
[*]mysql:这是MySQL提供的官方下令行工具,答应用户通过终端或下令提示符直接输入SQL下令来操纵数据库。
[*]图形界面工具:如MySQL Workbench、phpMyAdmin等,它们提供了更友好的用户界面来管理数据库。
[*]编程语言库:如Python的mysql-connector-python、pymysql,Java的mysql-connector-java等,这些库答应开辟者在应用程序中嵌入数据库操纵代码。
MySQL服务器 (mysqld)
[*]服务器的角色:mysqld是MySQL服务器进程,负责管理数据库文件、处置惩罚来自客户端的请求、实验SQL下令,并返回结果。
[*]服务器功能:
[*]数据存储:将数据存储在硬盘上的文件中。
[*]数据检索:根据客户端的请求检索数据。
[*]数据更新:根据客户端的指令更新数据库中的数据。
[*]数据删除:根据客户端的指令删除数据库中的数据。
[*]安全性:管理用户权限,确保只有授权用户才能访问数据库。
客户端与服务器交互:
[*]当客户端程序(如mysql下令行工具)启动时,它会尝试毗连到运行mysqld服务的服务器。
[*]毗连建立后,用户可以在客户端输入SQL下令,这些下令会被发送到服务器。
[*]mysqld服务器处置惩罚这些SQL下令,并将结果返回给客户端。
[*]客户端将结果显示给用户,或者根据应用程序的必要进一步处置惩罚。
比方,如果要使用mysql下令行工具,以下是一个简单的交互过程:
# 连接到MySQL服务器
mysql -u username -p
# 输入密码后,进入MySQL命令行界面
mysql> SHOW DATABASES;
在这个例子中,SHOW DATABASES;下令是由用户在mysql客户端输入的,然后这个下令被发送到mysqld服务器,服务器实验这个下令,并将数据库列表返回给客户端,客户端再将结果显示给用户。
如果必要启动或停止MySQL服务器,通常使用以下下令(大概必要root权限):
[*] 启动MySQL服务器:
systemctl start mysqld
[*] 停止MySQL服务器:
systemctl stop mysqld
[*] 查看MySQL服务器的状态:
systemctl status mysqld
[*] 数据库设置为开机自启动:实验下方两个下令,实现数据库服务端开机自启动并守护进程化
systemctl enable mysqld #开机自启动
systemctl daemon-reload #进程守护进程化
[*] 如果要取消开机自启动:
systemctl disable mysqld
[*] 毗连数据库服务器:
mysql -h 127.0.0.1 -P 3306 -u root -p
-h和-P可以省略。-h指明登录部署了mysql的服务器的主机。-P指明我们要访问的端口号。-u指明登录用户
退出:quit或者使用快捷下令:ctrl+p
二、数据库的简单概念
当我们将资料放入自己的文件柜的时候,并不是恣意的将他们扔进一个抽屉就完事了,而是在文件柜中常见文件,然后把相关资料放入特定文件中。
在数据库中,这种文件称为表。表是一种结构化的文件,可用来存储某种特定的数据类型。表可以保存顾客清单、产品目录,或者其他信息等等。
表(table):某种特定类型数据的结构化清单。
这里关键的一点在于,存储在表中的数据是一种类型的数据或一个清单。决不应该将顾客的清单与订单的清单存储在同一个数据库表中。这样做将使以后的检索和访问很困难。应该创建两个表,每个清单一个表。
数据库中的每个表都有一个名字,用来标识自己。此名字是唯一的,这表示数据库中没有其他表具有相同的名字。
表名:表名的唯一性取决于多个因素,如数据库名和表名等的结合。也就是说,虽然在相同数据库中不能两次使用相同的表名,但在差异的数据库中可以使用相同的表名。
表由列构成。列中存储着表中某部门的信息。
列(column):表中的一个字段。全部表都是由一个或多个列构成的。
我们可把将数据库表想象为一个网格。网格中每一列存储着一条特定的信息。比方,在顾客表中,一个列存储着顾客编号,另一个列存储着顾客名,而地点、城市、州以及邮政编码全都存储在各自的列中。
数据库中每个列都有相应的数据类型。数据类型定义列可以存储的数据种类。比方,如果列中存储的为数字(大概是订单中的物品数),则相应的数据类型应该为数值类型。如果列中存储的是日期、文本、注释、金额等,则应该用恰当的数据类型规定出来。
数据类型(datatype):所容许的数据的类型。每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据。
数据类型限制可存储在列中的数据种类(比方,克制在数值字段中录入字符值)。数据类型还资助正确地排序数据,并在优化磁盘使用方面起重要的作用。因此,在创建表时必须对数据类型给予特殊的关注。
表中的数据是按行存储的,所保存的每个记录存储在自己的行内。如果将表想象成网格,其中垂直的列称为表列,程度的行称为表行。
行(row):表中的一个记录。
Mysql 服务端在启动时,会读取配置文件,对某些属性信息做配置。centos 7中 Mysql的配置文件为/etc/my.cnf,如下图右边所示(可修改这个文件的配置信息,对mysql做配置)。
https://i-blog.csdnimg.cn/direct/4f31e94c55ed41adbef8b0242a7e6ee5.png#pic_center
数据库中的数据是存储在文件中的,建立差异的数据库就是建立差异的目录。创建一个数据库,就是在Linux下创建一个目录。
https://i-blog.csdnimg.cn/direct/d20d809c79314545972e5751d9a0e123.png#pic_center
上图中,创建了名为 hello的数据库,并在其中建表。在数据库内建表,即在数据库地点目录下创建新文件。
https://i-blog.csdnimg.cn/direct/7aa410c3ac414ad0971bc732c0064a4e.png#pic_center
上述工作都是Mysqld做的。也就是说数据库本质实在也是文件,只不过这些文件并不由程序员直接操纵,而是由数据库的Mysqld服务帮我们进行操纵管理。
三、SQL
SQL是结构化查询语言的缩写,Structured Query Language。它是一种专门用来与数据库通讯的语言。几乎全部重要的DBMS都支持SQL。即主要用于管理关系数据库系统、处置惩罚数据以及在数据库中进行各种操纵。SQL语句分为以下四类:
[*]DDL (Data Definition Language):数据定义语言用于定义数据库的结构,包括创建、修改和删除数据库中的对象,如数据库、表、视图、索引等。常见的DDL下令包括:
[*]CREATE:创建新的数据库对象,如表、视图或索引。
[*]ALTER:修改现有数据库对象。
[*]DROP:删除数据库对象。
[*]DML (Data Manipulation Language):数据操纵语言用于在数据库中插入、更新、删除和查询数据。DML下令通常涉及对表中的数据进行操纵。常见的DML下令包括:
[*]INSERT:向表中添加新行(记录)。
[*]UPDATE:修改表中现有行的数据。
[*]DELETE:从表中删除行。
[*]DQL (Data Query Language):数据查询语言通常被以为是SQL的一个子集,专门用于从数据库中检索数据。最常用的DQL下令是:
[*]SELECT:从数据库中的一个或多个表中检索数据。
[*]DCL (Data Control Language):数据控制语言用于管理数据库中的数据访问权限。DCL下令通常用于创建和打消用户权限、角色以及事务控制。常见的DCL下令包括:
[*]GRANT:授予权限。
[*]REVOKE:打消权限。
这些SQL部门共同构成了数据库管理的关键工具集,使得用户和开辟者可以大概有效地与数据库交互。
四、MySQL架构
MySQL 架构描述了 MySQL 系统的差异组件如何相互关联。 MySQL 架构根本上是一个客户端-服务器系统。 MySQL数据库服务器是服务器,毗连到MySQL数据库服务器的应用程序是客户端。 MySQL架构包含以下主要组件:
https://i-blog.csdnimg.cn/direct/a0b6b14e2b504af28b14d8964b434492.png#pic_center
上图展示了MySQL服务器的架构:
[*] Client Connectors (客户端毗连器)
[*]这一层负责与客户端进行通讯。MySQL支持多种毗连器,如JDBC、ODBC、.NET、PHP、Python和C API。这些毗连器答应差异语言的应用程序与MySQL服务器进行交互。
[*] MySQL Server (MySQL服务器)
[*] 这是整个架构的核心部门,包含多个子系统和模块。
[*] Connection Pool (毗连池)
[*]负责处置惩罚客户端毗连、身份验证以及安全性管理。毗连池优化了毗连的复用,淘汰了每次毗连时的资源斲丧。
[*] Services & Utilities (服务和实用工具)
[*]包括备份与规复、安全性、复制、分区、集群和Workbench工具。这些服务和工具为MySQL的管理和维护提供了支持。
[*] SQL Interface (SQL接口)
[*]处置惩罚DML(数据操纵语言)、DDL(数据定义语言)、存储过程、触发器和视图等SQL操纵,是用户与数据库交互的主要接口。
[*] Parser (剖析器)
[*]负责对SQL语句进行词法和语法分析,并生成相应的语法树和代码。
[*] Optimizer (优化器)
[*]负责SQL查询的优化,包括查询重写、扫描顺序以及索引的使用。这一步调是提高查询性能的关键。
[*] Caches (缓存)
[*]包含全局缓存和引擎特定的缓存,用于提高数据读取的速度,淘汰对磁盘的访问。
[*] Pluggable Storage Engines (可插拔存储引擎)
[*]MySQL支持多种存储引擎,如MyISAM、InnoDB、Federated、Archive、Merge、Memory、Cluster和Example。每种存储引擎都有自己的特点,适合差异的应用场景。比方,InnoDB支持事务和外键,而Memory引擎适合必要快速访问的临时数据。
[*] Indexes (索引)
[*]索引用于加速数据检索,淘汰查询时间。差异的存储引擎大概有差异的索引类型和实现方式。
[*] File System & Logs (文件系统与日志)
[*]数据库数据终极存储在底层的文件系统中,如NTFS、ext4、SAN和NAS。日志文件(如二进制日志、错误日志、慢查询日志、通用日志等)则用于记录数据库的运行状态和汗青操纵,资助管理员进行审计和故障排查。
整体来看,MySQL的架构设计灵活且模块化,可以大概根据差异的需求进行定制和优化。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]