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

news/2024/7/27 7:56:44/文章来源:https://blog.csdn.net/weixin_50902636/article/details/135577781

文章目录

  • 前言
  • 一、体系结构
    • 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.luyixian.cn/news_show_926127.aspx

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

相关文章

CMU15-445-Spring-2023-Project #3 - Query Execution

前置知识&#xff0c;参考上一篇博客&#xff1a;CMU15-445-Spring-2023-Project #3 - 前置知识&#xff08;lec10-14 Parser&#xff1a;将SQL query转变为ASTBinder&#xff1a;将查询语句与数据库元数据进行绑定&#xff0c;验证查询的正确性和有效性Planner&#xff1a;为…

2024年美赛数学建模思路 - 案例:FPTree-频繁模式树算法

文章目录 算法介绍FP树表示法构建FP树实现代码 建模资料 ## 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模式树算法&#xff0c…

每日一练:LeeCode-144、145、94.二叉树的前中后序遍历【二叉树】

本文是力扣LeeCode-144、145、94.二叉树的前中后序遍历 学习与理解过程&#xff0c;本文仅做学习之用&#xff0c;对本题感兴趣的小伙伴可以出门左拐LeeCode前序遍历、中序遍历、后序遍历。 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序遍历。 给定一个二叉树的根…

scrapy爬虫实战

scrapy爬虫实战 Scrapy 简介主要特性示例代码 安装scrapy&#xff0c;并创建项目运行单个脚本代码示例配置itemsetting 爬虫脚本 代码解析xpath基本语法&#xff1a;路径表达式示例&#xff1a;通配符和多路径&#xff1a;函数&#xff1a;示例&#xff1a; 批量运行附录1&…

从“精益思想“看机器人的开发与应用:一场科技与效率的完美融合

在科技飞速发展的今天&#xff0c;机器人已经深入到我们的生活和工作之中&#xff0c;成为了提高效率、提升质量的重要工具。然而&#xff0c;如何让机器人的开发和利用更有效率、更精细&#xff0c;这是摆在我们面前的一道难题。此时&#xff0c;"精益思想"的出现&a…

OpenCV C++ 图像处理实战 ——《多尺度自适应Gamma矫正的低照图像增强》

OpenCV C++ 图像处理实战 ——《多尺度自适应Gamma矫正的低照图像增强》 一、结果演示二、多尺度自适应Gamma矫正的低照度图像增强2.1HSI颜色空间2.1.1 功能源码2.2 自适应于直方图分布的 Gamma 矫正2.2.1 功能源码2.3 多尺度 Retinex 分解与明度增强2.3.1 功能源码三、源码测试…

统计学-R语言-3

文章目录 前言给直方图增加正态曲线的不恰当之处直方图与条形图的区别核密度图时间序列图洛伦茨曲线计算绘制洛伦茨曲线所需的各百分比数值绘制洛伦茨曲线 练习 前言 本篇文章是介绍对数据的部分图形可视化的图型展现。 给直方图增加正态曲线的不恰当之处 需要注意的是&#…

【生存技能】git操作

先下载git https://git-scm.com/downloads 我这里是win64&#xff0c;下载了相应的直接安装版本 64-bit Git for Windows Setup 打开git bash 设置用户名和邮箱 查看设置的配置信息 获取本地仓库 在git bash或powershell执行git init&#xff0c;初始化当前目录成为git仓库…

力扣labuladong一刷day61天动态规划最小下降路径

力扣labuladong一刷day61天动态规划最优子结构 一、931. 下降路径最小和 题目链接&#xff1a;https://leetcode.cn/problems/minimum-falling-path-sum/description/ 如下图所示&#xff0c;求最小下降路径&#xff0c;定义dp[i][j]表示从最上面那行的任意位置抵达到nums[i]…

Redis分布式锁--java实现

文章目录 Redis分布式锁方案&#xff1a;SETNX EXPIRE基本原理比较好的实现会产生四个问题 几种解决原子性的方案方案&#xff1a;SETNX value值是&#xff08;系统时间过期时间&#xff09;方案&#xff1a;使用Lua脚本(包含SETNX EXPIRE两条指令)方案&#xff1a;SET的扩展…

springcloud Alibaba中gateway和sentinel联合使用

看到这个文章相信你有一定的sentinel和gateway基础了吧。 官网的gateway和sentinel联合使用有些过时了&#xff0c;于是有了这个哈哈&#xff0c;给你看看官网的&#xff1a; 才sentinel1.6&#xff0c;现在都几了啊&#xff0c;所以有些过时。 下面开始讲解&#xff1a; 首先…

【Linux】自定义shell

👑作者主页:@安 度 因 🏠学习社区:安度因 📖专栏链接:Linux 文章目录 获取命令行前置字段命令行输入解析命令行普通指令的执行子进程执行命令指令类型判断 && 内建命令总结 &&a

【Maven】007-Maven 工程的继承和聚合关系

【Maven】007-Maven 工程的继承和聚合关系 文章目录 【Maven】007-Maven 工程的继承和聚合关系一、Maven 工程的继承关系1、继承的概念2、继承的作用3、继承的语法4、父工程统一管理依赖版本父工程声明依赖版本子工程继承以来版本 二、Maven 工程的聚合关系1、聚合的概念2、聚合…

VitePress-01-从零开始的项目创建(npm版)

说明 本文介绍一下 VitePress的项目创建的步骤。 主要用到的命令工具是 npm。 本文的操作步骤是从无到有的创建一个完整的基本的【VitePress】项目。 环境准备 根据官方文档的介绍&#xff0c;截止本文发稿时&#xff0c;需要使用node.js 18 的版本。 可以使用node -v 的命令查…

【MySQL】MySQL表的约束-空属性/默认值/列属性/zerofill/主键/自增长/唯一键/外键

文章目录 表的约束1.空属性 --null && not null2.默认值 -- default3.列描述4.zerofill5.主键6.自增长7.唯一键8.外键 表的约束 表的约束&#xff1a;表中一定要有各种约束&#xff0c;通过约束&#xff0c;让我们未来插入数据库表中的数据是符合预期的。约束的本质是…

【GCC】6 接收端实现:周期构造RTCP反馈包

基于m98代码。GCC涉及的代码,可能位于:webrtc/modules/remote_bitrate_estimator webrtc/modules/congestion_controller webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.cc webrtc 之 RemoteEstimatorProxy 对 remote_bitrate_estimator 的 RemoteEstimato…

Spark与HBase的集成与数据访问

Apache Spark和Apache HBase分别是大数据处理和分布式NoSQL数据库领域的两个重要工具。在本文中&#xff0c;将深入探讨如何在Spark中集成HBase&#xff0c;并演示如何通过Spark访问和操作HBase中的数据。将提供丰富的示例代码&#xff0c;以便更好地理解这一集成过程。 Spark…

【EI会议征稿通知】第四届图像处理与智能控制国际学术会议(IPIC 2024)

第四届图像处理与智能控制国际学术会议&#xff08;IPIC 2024&#xff09; 2024 4th International Conference on Image Processing and Intelligent Control 2024年第四届图像处理与智能控制国际学术会议&#xff08;IPIC 2024&#xff09;将于2024年5月3日-5日在吉隆坡举…

【Jmeter之get请求传递的值为JSON体实践】

Jmeter之get请求传递的值为JSON体实践 get请求的常见传参方式 1、在URL地址后面拼接&#xff0c;有多个key和value时&#xff0c;用&链接 2、在Parameters里面加上key和value 第一次遇到value的值不是字符串也不是整型&#xff0c;我尝试把json放到value里面&#xff0…

C练习——杨辉三角

题目&#xff1a; 打印近似杨辉三角&#xff0c;行数n自选 百度找的杨辉三角&#xff0c;参考一下&#xff1a; 解析&#xff1a; 把它的全部元素左对齐&#xff0c;就可以看成近似杨辉三角的样子 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 …… 每个数等于它上方两数…