当前位置: 首页 > news >正文

重新认识mysql


title: “重新认识mysql”
createTime: 2022-03-06T15:52:41+08:00
updateTime: 2022-03-06T15:52:41+08:00
draft: false
author: “ggball”
tags: [“mysql”]
categories: [“db”]
description: “”

文章目录

    • title: "重新认识mysql" createTime: 2022-03-06T15:52:41+08:00 updateTime: 2022-03-06T15:52:41+08:00 draft: false author: "ggball" tags: ["mysql"] categories: ["db"] description: ""
    • mysql 的客户端和服务端结构
    • bin目录下的可执行文件
    • unix环境下启动mysql server
    • windows下启动mysql server
    • 客户端连接服务端的过程
    • 服务器处理客户端请求

mysql 的客户端和服务端结构

客户端负责接收用户的命令,并且发送给服务端

服务端负责接收客户端的命令,并进行处理,返回给客户端

bin目录下的可执行文件

image-20220208163519036

unix环境下启动mysql server

mysqld

mysqld 这个可执行文件就代表着 MySQL 服务器程序,运行这个可执行文件就可以直接启动一个服务器进程。但这个命令不常用,我们继续往下看更牛逼的启动命令。

mysqld_safe

mysqld_safe 是一个启动脚本,它会间接的调用 mysqld ,而且还顺便启动了另外一个监控进程,这个监控进程在服务器进程挂了的时候,可以帮助重启它。另外,使用 mysqld_safe 启动服务器程序时,它会将服务器程序的出错信息和其他诊断信息重定向到某个文件中,产生出错日志,这样可以方便我们找出发生错误的原因。
mysql.server

mysql.server 也是一个启动脚本,它会间接的调用 mysqld_safe ,在调用 mysql.server 时在后边指定 start参数就可以启动服务器序了,就像这样:

mysql.server start

需要注意的是,这个 mysql.server 文件其实是一个链接文件,它的实际文件是 …/support-files/mysql.server。我使用的 macOS 操作系统会帮我们在 bin 目录下自动创建一个指向实际文件的链接文件,如果你的操作系统没有帮你自动创建这个链接文件,那就自己 创建一个呗~ 别告诉我你不会创建链接文件,上网搜搜呗~

另外,我们还可以使用 mysql.server 命令来关闭正在运行的服务器程序,只要把 start 参数换成 stop 就好了:

mysql.server stop

mysqld_multi

其实我们一台计算机上也可以运行多个服务器实例,也就是运行多个 MySQL 服务器进程。 mysql_multi 可执行文件可以对每一个服务器进程的启动或停止进行监控。这个命令的使用比较复杂,本书主要是为了讲清楚 MySQL 服务器和客户端运行的过程,不会对启动多个服务器程序进行过多唠叨。

windows下启动mysql server

手动启动

双击bin目录下mysqld文件即可

以服务的方式启动

有些时候需要长时间运行程序或者开机自启某些程序,这时候就需要把这个程序注册为windows服务

"完整的可执行文件路径" --install [-manual] [服务名]

其中的 -manual 可以省略,加上它的话表示在 Windows 系统启动的时候不自动启动该服务,否则会自动启动。

服务名 也可以省略,默认的服务名就是 MySQL 。比如我的 Windows 计算机上 mysqld 的完整路径是:

C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld

所以如果我们想把它注册为服务的话可以在命令行里这么写:

"C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld" --install

在把 mysqld 注册为 Windows 服务之后,我们就可以通过下边这个命令来启动 MySQL 服务器程序了:

net start MySQL

当然,如果你喜欢图形界面的话,你可以通过 Windows 的服务管理器通过用鼠标点点点的方式来启动和停止服务

(作为一个程序猿,还是用黑框框吧~)。关闭这个服务也非常简单,只要把上边的 start 换成 stop 就行了,就像这样:

net stop MySQL

启动mysql客户端

bin目录下有启动脚本 mysqladmin 、 mysqldump 、 mysqlcheck 等等等等,最重要的是mysqld

启动命令

mysql -h主机名 -u用户名 -p密码

各个参数的意义如下: |参数名|含义| |:–😐:–| | -h |表示服务器进程所在计算机的域名或者IP地址,如果服务器进程就运行在本机的话,可以省略这个参数,或者填 localhost 或者 127.0.0.1 。也可以写作 --host=主机名 的形式。| | -u |表示用户名。也可以写作 --user=用户名 的形式。| | -p |表示密码。也可以写作 --password=密码 的形式。总的说,像 h、u、p 这样名称只有一个英文字母的参数称为短形式的参数,使用时前边需要加单短划线,像 host、user、password 这样大于一个英文字母的参数称为长形式的参数,使用时前边需要加双短划线。

例子

mysql -hlocalhost -uroot -p123456

客户端连接服务端的过程

客户端进程向服务器进程发送请求并得到回复的过程本质上是一个进程间通信的过程

三种方式

  • TCP/IP
  • windows下使用命名管道或者共享内存
  • unix下使用Unix域套接字文件

服务器处理客户端请求

客户端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理后再向客户端进程发送一段文本(处理结果)

image-20220208173328925

  1. 连接管理
    不管是用以上三种的哪种,mysql服务端都会开启一个线程去连接请求过来的客户端,当客户端与服务端断开连接时,连接不会立马被销毁,而是被缓存起来,待下个客户端连接使用,好处就是避免线程频繁的开启和销毁,减小对系统性能的影响

  2. 处理链接

    • 查询缓存
      如果两个查询请求在任何字符上的不同(例如:空格、注释、大小写),都会导致缓存不会命中。另外,如果查询请求中包含某些系统函数、用户自定义变量和函数、一些系统表,如mysql 、information_schema、 performance_schema 数据库中的表,那这个请求就不会被缓存。以某些系统函数举例,可能同样的函数的两次调用会产生不一样的结果,比如函数 NOW ,每次调用都会产生最新的当前时间,如果在一个查询请求中调用了这个函数,那即使查询请求的文本信息都一样,那不同时间的两次查询也应该得到不同的结果,如果在第一次查询时就缓存了,那第二次查询的时候直接使用第一次查询的结果就是错误的!
      不过既然是缓存,那就有它缓存失效的时候。MySQL的缓存系统会监测涉及到的每张表,只要该表的结构或者数据被修改,如对该表使用了 INSERT 、 UPDATE 、 DELETE 、 TRUNCATE TABLE 、 ALTER TABLE 、 DROP TABLE 或 DROP DATABASE 语句,那使用该表的所有高速缓存查询都将变为无效并从高速缓存中删除!

    tips:

虽然查询缓存有时可以提升系统性能,但也不得不因维护这块缓存而造成一些开销,比如每次都要去查询缓存中检索,查询请求处理完需要更新查询缓存,维护该查询缓存对应的内存区域。从MySQL 5.7.20开始,不推荐使用查询缓存,并在MySQL 8.0中删除。

  • 语法解析
    如果查询缓存没有命中,接下来就需要进入正式的查询阶段了。因为客户端程序发送过来的请求只是一段文本而已,所以 MySQL 服务器程序首先要对这段文本做分析,判断请求的语法是否正确,然后从文本中将要查询的表、各种查询条件都提取出来放到MySQL服务器内部使用的一些数据结构上来。
  • 查询优化
    现在已经获取到需要操作的表的信息,搜索条件等,但是有这些,往往执行效率不是最好的,mysql的优化程序会帮你将sql做些优化,如外连接转换为内连接、表达式简化、子查询转为连接吧啦吧啦的一堆东西
  1. 存储引擎

以上的操作都还没涉及到真正操作数据,储存引擎才会真正操作数据,我们都知道数据存在表里的一行一行记录,这只是逻辑上的,实际上数据是以什么样的结构,什么样的方式存到磁盘上的,就是储存引擎该做的事。
各种不同的存储引擎向上边的 MySQL server 层提供统一的调用接口(也就是存储引擎API),包含了几十个底层函数,像"读取索引第一条内容"、“读取索引下一条内容”、"插入记录"等等。

常用的储存引擎

名称功能
ARCHIVE用于数据存档(行被插入后不能再修改)
BLACKHOLE丢弃写操作,读操作会返回空内容
CSV在存储数据时,以逗号分隔各个数据项
FEDERATED用来访问远程表
InnoDB具备外键支持功能的事务存储引擎
MEMORY置于内存的表
MERGE用来管理多个MyISAM表构成的表集合
MyISAM主要的非事务处理存储引擎
NDBMySQL集群专用存储引擎

相关文章:

重新认识mysql

title: “重新认识mysql” createTime: 2022-03-06T15:52:4108:00 updateTime: 2022-03-06T15:52:4108:00 draft: false author: “ggball” tags: [“mysql”] categories: [“db”] description: “” 文章目录 title: "重新认识mysql" createTime: 2022-03-06T15:…...

系统集成|第十九章(笔记)

目录 第十九章 风险管理19.1 风险管理的概述及相关概念19.2 主要过程19.2.1 规划风险管理19.2.2 识别风险19.2.3 实施定性风险分析19.2.4 实施定量风险分析19.2.5 规划风险应对19.2.6 控制风险 上篇:第十八章、安全管理 下篇:第二十章、收尾管理 第十九…...

【Linux】Linux远程访问Windows下的MySQL数据库

1.建立Windows防火墙规则 首先需要开放windows防火墙,针对3306端口单独创建一条规则,允许访问。 打开windows安全中心防火墙与保护,点击高级设置 进入之后,点击入站规则,新建一条规则 新建端口入站规则 端口填写330…...

android安卓core tombstone .pb

Tombstone原理分析_内核工匠的博客-CSDN博客 android tombstone分析_tombstone 分析_良知犹存的博客-CSDN博客 Tombstone简介 当一个native程序开始执行时,系统会注册一些连接到debuggerd的signal handlers。针对进程出现的不同的异常状态,Linux kernel…...

C++简单实现红黑树

目录 一、概念 二、红黑树的性质 三、红黑树的定义 四、红黑树的插入操作 情况一(叔叔节点存在且为红色)——变色向上调整: 情况二(叔叔节点不存在或为黑色)——旋转变色: 2.1叔叔节点不存在 2.2叔叔…...

国庆加速度!新增功能点锁定功能,敏捷开发新增估算功能,助力项目快速突破!

大家好,CoCode开发云旗下Co-Project V3.6智能项目管理平台正式发布,平台新增功能点锁定功能、敏捷开发模式新增估算板块和两种估算方式。 功能点锁定功能进一步提高了项目估算的灵活性和准确性,有利于提高项目估算效率;而敏捷开发…...

uniapp 如何动态切换应用图标、名称

有时候我们需要实现类似百度网盘、淘宝APP这种可以动态切换 但是呢这种需求平常非常少见 很多人不知道如何操作 今天就教大家如何实现 这里我们需要用到一款插件Ba-ChangeIcon Ba-ChangeIcon 是一款uniapp动态切换应用图标、名称的插件。可实现过年、过节动态切换应用图标的效…...

CUDA学习笔记0929

一、GPU缓存和变量作用域 1. 缓存类型 (1)GPU缓存是非可编程存储区域 (2)GPU包含4类缓存: L1缓存,每个流处理器一个 L2缓存,全部流处理器共享一个 L1和L2都可用于存储本地和全局内存中的数…...

XML-Based Configuration Beans for Ioc Container

XML-Based Configuration XML-based configuration is the traditional way of configuring beans in Spring. <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"h…...

俞敏洪:董宇辉在北京有房子了!

据媒体报道&#xff0c;9月26日&#xff0c;俞敏洪在直播中透露&#xff0c;董宇辉已经在北京拥有了自己的房子&#xff0c;并且强调这是大家共同努力的结果。 这一消息引起了广泛关注和热议。在此之前&#xff0c;董宇辉曾在公开场合表示&#xff0c;俞敏洪老师为了给他凑钱买…...

蓝桥等考Python组别七级006

第一部分:选择题 1、Python L7 (15分) 下面for循环语句中,变量i的取值范围是( )。 for i in range(9): print(i) 1~90~91~80~8正确答案:D 2、Python L7 (15分) 下面哪一年是闰年?( &#...

港联证券:股市3000点什么意思?

近年来&#xff0c;股市风起云涌&#xff0c;上涨也好&#xff0c;下跌也罢&#xff0c;无一不让人心潮澎湃。但是&#xff0c;如果你听到股市3000点这个数字&#xff0c;你是否知道它意味着什么呢&#xff1f;接下来&#xff0c;我们将从商场体现、微观经济、投资者心态等方面…...

windows 下 vs code 格式化代码(clang-format)

vscode 的格式化代码能力来源于插件&#xff08;有不止一种插件提供格式化功能&#xff09;&#xff0c;而非 vscode 本身 1、安装插件 2、windows 下载 LLVM-17.0.1-win64.exe &#xff08;exe 结尾的安装包&#xff09; Releases llvm/llvm-project GitHub 可以直接把这…...

USB TypeC接口说明

USB TypeC 拥有诸多优点:双面可插不担心正反、可做USB/雷电高速传输载体,支持 PD快充、音频设备、HDMI传输、调试模式等诸多功能。 市面上的其他USB接口和充电接口在逐步被TypeC替代,可以预见的是,TypeC作为一种多兼容性接口,其未来会具有非常长的生命周期。 本文主要介…...

深眸科技入局AI视觉行业,以深度学习赋能视觉应用推进智造升级

随着科技的飞速发展&#xff0c;人工智能技术已经成为改变我们生活的重要力量&#xff0c;而深度学习作为人工智能的一个重要分支&#xff0c;近年来随着卷积神经网络的突破和推广&#xff0c;取得了显著进展&#xff0c;并呈现爆发式增长势头。 目前AI技术已经被迅速引入到机…...

基于微信小程序的校园失物招领系统设计与实现(源码+lw+部署文档+讲解等)

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…...

蓝桥等考Python组别七级001

第一部分:选择题 1、Python L7 (15分) 下面for循环语句中,变量i的取值范围是( )。 for i in range(1, 10): print(i) 1~101~90~100~9正确答案:B 2、Python L7 (15分) 闰年是历法中的名词,包括普通闰年和世纪闰年两类:...

【软件测试】开发/测试模型

开发/测试模型 瀑布模型 设计&#xff1a;技术文档(设计那些接口&#xff0c;库表&#xff0c;mq&#xff0c;定时任务)&#xff0c;UI视觉稿 特点&#xff1a;线性的结构。 优点&#xff1a;每个阶段做什么&#xff0c;产出什么非常清晰 缺点&#xff1a;测试人员介入太晚…...

用于时间触发的嵌入式软件的IDE

TTE Systems的RapidiTTy IDE为希望创建“时间触发”微控制器软件以提高整体系统可靠性的开发人员提供了一个独立的环境。RapidiTTy&#xff08;下面的图1&#xff09;旨在解决深度嵌入的应用&#xff0c;包括医疗&#xff0c;国防&#xff0c;汽车和工业部门以及白色和棕色商品…...

wordpress插件-免费的wordpress全套插件

在当今数字化时代&#xff0c;网站和博客已经成为信息传递、观点分享和商业交流的重要平台。在这个背景下&#xff0c;WordPress作为最受欢迎的内容管理系统之一&#xff0c;无疑扮演着至关重要的角色。然而&#xff0c;要保持一个成功的WordPress网站&#xff0c;不仅需要出色…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

Java并发编程实战 Day 11:并发设计模式

【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天&#xff0c;今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案&#xff0c;它们不仅提供了优雅的设计思路&#xff0c;还能显著提升系统的性能…...