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

原文链接:

https://relph1119.github.io/mysql-learning-notes/#/mysql/02-MySQL%E7%9A%84%E8%B0%83%E6%8E%A7%E6%8C%89%E9%92%AE-%E5%90%AF%E5%8A%A8%E9%80%89%E9%A1%B9%E5%92%8C%E7%B3%BB%E7%BB%9F%E5%8F%98%E9%87%8F

我们可以发现在日常生活中大多数软件都有自己的默认设置项,对于在程序启动时指定的设置项称之为启动选项

先不用去管mysql中的每个选项具体作用是什么

在命令行上使用选项

-h参数后面紧跟着的服务器的IP地址,意味着客户端和服务器之间需要通过TCP/IP网络进行通信。

  • 如果我们在启动服务器程序的时候禁止各客户端使用TCP/IP网络进行通信,使用以下命令
mysqld --skip-networking

我们可以注意到在命令行中指定启动选项的时候需要在选项名前加上--前缀,然后单词之间使用-或者_来凝结

改变默认的存储引擎:

mysqld --default-storage-engine=MyISAM

启动选项的通用格式:

--启动选项1[=值1] --启动选项2[=值2]

对于不需要值的启动选项,如skip-networking,就不需要指定对应的值

default-storage-engine就需要显示指定相关的值

mysql--help可以看到mysql程序支持的启动选项

mysqld_safe --help可以看到mysql_safe支持的启动选项

查看mysqld支持的选项不一样

mysqld --verbose --help

mysql 和 mysqld的区别:

mysql时客户端程序,使用mysql命令时,实际上启动了一个MySQL客户端会话

mysqld是MySQL服务器的主要二进制执行文件,负责启动,管理和运行数据库服务

选项的长形式和段形式

我们前面提到的skip-networkingdefault-storage-engine称之为长形式的选项(因为它们很长)

|长形式|短形式|含义| |-|-|-| |--host|-h|主机名| |--user|-u|用户名| |--password|-p|密码| |--port|-P|端口| |--version|-V|版本信息|

使用短形式前面就只需要使用一个-,而不是--

使用短形式可以有间隙,也可以直接用空白字符隔开

配置文件中使用选项

在命令行中设置启动选项只对当次启动有效,如果需要永久修改,

我们需要把设置的启动选项写在配置文件当中

配置文件的类路径(Windows)

MySQL会按照以下路径来寻找配置文件

|路径名|备注| |-|-| |%WINDIR%\my.ini%WINDIR%\my.cnf|| |C:\my.iniC:\my.cnf|| |BASEDIR\my.iniBASEDIR\my.cnf|| |defaults-extra-file|命令行指定的额外配置文件路径| |%APPDATA%\MySQL\.mylogin.cnf|登录路径选项(仅限客户端)|

如果我们在多个配置文件中设置了相同的启动选项,就医最后一个配置文件中的为准

defaults_file的使用:

如果我们不想让MySQL到默认的路径下搜索配置文件,可以在命令行指定default-file选项

mysqld.exe --defaults-file=C:\tmp\myconfig.txt

有些选项只能出现在命令行之中

defaults-extra-file,defaults-file这两种,这个是用来修改参照的配置文件的

前面的东西我们直接修改my.ini就行了,或者直接搜怎么修改配置大概都有

系统变量

mysql服务器程序运行过成中会用到许多影响程序行为的变量,他们被称为MySQL系统变量

允许同时连入的客户端数量用系统变量max_connection表示

类似的还有default_storage_engine

大多数系统变量的值可以在程序运行过程中修改,无需停止并重新修改它

查看系统变量

SHOW VARIABLES [LIKE 匹配的模式]

精准匹配:

模糊匹配:

设置系统变量

通过命令行添加启动选项

或者是配置文件

我试了通过命令行添加启动选项,但是结果并没有改变

一般要去配置文件里面,my.ini直接修改

然后才是最重要的一步,要用管理员身份运行

net stop mysql80
net start mysql80

如果你和我一样启动不了,去计算机管理,点击服务,找到mysql80,右击启动就行,然后会发现,修改成功了

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

因为多个客户端可以同时连接到一个服务器程序,所以对于同一个系统变量,不同的客户端需要具有不同的值,这是很正常的事情

但是每个变量都可以针对单个客户端是不现实而且是没有必要的

例如:

max_connection这是对于服务器而言的,客户端设置是完全不合适的

还有一个问题是设置的这个选项是全局(对服务器而言)的还是部分的(对客户端而言),这也很重要

所以我们提出了作用范围这个概念

  • GLOBAL:全局变量,影响服务器

  • SESSION:会话变量,影响某一个客户端

显然,通过启动选项设置的系统变量的作用范围都是GLOBAL

SET [GLOBAL|SESSION] 系统变量名 = 值

第二种写法:

SET [@@(GLOBAL|SESSION).]var_name = XXX;

如果我们想让后面来的客户端的某个值都变成相同的就是用GLOBAL

//假设修改default_storage_engine
SET GLOBAL default_storage_engine = MyISAM;
SET @@GLOBAL.default_storage_engine = MyISAM;

如果只想对本客户端生效,我感觉我们掌握简单的一种就行,反正都一样

SET SESSION default_storage_engine = MyISAM;
SET default_storage_engine = MyISAM;

如果我们省略了作用范围,默认的作用范围就是SESSION

客户端设置了global的系统变量,并不会对已经连接上的客户端的系统变量产生影响,只会对后面连接的客户端产生影响

并不是所有系统变量都具有GLOBALSESSION的作用范围。

有些系统变量是只读的,并不能设置值。

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

启动选项是程序启动的时候,我们传递的一些参数

系统变量是影响服务器程序运行行为的变量

  • 大部分的系统变量都可以作为启动选项进行传入

  • 有些系统变量是在程序运行过程中自动生成的

  • 有些启动选项不是系统变量

状态变量

我们通过状态变量来了解服务器程序的运行情况

如:

Threads_connected表示当前有多少客户端与服务器建立了连接

状态变量是用来显示服务器程序的运行状况的,所以他们的值只能由服务器程序自己来设置,程序员是不能设置的

不过,状态变量也有GLOBALand SESSION两个作用范围

查看状态变量的语句:

show [global|session] status [like匹配的模式];

同样我们不写明作用范围的话,默认的就是session

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值