《从根上理解MySQL是怎样运行的》第二张学习笔记

第二章 MySQL的调控按钮-启动选项和系统变量

MySQL中有很多设置选项,比如对于MySQL服务器程序可以指定允许连入的客户端数量,客户端和服务器的通信方式等设置选项,就跟我们设置手机的音量大小什么的差不多

对于客户端则是之前可以指定的用户名,密码等参数

设置项一般都有默认值,启动式也可以修改它们:启动选项。指定的时候可以再命令行中指定也可以放在配置文件中指定


在命令行中使用选项

比如禁止客户端和服务器端使用TCP/IP通信:

mysql - - skip - networking

指定启动选项的时候使用- -前缀,选项名如果有多个名次,需要短划线连接,或者下划线连接

比如创建表的时候指定存储引擎:

Mysqld - - default - storage - engine = MyISAM

这样指定一个引擎以后,再创建表默认都是MyISAM的存储引擎了

总之有很多选项可以自定义,使用-help选项查看可以支持的启动项


选项的长形式和短形式

之前的选项比较长名字,所以设计者提供了一些短的快捷名字来方便我们的使用:

短形式有格式要求:只加一个短划线前缀,并且选项名和选项值之间不可以有空格:

一个标准的格式: mysqld -P3307

注意大小写区分


配置文件中设置启动项

命令行中的设置只对当前有效,如果下一次重启程序那么还需要重复设置。

为了方便使用,设计了配置文件来方便配置启动项:将需要配置的启动选项都写在这个配置文件中,这样每次启动服务器都会走这个配置文件中的选项,这样就不用我们手动配置了

个人思考:这个就有点像是我们之前说过的配置环境变量嘛,提前写在一个文件中,然后后面每次启动都走这个文件就不用一次一次地手动配置了


配置文件的路径

MySQL程序启动的时候会从路径中寻找配置文件,不同的系统路径有所不同,但是都是差不多的


配置文件的内容:

具体格式:

然后每一组都可以配置该组内单独的启动项:

配置文件中启动选项不允许添加前缀,每行只能指定一个选项

但是可以使用#来添加注释,从#出现直到行尾的内容都会被忽略

注意:如果想要指定mysql.server中的参数,必须将它们放在配置文件中,而不是放在命令行中。mysql.server只支持start和stop作为参数

总结:使用配置文件为MySQL程序选择合适的启动项


可以特定MySQL版本的专用选项组

可以在选项组的名称中加上特定的MySQL版本号,这样只有该版本对应的MySQL程序才可以使用该组的选项


配置文件的优先级

MySQL会按照指定的路径或者默认路径顺序读取各个配置文件。如果多个配置文件中设置了相同的启动选项,那么以最后的一个配置文件中的选项为主


同一个配置文件中的优先级

如果出现相同的配置项,那么还是以最后出现的为主:


defaults- file的使用

通过这个选项限定MySQL的搜索配置文件路径:

mysqld - -defaults-file =/xxxxx。txt


命令行和配置文件中的启动选项的区别

命令行上很多选项都可以放到配置文件中,但是一些选项是专门为命令行设置的

比如:defaults-extra-file , defaults-file

因为它们本身就是来指定配置文件的路径的,如果还放到配置文件中就没意义了

注意:如果同一个启动选项出现在命令行中也出现在配置文件中,那么以命令行中出现的为准


系统变量

MySQL服务器程序运行中的很多变量会影响程序行为------称之为MySQL系统变量

系统变量也有默认值,然后可以修改。很多值可以在运行中修改


查看系统变量

SHOW VARIABLES 【LIKE 匹配的模式】


设置系统变量

通过启动选项设置

那么不就是之前说过的:命令行或者配置文件


服务器程序中运行的设置

运行中就可以修改变量,动态的修改。不过变量有作用范围


设置不同作用范围的系统变量

比如不同的客户端想使用不同的存储引擎,那么没有问题。直接设置,不会相互影响

但是一些共有的变量就不合适了,比如服务器客户端的数量设置

并且一个新的客户端连接以后的系统变量如何设置呢?

因此规定了变量的作用范围:

(1)GLOBAL:全局变量:影响服务器的整体操作

(2)SESSION:会话变量,影响某个客户端的操作

(SESSION也称之为LOCAL)

启动服务器的时候全局变量会初始化一个默认值,然后客户端连接的时候会分配不同的会话变量值,连接的时候默认会话变量值就是全局变量的值:用全局变量的值初始化会话变量的值:也就是全局变量是包含局部变量的

启动选项中设置的变量作用范围都是GLOBAL的,也就是对所有的客户端都生效。

运行时可以修改它们:

比如想在运行过程中将全局变量存储引擎的值单独设置为另一个引擎------后面连接到的新客户端都使用这个新的引擎:

也可以指定只对该客户端有效:

语句一:SET SESSION default_storage_engine = MyISAM;

语句二:SET @@SESSION.default_storage_engine = MyISAM;

语句三:SET default_storage_engine = MyISAM;

设置系统变量的语句中省略了范围,那么默认就是作用SESSION范围。SET 和 SET SESSION是等价的


查看不同作用范围的系统变量

SHOW VARIABLES语句默认查看的是SESSION变量

注意:某次连接的时候客户端修改了全局变量的值,那么这个值只会在后续的其他的新连接中生效,本次的值还是当前的SESSION的值

并不是所有的变量都有两种作用范围,一些只有GLOBAL,某些只有SESSION

有些系统变量是只读的,不能设置:比如version系统版本


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

启动选项是启动的时候传递进来的参数,系统变量是运行时影响服务器运行的变量,它们的关系如下:

(1)系统变量可以当作启动选项传入

(2)有些系统变量是在运行的时候自动生成的,不可以当作启动项设置:比如连接数等等

(3)不是所有的启动项都是系统变量:比如defaults-file

总结:启动项和系统变量都可以改变程序的执行,一些可以启动的时候指定一些可以运行时指定,只是部分变量的职责是专门化的


状态变量

顾名思义:表示服务器运行时状态的变量,反应服务器的运行情况------因此我们不能手动设置,这是服务器自动生成的,相当于每天的天气,打游戏时电脑的温度

查看状态变量: SHOW [GLOBAL | SESSION] STATUS [LIKE 匹配的模式]


总结:这一张讲述了程序执行时的一些变量,控制程序、影响程序、反映程序的运行


第二天复习

我感觉这一章就是讲的是很多可以影响系统运行的参数。介绍了启动项、系统变量和状态量。总之它们都可以体现出服务器的运行,启动项和状态量还可以影响服务器的运行

主要都是一些概念性的东西,了解一下重要的即可

相关推荐
d111111111d1 小时前
STM32外设学习-I2C通信(代码)--MPU6050--笔记
笔记·stm32·单片机·嵌入式硬件·学习
一 乐2 小时前
英语学习激励|基于java+vue的英语学习交流平台系统小程序(源码+数据库+文档)
java·前端·数据库·vue.js·学习·小程序
也许是_2 小时前
MySQL与PostgreSQL深度对比
数据库·mysql·postgresql
martian6652 小时前
第九章:如何学习和掌握BI?
大数据·数据仓库·学习·etl·bi
自小吃多2 小时前
正点原子-梯形加减速
笔记
musk12123 小时前
人工智能学习大纲,豆包深入研究版
人工智能·学习
胡童嘉3 小时前
长沙烈焰鸟网络科技有限公司实习day13日记
功能测试·学习·职场和发展·游戏引擎·cocos2d
懒羊羊不懒@3 小时前
【MySQL | 进阶】存储引擎
数据库·mysql
linly12193 小时前
ERP学习笔记-时域分析
笔记·学习