mysql从入门到放弃之数据库体系结构与管理

文章目录

  • 前言
  • 一、体系结构
    • 1、mysql c/s结构介绍
    • 2、mysql实例组成
    • 3、mysqld程序运行原理
      • 3.1、mysqld守护进程结构
      • 3.2、 引入sql语句结构化的查询语言
      • 3.3、探索一条SQL语句的执行过程
  • 二、mysql逻辑存储结构
  • 三、mysql物理存储结构
      • 3.1、innodb存储引擎的段、区、页之间的关系
  • 四、mysql基础管理
      • 4.1、用户管理
      • 4.2、权限管理
      • 4.3、连接管理
  • 五、mysql多实例管理


前言

第一篇文章中主要学习了mysql二进制的基本安装及数据库初始化等操作,本篇文章主要了解mysql的体系结构和管理,例如: mysql的实例组成、逻辑存储结构、物理存储结构等方面展开学习


提示:以下是本篇文章正文内容,下面案例可供参考

一、体系结构

1、mysql c/s结构介绍

在这里插入图片描述

从上图可知,mysql有两种连接方法第一种:TCP/IP : mysql -uroot -p -h IP地址 -P 端口第二种: 如果你看了我第一篇文章,就大概了解了socket连接方法的配置Socket:  mysql -uroot -p -S /data/mysql3306/data/run/mysql.sock

2、mysql实例组成

	mysqld守护进程 + master thread + 干活的thread + 预分配内存

3、mysqld程序运行原理

3.1、mysqld守护进程结构

mysqld守护进程结构

3.2、 引入sql语句结构化的查询语言

     DQL  数据查询语言DDL  数据定义语言DML  数据操作语言DCL  数据控制语言

3.3、探索一条SQL语句的执行过程

名称作用
应用程序层通过TCP/IP或者socket连接数据库
连接层1、提供连接协议TCP/IP或者socket 2、验证用户名、密码、端口、地址合法性 3、开启专用连接线程,show processlist可以查看到线程(接受sql语句、返回执行结构) 4、将语句交给下一层
SQL层1、接受sql语句 2、语法检查和sql_mode 3、语义检查(属于哪种查询语言)、权限检查 4、解析语句,生成多种执行计划树 5、通过优化器算法进行评估(cpu、io、内存、执行时间) 6、优化器选择最优的执行方法 7、语句执行器,真正执行sql语句 8、提供查询缓存(默认不开启) 9、日志记录(默认未开启)审计日志、通用日志、binlog日志
存储引擎层磁盘、内存、网络,1、根据sql执行结果,去磁盘上找对应的数据。找到磁盘上16进制的数据,再次返回到sql层,结构化成表的方式,再由连接层线程展现处理

二、mysql逻辑存储结构

在这里插入图片描述

--->                类似 linux目录表         --->                类似 linux文件       列(字段)行(记录)表属性 (元数据)列属性

三、mysql物理存储结构

在这里插入图片描述

库  使用文件系统的目录来表示  (在数据库的数据目录下创建一个目录,然后可以再数据库中使用show databases查到)即数据目录下的目录名就是库名,如下图所示
表InnoDB (默认存储引擎)time_zone.frm  存储的表结构time_zone.ibd  存储的数据记录和索引ibdata1        数据字典信息MyISAMuser.frm  存储的表结构(列、列属性)user.MYD  存储的数据记录user.MYI  存储索引
如下图所示

在这里插入图片描述

在这里插入图片描述

3.1、innodb存储引擎的段、区、页之间的关系

页:最小的存储单元,默认16k
区:64个连续的页,共1M
段:一个表就是一个段,包含一个或多个区一般情况下(非分区表)一个表就是一个段、一个段由多个区构成、一个区再由(16k)* 64个连续的页 总计1M大小

四、mysql基础管理

4.1、用户管理

用户的作用?登录mysql、管理mysql对象(库表)
用户的定义用户名@'白名单'
例如:mysql> select user,host from mysql.user;+---------------+-----------+| user          | host      |+---------------+-----------+| test          | %         || mysql.session | localhost || mysql.sys     | localhost || root          | localhost |+---------------+-----------+
用户的操作mysql> create user test@'192.168.0.%' identified by '123';  创建用户并设置密码mysql> select user,host from mysql.user;                   查看用户mysql> grant all on *.* to test@'%' identified by '123';    创建用户并授权、设置密码(仅限于mysql8.0之前的版本)mysql> alter user test@'%' identified by '123';             修改用户密码mysql> drop  user test@'%';                                 删除用户

4.2、权限管理

所有权限都有哪些?SELECT,INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE
授权命令with grant option:超级管理员才具备的,给别的用户授权的功能grant 权限 on 作用目标 to 用户@'白名单' identified by '密码' with grant option;  作用目标示例:*.*         所有库、所有表test.*      test库下的所有表test.user   test库下的user表授权示例:创建一个管理员用户root,可以通过10网段管理数据库grant all on *.* to root@'10.0.0.%' identified by '123';创建一个应用用户test,可以通过10网段,对test库下的所有表进行增删改查grant select,insert,update,delete on test.* to test@'10.0.0.%' identified by '123';
权限回收:mysql> show grants for test@'10.0.0.%';  查询用户权限+-----------------------------------------------------------------------+| Grants for test@10.0.0.%                                              |+-----------------------------------------------------------------------+| GRANT USAGE ON *.* TO 'test'@'10.0.0.%'                               || GRANT SELECT, INSERT, UPDATE, DELETE ON `test`.* TO 'test'@'10.0.0.%' |+-----------------------------------------------------------------------+mysql> revoke delete on 库名.表名 from 用户名@'白名单'; 权限回收

4.3、连接管理

连接数据库参数-u  用户名-p  密码-S  指定socket文件-h  指定连接主机-P  指定端口-e  执行的sql语句(不进入数据库就可执行)<   导入sql文件
mysql内置命令mysql> help?         (\?) Synonym for `help'.clear     (\c) Clear the current input statement.                                      结束上个命令的运行connect   (\r) Reconnect to the server. Optional arguments are db and host.delimiter (\d) Set statement delimiter.edit      (\e) Edit command with $EDITOR.ego       (\G) Send command to mysql server, display result vertically.                格式化输出sql结果exit      (\q) Exit mysql. Same as quit.                                               退出mysqlgo        (\g) Send command to mysql server.help      (\h) Display this help.nopager   (\n) Disable pager, print to stdout.notee     (\t) Don't write into outfile.pager     (\P) Set PAGER [to_pager]. Print the query results via PAGER.print     (\p) Print current command.prompt    (\R) Change your mysql prompt.quit      (\q) Quit mysql.                                                             退出mysqlrehash    (\#) Rebuild completion hash.source    (\.) Execute an SQL script file. Takes a file name as an argument.           在mysql内执行sql导入status    (\s) Get status information from the server.system    (\!) Execute a system shell command.                                         在mysql内使用shell命令tee       (\T) Set outfile [to_outfile]. Append everything into given outfile.use       (\u) Use another database. Takes database name as argument.charset   (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.warnings  (\W) Show warnings after every statement.nowarning (\w) Don't show warnings after every statement.resetconnection(\x) Clean session context.
远程连接登录与本地连接登录区别:mysql> show processlist;+----+------+---------------+------+---------+------+----------+------------------+| Id | User | Host          | db   | Command | Time | State    | Info             |+----+------+---------------+------+---------+------+----------+------------------+|  2 | root | localhost     | NULL | Sleep   |   53 |          | NULL             ||  4 | test | python1:51148 | NULL | Query   |    0 | starting | show processlist |+----+------+---------------+------+---------+------+----------+------------------+经过对比可以发现Host列中不一样,如果是远程,则是主机名:端口,本地则是localhost

五、mysql多实例管理

1、创建3307目录mkdir -p /application/mysql3307/datamkdir -p /data/mysql3307/{data,log,binlog}
2、授权chown -R mysql.mysql /application/mysql3307chown -R mysql.mysql /data/mysql3307
3、先停止3306数据库并拷贝安装文件、启动文件systemctl stop mysql_3306cp -rp /application/mysql3306/* /application/mysql3307/cp -rp /etc/systemd/system/mysql_3306.service /etc/systemd/system/mysql_3307.service
4、先移走3307目录下的my.cnf文件mv /application/mysql3307/my.cnf /application/mysql3307/my.cnf.bak
5、修改3307的启动文件vim /etc/systemd/system/mysql_3307.service[Unit]Description=Mysql serverAfter=syslog.targetAfter=network.target[Service]User=mysqlGroup=mysqlLimitNOFILE=102400ExecStart=/application/mysql3307/bin/mysqld --defaults-file=/application/mysql3307/my.cnf[Install]WantedBy=multi-user.target
6、初始化3307数据库/application/mysql3307/bin/mysqld --initialize-insecure --user=mysql --basedir=/application/mysql3307 --datadir=/data/mysql3307/data
7、再将my.cnf文件移动到原来位置mv /application/mysql3307/my.cnf.bak /application/mysql3307/my.cnf
8、修改3307数据库的my.cnf[mysqld]user=mysqlbasedir=/application/mysql3307datadir=/data/mysql3307/datasocket=/data/mysql3307/run/mysql.sockserver_id=7port=3307log_error_verbosity         = 3log_error                   = /data/mysql3307/log/mysqld-err.loglog_timestamps              = SYSTEMlog-bin                     = /data/mysql3307/binlog/mysql-bin[mysql]socket=/data/mysql3307/run/mysql.sock
9、启动3306、3307数据库,给3307库创建管理员账户,并执行检查命令启动systemctl restart mysql_3306systemctl restart mysql_3307创建管理员[root@python1 ~]# mysqladmin -uroot -p password 123 -S /data/mysql3307/run/mysql.sock检查[root@python1 ~]# mysql -S /data/mysql3306/run/mysql.sock -e "select @@server_id" -uroot -p123[root@python1 ~]# mysql -S /data/mysql3307/run/mysql.sock -e "select @@server_id"[root@python1 log]# mysql -S /data/mysql3306/run/mysql.sock -e "select @@server_id" -uroot -p123+-------------+| @@server_id |+-------------+|           6 |+-------------+[root@python1 log]# mysql -S /data/mysql3307/run/mysql.sock -e "select @@server_id"+-------------+| @@server_id |+-------------+|           7 |+-------------+检查端口如下所示ss -lntp | grep 330

在这里插入图片描述


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

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

相关文章

html5基础入门

html5基础语法与标签 前言前端开发零基础入门介绍前端开发行业介绍&#xff1a;大前端时代&#xff1a;前端开发主要技术介绍学习方法IDE简介vscode快捷键&#xff1a; 总结 HTML语法与基础标签互联网基本原理HTTP协议&#xff08;请求、响应&#xff09;什么是前端、后端&…

openssl3.2 - 官方demo学习 - cms - cms_ver.c

文章目录 openssl3.2 - 官方demo学习 - cms - cms_ver.c概述运行结果笔记END openssl3.2 - 官方demo学习 - cms - cms_ver.c 概述 CMS验签, 将单独签名和联合签名出来的签名文件都试试. 验签成功后, 将签名数据明文写入了文件供查看. 也就是说, 只有验签成功后, 才能看到签名…

PyTorch损失函数

一、损失函数是什么 损失函数&#xff1a;衡量模型输出与真实标签的差异 class _Loss(Module):def __init__(self, size_averageNone, reduceNone, reductionmean):"""Loss函数的基类&#xff0c;定义了一些通用的属性和方法。参数&#xff1a;- size_average…

vmware和ubuntu镜像下载地址

这里有vmware16和ubuntu20.0下载 链接&#xff1a;https://pan.baidu.com/s/1i9IC-KnJlrVDbl6SJ5SIKQ?pwdy2dd 提取码&#xff1a;y2dd 链接&#xff1a;https://pan.baidu.com/s/1imqJVD2dLE1TB6jIrq1-Fg?pwd690f 提取码&#xff1a;690f 这个是我本人下的vmware17 密钥可…

解决命令行无法启动scrapy爬虫

前言 最近在准备毕设项目&#xff0c;想使用scrapy架构来进行爬虫&#xff0c;找了一个之前写过的样例&#xff0c;没想到在用普通的启动命令时报错。报错如下 无法将“scrapy”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径…

增删改查管理系统 总结1

//提醒&#xff1a; 管理员也要有增删改查 新增员工代码完善2可能需要用到 目录 细节1 pom文件出现奇怪页面&#xff1f; 细节2 如何联系DataGrip与idea&#xff1f; 细节3 Yapi?接口文档&#xff1f;如何有以下画面&#xff1f; ​细节4 如何将时间转化为好看的时间&…

Android 13.0 SystemUI下拉状态栏定制二 锁屏页面横竖屏时钟都居中功能实现一

1.前言 在13.0的系统rom定制化开发中,在关于systemui的锁屏页面功能定制中,由于在平板横屏锁屏功能中,时钟显示的很大,并且是在左旁边居中显示的, 由于需要和竖屏显示一样,所以就需要用到小时钟显示,然后同样需要居中,所以就来分析下相关的源码,来实现具体的功能 2.S…

Android Studio 虚拟机 Unknown Error 解决

前言 尝试了网上很多解决方式&#xff0c;但很遗憾&#xff0c;都没效果&#xff1b; 于是我就想啊&#x1f914;&#xff0c;虚拟机属于SDK的一部分&#xff0c;那有没有一种可能&#xff0c;是SDK出了问题&#xff1b; 于是我就换了新的SDK&#xff0c;结果 ---- 完美解决…

网络安全技术新手入门:利用永恒之蓝获取靶机控制权限

目录 前言 一、搜索永恒之蓝可用模块 二、使用攻击模块 三、配置攻击模块 四、攻击 五、总结 前言 相关法律声明&#xff1a;《中华人民共和国网络安全法》第二十七条 任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动&…

RibbonGroup添加QAction

实际项目中&#xff0c;group中需要添加按钮与点击事件&#xff1a; 添加实例如下&#xff1a; if (Qtitan::RibbonGroup* groupClipboard pageHome->addGroup(tr("Clipboard"))) { //右下角按钮显示 groupClipboard->setO…

IP-Adapter:用于文本到图像扩散模型的文本兼容图像提示适配器

文章目录 一、IP-Adapter简介二、IP-Adapter与img2img的区分&#xff08;一&#xff09;结构上的区别&#xff08;二&#xff09;流程上的区别&#xff08;三&#xff09;输出上的区别&#xff08;四&#xff09;原理上的区别 三、IP-Adapter的网络架构&#xff08;一&#xff…

基于Go框架,Cloudreve个人免费开源网盘系统源码,支持云存储(七牛、阿里云OSS、腾讯云COS、又拍云、OneDrive)

源码介绍 在数字化时代&#xff0c;我们经常需要存储、分享大量的文件&#xff0c;如照片、视频、文档等。然而&#xff0c;许多商业网盘服务却存在限速、收费等问题&#xff0c;给用户带来诸多不便。现在&#xff0c;我们为您推荐一款免费开源的网盘系统——Cloudreve。 Clo…

PostgreSQL认证考试PGCA、PGCE、PGCM

PostgreSQL认证考试PGCA、PGCE、PGCM 【重点&#xff01;重点&#xff01;重点&#xff01;】PGCA、PGCE、PGCM 直通车快速下正&#xff0c;省心省力&#xff0c;每2个月一次考试 PGCE考试通知 &#xff08;2024&#xff09; 一、考试概览 &#xff08;一&#xff09; 报名要…

远程开发之vacode插件Remote - SSH

远程开发之vacode插件Remote - SSH vscode插件(Remote - SSH)ssh config自定义配置跳板机ssh-agent配置(使ForwardAgent配置生效, 免密拉代码)拷贝公钥到服务器(实现免密登录服务器) 通过vscode的Remote - SSH插件, 实现远程服务器进行像本地操作一样使用远程服务器, 亦可进行像…

YZ虚拟资源下载源码-支持对接公众号-对接支付

这款系统内置的模板是电脑系统下载站的类型&#xff0c;当然你也可以用作其他类型&#xff0c;例如软件下载&#xff0c;其他类型的资源下载&#xff0c;知识付费下载等&#xff0c;改下文字内容即可。 支持商城系统&#xff0c;后台可配置支付。青狐修改增加了很多可用性。 …

【计算机网络】内容整理

概述 分组交换 分组交换则采用存储转发&#xff08;整个包必须到达路由器&#xff0c;然后才能在下一个链路上传输)技术。 在发送端&#xff0c;先把较长的报文划分成较短的、固定长度的数据段。 电路交换 在端系统间通信会话期间&#xff0c;预留了端系统间沿路径通信所需…

在Docker上配置TensorFlow

在Docker上配置TensorFlow 配置WSL 参考教程&#xff1a;https://blog.csdn.net/m0_63969219/article/details/124632640 在上述教程配置的过程中&#xff0c;可能很难在微软商店下到ubuntu&#xff0c;下面给出另外一种解决方案&#xff1a; 接着上面教程 wsl --set-defaul…

跟着cherno手搓游戏引擎【5】layer(层)、Glad

编写基类层&#xff1a; Layer.h:提供Attach链接、Detach解绑、Update刷新、Event事件、GetName方法 #pragma once #include"YOTO/Core.h" #include"YOTO/Event/Event.h" namespace YOTO {class YOTO_API Layer{public:Layer(const std::string& nam…

微机原理常考填空总结

hello大家好我是吃个西瓜嘤&#xff0c;这篇节只总结微机原理常考填空题都是干货展示常出现的易错点以及微机原理注意事项。 以下仅代表个人发言 #微机原理 正文开始&#xff1a; 1&#xff0c;区分JZ&#xff0c;JNZ技巧 也就是D70用JZ&#xff1b;D71用JNZ。 JZ;条件ZF1时…

【河海大学论文LaTeX+VSCode全指南】

河海大学论文LaTeXVSCode全指南 前言一、 LaTeX \LaTeX{} LATE​X的安装二、VScode的安装三、VScode的配置四、验证五、优化 前言 LaTeX \LaTeX{} LATE​X在论文写作方面具有传统Word无法比拟的优点&#xff0c;VScode作为一个轻量化的全功能文本编辑器&#xff0c;由于其极强的…