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        数据字典信息
    MyISAM
       user.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.                                               退出mysql
                  go        (\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.                                                             退出mysql
                  rehash    (\#) 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/data
            mkdir -p /data/mysql3307/{data,log,binlog}
2、授权
            chown -R mysql.mysql /application/mysql3307
            chown -R mysql.mysql /data/mysql3307
3、先停止3306数据库并拷贝安装文件、启动文件
            systemctl stop mysql_3306
            cp -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 server
			After=syslog.target
			After=network.target
			
			[Service]
			User=mysql
			Group=mysql
			LimitNOFILE=102400
			ExecStart=/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=mysql
            basedir=/application/mysql3307
            datadir=/data/mysql3307/data
            socket=/data/mysql3307/run/mysql.sock
            server_id=7
            port=3307
            log_error_verbosity         = 3
            log_error                   = /data/mysql3307/log/mysqld-err.log
            log_timestamps              = SYSTEM
            log-bin                     = /data/mysql3307/binlog/mysql-bin
            [mysql]
            socket=/data/mysql3307/run/mysql.sock
9、启动3306、3307数据库,给3307库创建管理员账户,并执行检查命令
            启动
                  systemctl restart mysql_3306
                  systemctl 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

在这里插入图片描述


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

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

相关文章

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

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

C++学习笔记(十九)

一、vector容器 1. vector基本概念 功能&#xff1a;vector数据结构和数组非常相似&#xff0c;也称为单端数组 vector与普通数组区别&#xff1a;不同之处在于数组是静态空间&#xff0c;而vector可以动态扩展 动态扩展&#xff1a;并不是在原空间之后续接新空间&#xff…

VMware 安装及创建一个 CentOS Stream 的详细指南

文章目录 1. 简介2. 下载和安装1&#xff09;通过官网安装2&#xff09;通过电脑管家安装 3. 下载操作系统镜像包4. 创建虚拟机结语 1. 简介 在过去&#xff0c;服务器通常是运行单一操作系统和应用程序的物理设备。这就导致了硬件资源浪费和管理复杂性的增加。为了解决这些问…

注册中心--zookeeper 安装并启动

zookeeper 安装/启动 注册中心--zookeeper安装步骤zookeeper常用命令 注册中心–zookeeper zookeeper官方下载地址 最早由雅虎开发&#xff0c;用来解决分布式系统中的一致性问题。功能&#xff1a;包括配置管理、集群的扩容和缩容、分布式锁等等。 安装步骤 1&#xff09;…

C++学习笔记(二十八):c++ 静态库及动态库的使用

静态库的使用 库的使用会很大程度减少我们的工作&#xff0c;本节对c中静态库和动态库的使用进行简单的介绍。静态链接库意味着这个库会被放到可执行文件中&#xff0c;在生成的exe中。动态链接库是在程序运行时链接的&#xff0c;可以在程序运行时调用加载库函数的方法来实现&…

Java项目:07 Springboot的客户管理系统

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 springboot客户管理系统 功能模块&#xff1a;登录修改密码客户列表充值列表消费记录客户类型 环境&#xff1a;IDEAjdk1.8Tomcat9MySQL5.7maven3.6…

基于Matlab/Simulink开发自动驾驶的解决方案

文章目录 处理自动驾驶数据 仿真自动驾驶场景 设计感知算法 设计规划和控制算法 生成代码和部署算法 集成和测试 参考文献 使用 MATLAB/Simulink开发自动驾驶&#xff0c;能够深入建模真实世界的行为、减少车辆测试并验证嵌入式软件的功能&#xff0c;从而推进自动驾驶感…

linux安装系统遇到的问题

这两天打算攻克下来网络编程&#xff0c;发现这也确实是很重要的一个东西&#xff0c;但我就奇了怪了&#xff0c;老师就压根没提&#xff0c;反正留在我印象的就一个tcp/ip七层网络。也说正好&#xff0c;把linux命令也熟悉熟悉&#xff0c;拿着我大一课本快速过过 连接cento…

AI大模型学习笔记一

一、商业观点&#xff1a;企业借助大模型获得业务增长可能 二、底层原理&#xff1a;transformer 1&#xff09;备注 ①下面每个步骤都是自回归的过程&#xff08;aotu-regressive&#xff09;&#xff1a;已输出内容的每个字作为输入&#xff0c;一起生成下一个字 ②合起来就…

服务器IP如何隐藏

说到 IP 地址&#xff0c;它足以作为服务器的定位标志&#xff0c;算是在互联网上的名片。因此&#xff0c;当一些黑客攻击服务器时&#xff0c;IP 地址便会成为首要目标。为保护服务器避免受到潜在的攻击和侦察&#xff0c;隐藏服务器的真实 IP 地址是一项重要的措施。 服务器…

花了三天的时间做了一个多功能 AI 助手

嗨&#xff01;我是团子&#xff0c;大家新年快乐呀~ 前几天看到一些好朋友在朋友圈晒自己的年度总结&#xff0c;立新年 Flag&#xff0c;看到大家一年满满的收获&#xff0c;再看看自己&#xff0c;不由得想再看看人家&#xff0c;然后再看看自己&#xff0c;然后再看看人家…

Android-基础

Activity生命周期 1.启动Activity&#xff1a;系统会先调用onCreate方法&#xff0c;然后调用onStart方法&#xff0c;最后调用onResume&#xff0c;Activity进入运行状态。 2.当前Activity被其他Activity覆盖其上或被锁屏&#xff1a;系统会调用onPause方法&#xff0c;暂停当…

seata分布式事务(与dubbo集成)

1.seata是什么? Seata 是一款开源的分布式事务解决方案&#xff0c;致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 2.seata的注解 GlobalTransactional&#xff1a;全局事务注解&#xff0c;添加了以后可实现分布式事务的回滚和提交&#xff0c;用法与spring…

数据分析-Pandas如何重塑数据表

数据分析-Pandas如何重塑数据表 数据表&#xff0c;时间序列数据在数据分析建模中很常见&#xff0c;例如天气预报&#xff0c;空气状态监测&#xff0c;股票交易等金融场景。数据分析过程中重新调整&#xff0c;重塑数据表是很重要的技巧&#xff0c;此处选择Titanic数据&…

FreeRTOS 学习相关笔记 附C语言内容补充

学习视频为【正点原子】手把手教你学FreeRTOS实时系统 文章目录 RTOS 入门裸机RTOSFreeRTOS任务调度方式任务状态 FreeRTOS 移植系统配置文件 API函数任务创建和删除动态方式创建任务静态方式创建任务删除任务 任务挂起和恢复函数调度器挂起与恢复临界区任务调度器的挂起和恢复…

anoconda 安装报错

表现形式&#xff1a;Output folder: D:\anoconda\Lib Extract: _nsis.py Extract: _system_path.py Output folder: D:\anoconda........................ 解决办法&#xff1a; 网址&#xff1a;Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Sour…

Java循环语句

1&#xff1a;for循环结构 循环结构有三种语句&#xff0c;分别是&#xff1a; for循环 while循环 do…while循环 这三种循环可以做相同的事情&#xff0c;当然它们也有小的区别 1.1 for循环结构 这段代码的作用&#xff0c;是用来展示手机信息1000次。 还提到了这里的几…

Rust-trait

Rust语言中的trait是非常重要的概念。 在Rust中&#xff0c;trait这一个概念承担了多种职责。在中文里&#xff0c;trait可以翻译为“特征”“特点”“特性”等。 成员方法 trait中可以定义函数。用例子来说明&#xff0c;我们定义如下的trait: 上面这个trait包含了一个方法…

甜蜜而简洁 —— 深入了解Pytest插件pytest-sugar

在日常的软件开发中&#xff0c;测试是确保代码质量的关键步骤之一。然而&#xff0c;对于测试报告的生成和测试结果的可读性&#xff0c;一直以来都是开发者关注的焦点。Pytest插件 pytest-sugar 以其清晰而美观的输出&#xff0c;为我们提供了一种愉悦的测试体验。本文将深入…

Springboot WebFlux项目结合mongodb进行crud

第一步&#xff1a;创建项目 第二步&#xff1a;给mongodb插入数据 第三步&#xff1a;创建实体类 package org.cyl.test02.entity;// Task.java import lombok.Data;Data public class Task {private String id;private String description; }第四步&#xff1a;创建Reposito…