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

2、MySQL的调控按钮–启动选项和系统变量


声明:此博客是本人学习《MySQL是怎样运行的:从根儿上理解MySQL》的学习笔记,侵权必删。如果你发现博客中有错误,还请告诉我,我会第一时间修改并给予您诚挚的感谢ღ( ´・ᴗ・` )。

启动选项

定义

在程序启动时可以设置一些控制程序后续操作的选项,叫做启动项。在MySQL的bin目录下的可执行文件基本都可以设置启动选项。

MySQL程序的启动选项可以在命令行中指定,也可以在配置文件中指定,下面我们来具体看看这两种指定方式有何区别。

在命令行上使用选项

在命令行上使用启动选项的通用格式为:

服务名称 --启动项1[=值1] --启动项2[=值2] … --启动项n[=值n]


也就是说,我们可以在一个程序后面设置多个启动选项,每个启动选项之间用空格分开。

对于命令行上设置的启动选项,有以下注意事项:
  • 对于长名称的启动项(如default-storage-engine等),前面都要加上“--”,且名称与“--”之间不能有空格;对于短名称的启动项(如-h等),其前面要加上“-”,同样不能有空格;
  • 如果启动项必须指定值(如default-storage-engine需要指定存储引擎),其值与启动项名称中间用“=”连接;
  • 选项区分大小写,如-p表示密码,-P表示端口号。
MySQL程序有那么多的选项,怎么查看启动选项呢?

大多数程序都提供了“--help”选项,可以通过该选项查看程序的所有支持的选项及其默认值;

有一个例外:mysqld,其需要使用mysqld --verbose --help查看。

选项的长名称和短名称

为了使用的方便,设计人员将一些常用的长名称选项添加了对应的短名称,如hosth。长短名称之间有如下区别:

  • 前缀不同:长名称前要加“--”,短名称前加“-”
  • 规则不同:在选项有值的情况下,长名称的选项与其值之间不能有空格,短名称选项与值之间可以有。如:-h root-hroot
其他

启动选项具有传递性。比如通过mysqld_safe --skip_networking来启动一个服务器程序,mysqld_safe并不会处理这个选项,因为mysqld_safe内部调用了mysqld,该选项就会传递给mysqld使用。

在配置文件中使用选项(推荐)

MySQL程序在启动时,会从配置文件中读取对应的配置信息,用来指导程序的各种行为,而Windows系统下和类Unix系统下配置文件的位置和名称是不同的,下面就两类平台的配置文件进行具体说明。

对于Windows系统,MySQL程序执行时会依次读取下述配置文件:
路径名备注
%WINDIR\my.ini ,%WINDIR%\my.cnfWindows目录的位置,一般是C:\\WINDOWS
C:\my.ini,C:\my.cnf
BASEDIR\my.ini,BASEDIR\my.cnfBASEDIRMySQL安装目录的路径
defaults-extra-file命令行中指定的额外配置文件路径
%APPDATA%\MySQL\mylogin.cnf登录路径选项(仅限客户端),APPDATAWindows数据存储的位置。只有该文件不是文本文件,需要用mysql_config_editor实用工具来修改。
对于类Unix系统,MySQL程序执行时会依次读取下述配置文件:
路径名备注
/etc/my.cnf
/etc/mysql/my.cnf
SYSCONFDIR/my.cnf在使用CMake构建MySQL时使用SYSCONFDIR选项指定的目录
$MYSQL_HOME/my.cnf特定于服务器的选项(仅限服务器)。
这个文件需要我们自己创建,如果我们不创建,默认是MySQL安装目录。
defaults-extra-file命令行指定的额外配置文件路径
~/.my.cnf用户特定选项
~/.mylogin.cnf用户特定的登录路径选项(仅限客户端)
配置文件的内容

对于不同的启动选项,MySQL会在配置文件中将其分组,比如只能设置于服务器的选项、只能设置在客户端的选项等等。

# 配置文件具体格式如下:
[分组名1]         # 分组名要用中括号[]括起来
option1          # 该选项不需要值
option2 = value2 # 该选项的值为 value2
...              # 还可以有更多的启动选项

[分组名2] 
...

...              # 还可以有更多的分组

在一个配置文件中可以有多个分组,每个分组下可以有多个启动选项。例如下方就是一个配置文件的例子:

[client]
# pipe=
# socket=MYSQL
port=3306

[mysql]
no-beep

对于配置文件的内容,有以下注意事项

  • 配置文件中的选项名必须是长名称,且不带任何前缀(“–“或”-”);

  • 若选项带值,"="与名称、值之间可以有空格,也可以没有;

  • 不同分组都按分组名单独为某一程序使用,比如分组[mysqld]只能被mysqld程序使用,但有两个配置文件例外:

    • [server]:这个分组下面的选项服务于所有服务器程序,
    • [client]:这个分组下面的选项服务于所有客户端程序;
  • 上面说过,程序对配置文件的读取都是有顺序的,如果两个配置文件中,或者一个配置文件中的不同位置上有选项重复或冲突,则以后读取的那个为准。

  • 如果想要指定服务器的版本才能使用某个选项,可以在该选项分组名上添加版本号。

# 任何版本的mysqld程序都能使用
[mysqld]
(选项...)

# 如果我们在mysqld分组名上添加8.0版本号,那么只有8.0版本的mysqld程序才能使用该分组的选项
[mysqld-8.0]
(选项...)
修改读取配置文件的默认路径

之前表中列出的配置文件路径是每个mysql程序读取的默认路径,如果我们不想从默认路径读取,那么可以修改指定从哪一个路径读取:

mysqld --defaults-file=/tmp/myconfig.txt
# 经过这样的修改,现在mysqld程序只能从/tmp/myconfig.txt文件下读取配置文件
关于命令行和配置文件中使用启动选项的注意事项:
  • 如果一个启动选项同时出现在了命令行和配置文件中,以命令行中的为准
  • 有些启动选项是只能用在命令行中的,如设置额外配置文件的选项--defaults_config_file,设置默认读取路径的选项--defaults_file等。

系统变量

不同于启动选项,我们有时候并不想重启服务器,而是想在服务器运行时控制服务器的行为,这就需要用到系统变量。

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

系统变量的作用范围

有全局变量和会话变量两种,会话变量又称局部变量,分别用GLOBALSESSION(或LOCAL)表示。

全局变量对连接到服务器的所有客户端都生效,会话变量只对某一个客户端生效。

查看系统变量
可以通过如下语句查看系统变量:
# 查看全局变量
SHOW GLOBAL VARIABLES; -- 查看所有全局变量
SHOW GLOBAL VARIABLES LIKE '匹配值'; -- 查看对应匹配值的全局变量

# 查看会话变量
SHOW SESSION VARIABLES; -- 查看当前连接所有会话变量
SHOW SESSION VARIABLES LIKE '匹配值'; -- 查看对应匹配值的会话变量

# 对于匹配值的应用,如下图:

在这里插入图片描述

设置系统变量:
可以通过如下语句设置系统变量:
# 设置全局变量的两种语法
SET GLOBAL 变量名=变量值;
SET @@GLOBAL.变量名=变量值;

# 设置会话变量的两种语法
SET SESSION 变量名=变量值;
SET @@SESSION.变量名=变量值;

# 例如:
SET GLOBAL default_storage_engine = MyISAM;
	-- 等价于
SET @@GLOBAL.default_storage_engine = MyISAM;
也可以通过启动选项设置系统变量:
# 通过命令行
mysqld --default-storage-engine=MyISAM --max-connections=10

# 通过配置文件
[server]
default-storage-engine=MyISAM
max-connections=10
注意:
  • 大部分系统变量在设置之后不用重启服务器就可以生效,但是通过配置文件设置的系统变量需要重启
  • 如果设置全局变量,当前连接并不会生效,而是以后连入的连接才会生效
对于系统变量,有如下的注意事项:
  • 对于由多个单词组成的系统变量,单词之间必须用下划线"_“连接,而对应的启动选项可以用”__“或”-"连接;
  • 在查看和设置系统变量时,如果没有指定全局或者会话变量,默认是会话变量;如:
# 查看全部会话变量
SHOW VARIABLES;

# 设置会话变量
SET 变量名=变量值;
  • 不是所有的系统变量都有全局和会话之分,有些系统变量只有全局属性,比如max_connections,表示服务器的最大连接数,而有些系统变量只有会话属性,如insert_id,表示设置了AUTO_INCRIMENT的列在增加时的初始值;
  • 有些系统变量时只读的,不能修改其值,比如version

状态变量

定义:

表示程序运行状态的变量。

注意事项:
  • 状态变量不能被程序员设置,是程序运行过程中系统修改的;

  • 状态变量也有全局和会话之说,如果不指定,就是会话变量;

查看状态变量:
SHOW GLOBAL STATUS LIKE 'thread%'; -- 查看前缀是thread的全局状态变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值