MySQL之体系结构和基础管理

news/2024/4/19 13:51:04/文章来源:https://blog.csdn.net/NHB456789/article/details/136479893

前言

本文以linux系统的MySQL为例详细介绍MySQL的体系结构,因为在实际生产环境中MySQL的运行环境都是linux系统。同时介绍MySQL的基础管理,包括用户管理和权限管理等。

MySQL体系结构

MySQL客户端/服务器工作模型

MySQL是C/S架构,工作模型大致如下图所示:

MySQL客户端连接MySQL服务端mysqld有两种方式:

第一种,通过本地socket文件连接,只能在本地使用,不依赖IP和端口

-- socket文件路径通过下述命令找到socket = /xx/mysql.sock
cat /etc/my.cnf-- 本地通过socket文件连接MySQL服务端:mysql -S socket文件路径
mysql -S /tmp/mysql.sock

第二种,远程TCP/IP连接,这种连接方式在本地和远程都可以使用,依赖IP和端口

-- mysql -u 用户名(默认就是root) -p -h ip地址 -P 端口
mysql -u root -p  -h 127.0.0.1 -P 3306 -- 建议回车后再输入密码

mysqld工作原理

mysqld是MySQL的服务端,也称为MySQL实例,这个实例包括mysqld的后台守护进程和工作线程,每个线程都负责不同的任务,另外还有预分配的内存结构,实例的功能就是管理数据。

mysqld的程序结构如下图所示:

mysqld分为server层(连接层+SQL层)和存储引擎层,server层中的连接层和SQL层并不是MySQL官方提出的分层,只是因为这样分层更加方便理解而已。

当客户端输入mysql -u root -p xxx -h ip地址-P 3306回车后,就会连接到server端的连接层,连接层共用三个作用,分别是:

①提供连接协议,tcp/ip协议;

②提供验证,验证客户端发送过来的用户名、密码、IP地址和端口信息是否正确;

③提供专用的连接线程,接收客户端发送过来的SQL语句并将SQL语句的执行结果返回给客户端;

ps:可以通过show processlist;查看连接线程的基本情况。

mysql> show processlist;
+----+------+-----------------+------+---------+------+-------+------------------+
| Id | User | Host            | db   | Command | Time | State | Info             |
+----+------+-----------------+------+---------+------+-------+------------------+
| 30 | root | localhost:63292 | NULL | Query   |    0 | init  | show processlist |
+----+------+-----------------+------+---------+------+-------+------------------+
1 row in set (0.00 sec)

连接mysqld成功之后,客户端会输入SQL语句后回车发送给服务端,由SQL层执行SQL语句,SQL层主要负责下述功能(功能较多):

①接收上层(连接层)发送的SQL语句;

②通过语法验证模块研恒SQL语句是否符合语法规则;

③进行语义检查,判断SQL语句的类型(DDL/DML/DCL);

④进行权限检查,判断当前用户对当前SQL语句的执行是否有权限进行操作;

⑤解析器在SQL语句执行前进行预处理,生成多种执行计划,就像出门去目的地的几种路线一样;

⑥优化器根据解析器得到的多种执行计划进行评估,选择最优的执行计划;

⑦执行器会根据优化器选择的执行计划执行SQL语句,产生执行结果;

⑧提供查询缓存(query cache),但是这个功能有点鸡肋,默认是没有开启的,因为在实际开发中,通常会使用redis代替查询缓存功能;

⑨提供日志记录,比如binlog(二进制日志),默认也是没有开启的。

存储引擎层是和磁盘进行交互的模块,根据SQL层执行的结果从磁盘上获取数据,将16进制的数据交给SQL结构化成表,再通过连接层的专用线程返回给客户端。

MySQL的物理存储结构

页(page):MySQL的最小IO单元是页,一个页默认是16kb,由连续的4个OS block块组成;

区(extent):一个区(簇),默认是1M,由连续的64pages构成。

段:一张表就是一个段,可以由1个或者多个区构成,不一定是连续的区。分区表除外(一个段拆成几个段,每个段还是由1个或者多个区构成)

MySQL使用段区页的概念就是为了连续IO,提高查询速度。

MySQL体系结构总结

根据上述mysqld的结构和MySQL物理存储结构可以总结出MySQL体系结构图如下:

MySQL基础管理

用户管理

用户的作用就是登录MySQL数据库并且管理MySQL对象,可以通过user表查看所有的用户。

用户到底长啥样呢?就长这个样子用户名@'白名单',白名单是地址,允许白名单的IP 登录MySQL并且管理MySQL。比如:

root@'localhost'  -- root用户可以通过本地登录MySQL(socket登录)
gui@'10.0.0.10'  -- gui用户能够在IP地址为10.0.0.10的主机远程登录MySQL
root@'10.0.0.%'  -- root用户能够在IP地址为某个网段的主机上远程登录MySQL
root@'%'  -- root用户能够在任意主机上登录MySQL

如何对用户进行管理呢?就是如何对用户进行增删改查呢,请看下述SQL语句:

-- 查看当前所有的MySQL用户
mysql> select user, host, password from mysql.user;
+--------+-----------+-------------------------------------------+
| user   | host      | password                                  |
+--------+-----------+-------------------------------------------+
| root   | localhost | *6AD24CD1D6D180895D5EF57D84E41A40094C85DB |
|        | localhost |                                           |
| xu1    | 10.0.0.%  | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| python | localhost |                                           |
| xu     | 10.0.0.%  | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
+--------+-----------+-------------------------------------------+
5 rows in set (0.00 sec)-- 新增用户
mysql>create user python@'localhost';   -- 增加用户时没有设置密码
Query OK, 0 rows affected (0.00 sec)mysql>create user xu@'10.0.0.%' identified by '123';  -- 创建xu@'10.0.0.%'用户,密码是123
Query OK, 0 rows affected (0.00 sec)mysql> select user, host, authentication_string from mysql.user;
+--------+-----------+-----------------------+
| user   | host      | authentication_string |
+--------+-----------+-----------------------+
| root   | localhost |                       |
|        | localhost | NULL                  |
| python | localhost |                       |
| xu     | 10.0.0.%  |                       |
+--------+-----------+-----------------------+
4 rows in set (0.00 sec)-- 对用户信息进行修改,在5.7版本中可以正常使用
mysql>alter user xu@'10.0.0.%' identified by '456'; --xu@'10.0.0.%'用户修改密码
Query OK, 0 rows affected (0.00 sec)-- 删除用户
mysql> drop user xu@'10.0.0.%';
Query OK, 0 rows affected (0.00 sec)

权限管理

MySQL的用户和计算机的用户是类似的,不同的用户有不同的权限,MySQL中的权限管理就是管理用户对数据库的操作有哪些权限,用户权限的管理请看下述SQL:

-- 查看所有权限
mysql> show privileges\G;

对用户进行授权,需要通过grant语句。这里需要注意的是,在8.0版本之前,创建用户并赋予权限可以使用一条grant语句完成,但是在8.0版本及之后,都需要创建用户之后再对用户进行授权。推荐使用先创建用户再授权

-- grant 权限 on 数据库对象 to 用户 (identified by '密码');
-- 权限的种类:
all:所有权限
权限1,权限2...:为开发人员和业务用户开通的部分权限
with grant option:超级管理员,可以为其他用户授权 ---- 权限作用范围:
*.*:所有数据库的所有权限
库名.*:某个数据库下的所有表
库名.表名:某个数据库下的某张表 ---- 授权举例
create user python@'%' identified by '123';
create user java@'%' identified by '123';-- 为python@'%'用户授予超级管理员权限,可以操作所有的表并且可以为其他用户授权
grant all on *.* to python@'%' with grant option;  -- 为java@'%'用户授予app库下的所有表的增删改查的权限并修改密码
grant select, update, insert, delete, create on app.* to java@'%' identified by '456';

既然能够为用户授予权限就能回收用户的权限,MySQL中不能通过重复授权对用户进行修改权限,只能通过回收权限的方式对用户的权限进行修改,如下:

-- 将java@'%'用户的create权限进行回收
grant select ,update,insert,delete on app.* to app@'10.0.0.%';  -- ❌,用户的权限并未修改
revoke create(权限) on app.*(对象) from app@'10.0.0.%'(用户);  -- ✔️,用户的权限修改成功,回收了用户的create权限

连接管理

使用MySQL自带客户端连接MySQL服务端时,有以下常用的参数:

-u 用户名
-p 密码
-s 本地socket文件位置
-h 数据库IP地址
-P 端口号
-e 免交互执行数据库命令
< 导入sql脚本

使用本地socket文件连接:

-- 使用root用户登录时下述连接方式任选
mysql -u root -p 123 -S /tmp/mysql.sock(my.cnf中可以查看mysql.sock文件的位置)
mysql -u root -p -S /tmp/mysql.sock ---- 推荐方式
mysql 
mysql -p

使用tcp/ip远程连接,前提是必须创建好可以远程连接的用户:

mysql -u python -p 123 -h 112.126.87.94 -P 3306

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_998974.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物联网,智慧城市的数字化转型引擎

随着科技的飞速发展&#xff0c;物联网&#xff08;IoT&#xff09;已成为推动智慧城市建设的关键力量。物联网技术通过连接各种设备和系统&#xff0c;实现数据的实时采集、传输和处理&#xff0c;为城市的智能化管理提供了强大的支持。在数字化转型的浪潮中&#xff0c;物联网…

VUE_nuxt启动只能通过localhost访问,ip访问不到:问题解决

修改项目根目录下的 package.json "config": {"nuxt": {"host": "0.0.0.0","port": "3000"} } 这样项目启动后就可以通过ip进行访问了

AutoDev 自定义 Agent:快速接入内部 AI Agent,构建 IDE 即 AI 辅助研发中心

在开源 AI IDE 插件 AutoDev 的 #51 issue 中&#xff0c;我们设计了 AutoDev 的 AI Agent 能力&#xff0c;半年后我们终于交付了这个功能。 在 AutoDev 1.7.0 中&#xff0c;你将可以接入内部的 AI Agent&#xff0c;并将其无缝与现有的 AI 辅助能力结合在一起。 本文将使用 …

使用awk和正则表达式过滤文本或字符串 - 详细指南和示例

当我们在 Linux 中运行某些命令来读取或编辑字符串或文件中的文本时&#xff0c;我们经常尝试将输出过滤到感兴趣的特定部分。这就是使用正则表达式派上用场的地方。 什么是正则表达式&#xff1f; 正则表达式可以定义为表示多个字符序列的字符串。关于正则表达式最重要的事情之…

【C++ STL详解】——string类

目录 前言 一、string类对象的常见构造 二、string类对象的访问及遍历 1.下标【】&#xff08;底层operator【】函数&#xff09; ​编辑 2.迭代器 3.范围for 4.at 5.back和front 三、string类对象的容量操作 1.size 和 length 2.capacity 3.empty 4.clear 5.res…

Python编程实验六:面向对象应用

目录 一、实验目的与要求 二、实验内容 三、主要程序清单和程序运行结果 第1题 第2题 四、实验结果分析与体会 一、实验目的与要求 &#xff08;1&#xff09;通过本次实验&#xff0c;学生应掌握类的定义与对象的创建、类的继承与方法的覆盖&#xff1b; &#xff08;2…

接收端编程、UDP编程练习、wireshrak抓包工具、UDP包头

我要成为嵌入式高手之3月6日Linux高编第十六天&#xff01;&#xff01; ———————————————————————————— 学习笔记 接收端 recvfrom #include <sys/types.h> #include <sys/socket.h> ssize_t recvfrom(int sockfd, void *buf, si…

一文学会搭建 cli 脚手架工具

文章目录 设置工具命令package.json bin 字段注释&#xff1a;#!/usr/bin/env node设置环境变量 接收命令选项参数process 实现commander 命令行交互&#xff1a;inquirer下载项目模板&#xff1a;download-git-repo执行额外命令&#xff1a;自动安装依赖child_processexeca 体…

Mybatis-Plus——05,乐观锁(新注解)

乐观锁&#xff08;新注解&#xff09; 一、数据库添加一个字段二、实体类添加version注解三、注册乐观锁插件四、测试一下4.1成功的乐观锁4.2失败的乐观锁————————创作不易&#xff0c;笔记不易&#xff0c;如觉不错&#xff0c;请三连&#xff0c;谢谢~~ 乐观锁实现方…

Flask python开发篇: 写一个简单的接口

第一步&#xff1a;新建flask项目 参考使用pycharm新建一个项目 打开pycharm&#xff0c;根据下面图中箭头顺序&#xff0c;新建一个flask的项目&#xff1b; 第二步&#xff1a;运行项目&#xff0c; 安装成功以后&#xff0c;会有个app.py文件&#xff0c;打开以后&#…

Kali Linux 2024.1

Kali Linux 2024.1刚刚发布&#xff0c;标志着这个备受欢迎的安全重点Linux发行版在今年的首次重大更新。以其先进的渗透测试和安全审计功能而闻名&#xff0c;它是安全专业人员和爱好者的首选工具。 Kali 2024.1 亮点 本次发布由 Linux 内核 6.6 提供支持&#xff0c;突出了…

借着ChatGPT的人机交互聊聊长连接

ChatGPT这两年可谓风靡全球&#xff0c;尤其是最近Sora视频模型的横空出世以及claude 3模型所具备的浅意识&#xff0c;更是像打开了新世界的大门。本文就从ChatGPT的网页聊天开始聊起&#xff08;有蹭热度之嫌&#xff0c;哈哈&#xff09;&#xff0c;聊聊长连接的发展历程和…

148个Chatgpt关键词汇总-有爱AI实战教程(二)

演示站点&#xff1a; https://ai.uaai.cn 技能模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 导读&#xff1a;在使用 ChatGPT 时&#xff0c;当你给的指令越精确&#xff0c;它的回答会越到位&#xff0c;举例来说&#xff0c;假如你要请它帮忙写文案&#xff0c;如…

来说说看到的求职路上可以提高的地方——简历

要进行求职的时候应该遇到的第一件事情就是简历。 随着看到的简历越来越多&#xff0c;也发现了一些问题&#xff0c;来开个帖子来说说这些问题。 格式 让参加面试的人最头疼的地方就是简历格式没有空格。 最近发现好多人的简历格式上都不空格&#xff0c;很多内容完全都在…

IntelliJ IDEA自定义关闭当前文件的快捷方式

前言 idea中关闭当前标签页的默认快捷键是CtrlF4,这个组合键在键盘上操作起来很是不方便&#xff0c;我们可以在设置中自定义自己习惯的快捷方式。 自定义步骤 要在 IntelliJ IDEA 中将关闭当前文件的快捷方式设置为 Alt Q&#xff0c;请按照以下步骤操作&#xff1a;打开 …

Android应用界面

概述&#xff1a;由于学校原因&#xff0c;估计会考&#xff0c;曹某人就浅学一下。 目录 View概念 创建和使用布局文件 相对布局 线性布局 水平线性布局 垂直线性布局 表格布局 帧布局 扁平化布局 Android控件详解 AdapterView及其子类 View概念 安卓中的View是所…

Qt初识 - 编写Hello World的两种方式 | 对象树

目录 一、通过图形化方式&#xff0c;在界面上创建出一个控件 二、通过代码方式&#xff0c;创建Hello World 三、Qt 内存泄漏问题 (一) 对象树 一、通过图形化方式&#xff0c;在界面上创建出一个控件 创建项目后&#xff0c;打开双击forms文件夹中的ui文件&#xff0c;可…

Mysql8的优化(DBA)

Mysql8的优化 1、Mysql的安装优化1.1 修改配置参数&#xff08;命令行、配件文件&#xff09;1.1.1 命令行修改配置参数1.1.2 参数持久化1.1.3 Mysql多实例启动&#xff0c;以及配置密码文件 1.2 查询表的相关参数&#xff0c;以及表空间管理 2、Mysql高级优化&#xff08;SQL&…

CNC机加工引入复合机器人可以提高生产效率,降低成本

CNC加工企业在过去依赖大量的人工来完成生产线上的各项任务&#xff0c;包括CNC机床的上下料、物料搬运以及部分装配工作。然而&#xff0c;随着产能需求的不断增长和人工成本的持续上升&#xff0c;企业逐渐意识到自动化升级的重要性与迫切性。 面临的挑战与需求&#xff1a; …

【DUSt3R】2张图2秒钟3D重建

【DUSt3R】2张图2秒钟3D重建 1. DUSt3R是一种用于稠密和无约束立体三维重建的方法,其实现步骤如下:2. 实际运行效果3. 运行结果4. 自问自答4.1 为社么这里要是使用transform模型呢?4.2 CroCo(通过跨视图完成3D视觉任务的自我监督预训练的一个研究)在DUSt3R的作用是什么,为…