认识mysql总结_从根上理解Mysql - 读后个人总结1-搜云库

初识 MySQL

4a6435793a2a86686e051fdd8de63413.png

通信介绍

MySQL 也是典型的 C / S 模型,分为客户端及服务端,服务端一般部署在远端服务器中,也可以部署至本地,然后客户端跟服务端通信则可以使用依赖网络的 TCP 长连接或 Unix-like 的系统下可以使用 Socket文件的形式通信

连接阶段

客户端跟服务器端通信,MySQL 服务器会维护为每个客户端请求建立一个线程专门处理请求

连接可以通过 SSL 保证传输安全性,实际情况一般都是通过 SSL 访问跳板机再通过内网地址访问到 MySQL 服务器

MySQL 服务器也会通过用户名,密码,主机信息来做认证,判断是否提供对应权限的服务

查询缓存阶段

MySQL 服务器为提供查询效率,所以加入了全局缓存,当缓存命中时可以直接返回结果。但是实际两个请求只要有任何字符上的不一样,都会导致缓存不能命中,同时对于读写相差不多或写多读少的表,每次写操作都会导致缓存失效造成不必要的开销,所以在 MySQL 5.7+ 版本中该功能以及被废弃,MySQL 8.0+ 版本中被移除

语法解析阶段

如果缓存没有命中,MySQL 服务接下去就会开始解析 SQL 语句,如果有语法错误则直接返回至客户端,没有问题则会将 SQL 语句转换为 MySQL 内部的数据结构(解析树)

查询优化

语法解析之后,MySQL 服务器已经知道客户端想如何去获取数据,接下来服务器会对语句的执行进行优化,例如外连接转换为内连接,表达式简化,子查询转换为连接之类的,这部分优化不会对查询结果有影响,类似于数学上的因式分解,但是执行效率更高。完成优化后,生成的结果就是执行计划,这时根据执行计划就可以知道该从哪个表,使用哪个索引,查询哪些数据等所有的具体操作。

我们可以使用 EXPLAIN 语句查询某个 SQL 的执行计划,然后对 SQL 进行优化

存储引擎

当拥有执行计划后,MySQL 服务接下去就要真正的去持久化的区域,将数据取出来交给客户端,这里为了能支持各种各样的持久化策略,MySQL 对下层的所有控制都依赖于统一的存储引擎 API,然后不同的存储引擎提供各自的具体实现

不同的存储引擎,目标场景不同,实现方式与特性也不同,可以根据实际场景进行选择,场景的存储引擎如下:

存储引擎

描述

ARCHIVE

用于数据存档 (行插入后不能再被修改)

CSV

在存储数据时,以逗号分隔各个数据项

InnoDB

具备外键功能的事务存储引擎

MERGE

用来管理多个 MyISAM 表构成的表集合

NDB

MySQL 集群专用存储引擎

BLACKHOLE

丢弃写操作,读操作会返回空内容

FEDERATED

用来远程访问表

MEMORY

置于内存的表

MyISAM

主要的非事务处理存储引擎

数据库可以配置一个默认的存储引擎,而每个表还可以单独指定一个不同的存储引擎,例如:

MySQL 调控

MySQL 服务器正常运行,会有非常多的配置参数,并且这些参数是支持根据实际场景进行修改的,主要有 **启动选项 ** 和 配置文件 的方式

启动选项

常规在命令行下使用一个命令,为了让这个命令根据用户不同的需求产生不能的行为,都会传递一个这个命令支持的选项参数,然后命令解析到这个参数后,就会按固定的行为来工作

比如 ls 表示将当前目录下的文件信息都展示出来,而 ls -l 通过传递一个 -l 的选项,表示修改展示的内容及方式,这种类似的操作就是传递启动选项,MySQL 服务器在启动时也支持大量的启动选项

启动选项一般包含长形式和短形式,比如 MySQL 服务器配置监听主机名的选项,长形式就是 –host,而短形式就是 -h,他们的作用是相同的,相当于短地址数量有限,所有只有一些常用的选项有短形式

注意:选项名区分大小写,所以 -p 与 -P 完全不一样,而短形式指定选项时,可以跟空格,也可以不跟(-p有些特殊,-p和密码值之间是不能用空格的),所以 -P 3306 和 -P3306 是一样的

配置文件

启动选项仅针对单次启动生效,也就是不会将配置进行持久化,而配置文件是持久化到本地的,所以不需要每次启动时都输入,所以非常方便

Unix like 操作系统下,默认 MySQL 服务器会从以下路径来寻找配置文件:

路径

备注

/etc/my.cnf

/etc/mysql/my.cnf

SYSCONFDIR/my.cnf

$MYSQL_HOME/my.cnf

特定于服务器的选项

defaults-extra-file

命令行指定的额外配置文件路径

~/.my.cnf

用户特定选项

~/.mylogin.cnf

用户特定的登录路径选项(仅限客户端)

说明:

1、 SYSCONFDIR 表示在使用 CMake 构建时使用 SYSCONFDIR 选项指定的目录,通常情况下,默认配置是编译安装目录下的 etc 目录

2、 MYSQL_HOME 是自定义的环境变量,可配可不配,仅代表可以自定义放置配置文件的路径

3、 ~ 表示跟当前登录用户相关,也就是根据用户不同的配置方式,放置到每个用户自己的目录下

4、 defaults-extra-file 表示在启动 MySQL 服务是,指定的编译文件的目录,例如:

`mysqld --defaults-extra-file=/tmp/my.cnf` 这样启动,则会访问 /tmp/my.cnf 这个路径下的配置文件

配置文件的内容

配置文件的启动选项被分为若干个组,每个组有个组名,用中括号包裹

对应到启动选项中,配置的这两个选项的使用方式应该类似于:

mysqld --option1 --option2=value2

其次是分组的适用范围:

1、 server 分组表示所有 MySQL 服务器程序都会读取使用

2、 client 分组表示所有 MySQL 客户端程序都会读取使用

3、 mysqld 命令启动 MySQL 服务器程序会读取 [mysqld],[server]

4、 mysqld_safe 命令启动 MySQL 服务器程序会读取 [mysqld],[server],[mysqld_safe]

5、 mysql.server 命令启动 MySQL 服务器程序会读取 [mysqld],[server],[mysql.server]

6、 mysql 命令启动客户端程序会读取 [mysql],[client]

7、 mysqladmin 命令启动客户端程序会读取 [mysqladmin],[client]

8、 mysqldump 命令启动客户端程序会读取 [mysqldump ],[client]

注意:同一个配置文件中,多个组都修改了同一个选项,并且这几个组都能被读取,则按从上到下的顺序进行读取,也就是最后一个配置会覆盖之前的配置项

系统变量

除了监听的端口ip等参数以外,MySQL 服务还有大量的系统变量,能影响 MySQL 服务程序的行为,跟之前的区别在于,这些系统变量除了配置文件和启动选项能修改外,还支持通过 SQL 动态的更改

例如 default_storage_engine 表示 MySQL 服务默认的储存引擎,max-connections 表示 MySQL 服务默认的储存引擎,通过启动选项的方式配置如下:

通过配置文件的方式配置参考如下:

而通过 SQL 语句配置参考如下:

变量作用范围

与一般编程语言相似,MySQL 的系统系统变量也有作用范围的说法,不过不是全局和局部,而是全局跟用户,如果是 GLOBAL 下修改了这个参数,则对所有 MySQL 用户而言,都以最新的参数进行工作,而在 SESSION 下修改了这个参数,则仅对当前的 MySQL 用户生效

另外,不是所有的系统变量都有两种作用范围的,比如 max-connections 只具有 GLOBAL 的作用范围,而 insert_id 只具有 SESSION 的作用范围,像 version 这种变量更为特殊,属于只读的系统变量,不可更改

系统变量跟启动选项的区别

启动选项是程序启动时传递的参数,而系统变量是程序在运行时,控制程序行为的变量,关系如下:

大部分的系统变量都可以通过启动选项的方式进行配置

部分系统变量是程序自动生成,不可通过启动选项的方式进行配置,例如:auto_increment_offset

部分启动选项也不是系统变量,例如:defaults-file

状态变量

为了更好的了解 MySQL 服务的运行状况,服务提供了大量的关于运行状态的变量,称为状态变量。例如:Threads_connected 表示当前已经连接的数量

状态变量用于显示服务器的状态信息,他们的值只能由 MySQL 服务程序自己维护,而不能手动配置

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

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

相关文章

面试官问:你在项目中做过哪些安全防范措施?

大家好,我是若川。今天分享一篇安全相关的文章。点击下方卡片关注我、加个星标,或者查看源码等系列文章。学习源码整体架构系列、年度总结、JS基础系列如果你被面试官问到这个问题,不要急于描述自己遇到的问题以及如何处理的,你得…

消灭病毒_消灭遗产

消灭病毒The year was 1995, I was 10 years of age. The number 1 single in the UK was Think Twice by Celine Dion, and Batman Forever was the highest grossing movie across the pond in the States. Manchester United, unfortunately, won their 3rd Premier League …

logcat崩溃_使用logcat抓取Android崩溃日志

一、安装jdkJDK网上教程非常多,此处不再赘述。(好像不装也没关系,未实测)二、工具列表a) adb包(v.1.0.31版本或以上,下文提供下载地址)b) logcat.bat文件(下文制作)三、安装adb(二选一)a) 放到任意位置(推荐)因为adb…

基于 Ubuntu 16.04 LTS 的 KDE neon 到达维护周期

随着 KDE neon 在 Ubuntu 18.04 LTS 发布,开发团队已经决定 放弃维护基于 Ubuntu 16.04 LTS版本,大多数用户预警将希望升级到基于 Ubuntu LTS 的 KDE neno 新版本。“去年KDE neno 被重新定位到 Ubuntu bionic / 18.04上,并且升级已经基本顺利…

真诚推荐7个能助你成长的前端大佬

不得不说,如今比前些年学习资料多很多了。现在的前端公众号也挺多的,这里推荐几个前端大佬运营的公众号,都是聚焦前端垂直领域的优质公众号,关注这些公众号至少可以:1、了解现在前端技术发展情况和未来发展趋势&#x…

Silverlight学习笔记(3):Silverlight的界面布局

在上一篇中讲述了使用VS2010开发Silverlight的一些基础知识,并且讲述了Silverlight的部署和代码安全知识,这一篇主要是讲述如何在Silverlight中摆放界面元素。记得早年前我还在学习Java的时候,当时有两种开发Java SE的方法,一种是…

pov-inc_yourself劳自己-懒惰的设计师的POV和一些Figma

pov-incAre you ready and lazy enough (you will fully understand with continue reading this)? Coffee and tea next to you? Alright. This article is going to (not) kick you in your a**. It will be a bit of ‘lesson learned’, for sure a bit of FIGMA, and a …

Geary 0.13.0 发布,GNOME 3 Email 客户端应用

百度智能云 云生态狂欢季 热门云产品1折起>>> Geary 0.13.0 发布了,Geary 是一个电子邮件应用,用于 GNOME 3 桌面版本,它允许阅读、查找和发送电子,并提供简洁、现代化的界面。这是一个重要的新版本,具有许…

轻型本地服务器_一小时超轻型漂移机

轻型本地服务器Iwas introduced to the world of Hyper Light Drifter through a series of visions — titans ravage a broken city, a shallow sea is stained red by floating corpses, a skinny dog leads me into the yawning abyss of a pillar in the center of the se…

聊聊前端面试

大家好,我是若川。今天分享一篇面试相关的文章。点击下方卡片关注我、加个星标,或者查看源码等系列文章。学习源码整体架构系列、年度总结、JS基础系列最近 Zoom 国内又开放招聘了,我们组有了前端的 HC,所以我也参加了几场面试。合…

mysql读写分离和分布式_MySQL主从复制与读写分离

MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过。但在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全…

ux和ui_UI和UX设计师的10种软技能

ux和ui重点 (Top highlight)As designers, whether it be UI, UX, or Product Design, we tend to direct our focus and energy on developing and mastering tangible skills.作为设计师,无论是UI,UX还是产品设计,我们都将重点和精力放在开…

SQLServer中批量插入数据方式的性能对比 (转)

转自:http://www.cnblogs.com/wlb/archive/2010/03/02/1676136.html 昨天下午快下班的时候,无意中听到公司两位同事在探讨批量向数据库插入数据的性能优化问题,顿时来了兴趣,把自己的想法向两位同事说了一下,于是有了本…

VueConf China 2021 《Vue3生态进展-尤雨溪》 Reaction

大家好,我是若川。今天分享昨天Vueconf的一篇文章,来了解下Vue的生态进展。另外今晚7点,Vuebeijing社区邀请了尤大会在视频号直播,可以加我微信 ruochuan12,告诉观看地址提前预约。点击下方卡片关注我、加个星标&#…

Plsql运行mysql脚本_oracle中PLSQL语句

1.set autot off 禁止使用autotrace命令 set autot on 这个命令包括exp 和 stat(执行语句、生成explain plan、生成统计信息) set autot trace 不执行sql语句,但(生成explain plan、生成统计信息) set autot trace exp stat 与上句同 set autot trace st1.set autot…

2019年,你需要关注这些Node API和Web框架

对于Node.js框架和开源软件来说,2018年是非常有趣的一年。开发者社区讨论了企业赞助对开源项目的作用以及如何维护那些没有经济支持却有数百万人使用的项目。同样,安全问题也得到了极大关注,一些流行的Node/JS软件包被劫持,Github…

ai创造了哪些职业_关于创造职业的思考

ai创造了哪些职业When I was growing up, the idea of a creative career wasn’t an option.当我长大时,创意事业的想法不是一个选择。 I had enjoyed doodling, arts and crafts as a kid, so as I grew up, it was a natural transition into Photoshop and lat…

Windows Mobile,用C#更改网络连接(SSID、IP Address、Subnet Mask、Gatew... (转)

前几天在做一个改变PDA无线网络连接的SSID和IP的功能是发现了一个好东西OpenNETCF Framework使用OpenNETCF.Net包,实现了任意改变PDA无线网络连接的功能。并且不需要Reset PDA。现在正在做一个IP Manager For Windows Mobile的小程序。实现搜索当前网卡可见的SSID、…

一文读懂vuex4源码,原来provide/inject就是妙用了原型链?

1. 前言你好,我是若川,欢迎加我微信ruochuan12,加群长期交流学习。这是学习源码整体架构系列 之 vuex4 源码(第十篇)。学习源码整体架构系列文章(有哪些必看的JS库):jQuery、underscore、lodash、sentry、v…

Spring4.3x教程之一IOCDI

SpringIOC也称为DI,对属性内容的注入可以通过属性的setXXX方法进行也可以通过构造方法进行,当然还可以使用工厂模式进行属性内容的注入。 什么是DI?什么是IOC? DI:Dependency Injection依赖注入 其实一个类中的属性就是…