启动选项(startup options)
定义: MySQL有很多设置项,如存储引擎,客户端连接数量,缓存大小等,这些设置项在配置文件中都有默认值,在启动MySQL时可以在启动命令后面加一些参数来修改这些默认值,对于这些在程序启动时指定的设置项就称为启动选项
通用格式:
--启动选项1[=值1] --启动选项2[=值2] ... --启动选项n[=值n]
命令行启动选项规则:
在选项名前加上
--
前缀选项名是由多个单词构成的,它们之间可以由短划线
-或_
连接起来各个启动选项之间使用空白字符隔开
不需要值的启动选项,不需要指定对应的值,需要指定值的启动选项,需要显式的指定它的值,有值的启动选项时需要注意,选项名、=、选项值之间不可以有空白字符
例:
禁止各客户端使用使用TCP/IP
网络进行通信:
mysqld --skip-networking 与 mysqld --skip_networking 是等效的
设置默认存储引擎:
mysqld --default-storage-engine=MyISAM
查看MySQL支持的全部启动选项以及它们的默认值: --help
如: mysql --help , mysqld_safe --help
上述都是长形式的选项,为使用方便,也可以使用短形式选项
短形式的选项名只有一个字母,在选项名前只加一个短划线-
前缀,区分大小写,选项名和选项值之间可以没有间隙,或者用空白字符隔开(-p
选项较特殊,-p
和密码值之间不能有空白字符) 如: mysqld -P3307 与 mysqld -P 3307 等价
在命令行中设置启动选项只对当次启动生效!下一次重启程序的时候如果还想保留这些启动选项的话,需要重复把这些选项写到启动命令行中
配置文件(选项文件)
MySQL
程序在启动时会寻找多个路径下的配置文件,这些路径有的是固定的,有的是可以在命令行指定的
Windows操作系统的配置文件
在Windows
操作系统中,MySQL
会按照下列路径顺序来寻找配置文件:

注意:
前三行路径中,配置文件扩展名可以使用
.ini
,也可以使用.cnf%WINDIR%
指Windows
目录的位置,通常是C:\WINDOWS
,可以使用命令echo %WINDIR% 进行查看BASEDIR
指MySQL
安装目录第4行指的是我们在启动程序时可以通过指定
defaults-extra-file
参数的值来添加额外的配置文件路径,如: mysqld --defaults-extra-file=C:\Users\xiaohaizi\my_extra_file.txt
%APPDATA%
表示Windows
应用程序数据目录,可以使用命令echo %APPDATA% 进行查看.mylogin.cnf
配置文件比较特殊,它不是一个纯文本文件,而是使用mysql_config_editor
实用程序创建的加密文件,文件中只能包含一些用于启动客户端软件时连接服务器的一些选项,包括host
、user
、password
、port
和socket
,且它只能被客户端程序所使用
类Unix操作系统的配置文件

注意:
SYSCONFDIR
表示在使用CMake
构建MySQL
时使用SYSCONFDIR
选项指定的目录,默认情况下位于编译安装目录下的etc
目录MYSQL_HOME
是一个环境变量,该变量的值是我们自己设置的,可设置也可不设置,该变量的值代表一个路径,我们可以在该路径下创建一个my.cnf
配置文件,这个配置文件中只能放置关于启动服务器程序相关的选项(其他的配置文件既能存放服务器相关的选项也能存放客户端相关的选项,.mylogin.cnf 除外)最后两个以
~
开头的路径是用户目录,不同的类UNIX
系统的用户都可以在自己的用户目录下创建.my.cnf
或者.mylogin.cnf
,即不同登录用户使用的.my.cnf
或者.mylogin.cnf
配置文件是不同的defaults-extra-file
和.mylogin.cnf的含义同Windows
配置文件的内容
配置文件中的启动选项被划分为若干个组,每个组有一个组名,用中括号[]
扩起来,每个组下边可以定义若干个启动选项
如下:
[server]option1 #这是option1,该选项不需要选项值option2 = value2 #这是option2,该选项需要选项值...[mysqld]option1 #这是option1,该选项不需要选项值option2 = value2 #这是option2,该选项需要选项值...
配置文件指定启动选项规则:
语法类似于命令行语法,但只能使用长形式的选项且不允许加
--
前缀每行只指定一个选项,且
=
周围可以有空白字符可以使用
#
来添加注释不同的选项组是给不同的启动命令使用的,如果选项组名称与程序名称相同,则组中的选项将专门应用于该程序。例如,
[mysqld]
和[mysql]
组分别应用于mysqld
服务器程序和mysql
客户端程序. 特殊组:[server]
组作用于所有的服务器程序,[client]
组作用于所有的客户端程序,mysqld_safe
和mysql.server
这两个程序在启动时都会读取[mysqld]
选项组中的内容
各程序启动读取组列表:

mysql.server程序仅支持start和stop作为命令行参数,它的启动参数必须放在配置文件中
在选项组的名称后加上特定的MySQL
版本号,则表示只有指定版本号的mysqld
程序才能使用这个选项组中的选项,如: 选项组[mysqld-5.7]只有版本号为5.7
的mysqld
程序才能使用。
配置文件的优先级
MySQL
将按照我们在上表中给定的顺序依次读取各个配置文件,如果该文件不存在则忽略如果多个配置文件中设置了相同的启动选项,则以最后一个配置文件中的为准
同一个配置文件的多个组设置了相同的启动选项,以最后一个组的启动选项为准
如果我们不想让
MySQL
到默认的路径下搜索配置文件(就是上表中列出的那些),可以在命令行指定defaults-file
选项,如果选项指定的文件不存在或无法访问,则会发生错误, 例如: mysqld --defaults-file=/tmp/myconfig.txt
命令行和配置文件中启动选项的区别
命令行上指定的绝大部分启动选项都可以放到配置文件中
部分专门为命令行设计的选项如
defaults-extra-file
、defaults-file
本身就是用来指定配置文件路径的,再放在配置文件中使用就没意义了如果同一个启动选项既出现在命令行又出现在配置文件中,以命令行中的选项为准
系统变量
定义: MySQL
服务器程序运行过程中会用到许多影响程序行为的变量,这些变量被称为MySQL
系统变量,每个系统变量都有一个默认值,可以使用命令行或者配置文件中的选项在启动服务器时改变一些系统变量的值,大多数的系统变量的值也可以在程序运行过程中修改,而无需停止并重新启动 MySQL
系统变量的作用范围
GLOBAL
:全局变量,影响服务器的整体操作
SESSION
:会话变量,影响某个客户端连接的操作(SESSION
有个别名叫LOCAL
)
服务器启动时,会将每个全局变量初始化为其默认值(可以通过命令行或选项文件更改这些默认值)。然后服务器还为每个连接的客户端维护一组会话变量,客户端的会话变量在连接时的初始值使用当前相应全局变量的值.
如: default_storage_engine,服务器启动时会初始化一个名为default_storage_engine
,作用范围为GLOBAL
的系统变量,之后每一个客户端连接到该服务器时,服务器都会单独为该客户端分配一个作用范围为SESSION
的default_storage_engine系统变量,该作用范围为SESSION
的系统变量的初始值为当前作用范围为GLOBAL
的同名系统变量的值
通过启动选项设置的系统变量的作用范围都是GLOBAL
的
查看系统变量
SHOW [GLOBAL|SESSION] VARIABLES [LIKE 匹配的模式];
省略作用范围时默认查看的是SESSION
作用范围的系统变量
设置系统变量
一. 通过启动选项设置
1. 通过命令行添加启动选项
如:
mysqld --default-storage-engine=MyISAM --max-connections=10
2. 通过配置文件添加启动选项
如:
[server]default-storage-engine=MyISAMmax-connections=10
二. 服务器程序运行过程中设置
SET [GLOBAL|SESSION] 系统变量名 = 值; # 方式一SET [@@(GLOBAL|SESSION).]var_name = XXX; # 方式二
如果客户端设置系统变量的时省略作用范围,其默认作用范围为SESSION
如果某个客户端改变了某个系统变量在`GLOBAL`作用范围的值,并不会影响该系统变量在当前已经连接的客户端作用范围为`SESSION`的值,只会影响后续连入的客户端在作用范围为`SESSION`的值
注意:
大部分的系统变量同时支持
GLOBAL
和SESSION
作用范围部分系统变量只有
GLOBAL
作用范围,如max_connections
,表示服务器程序最多支持同时连接多少个客户端程序部分系统变量只具有
SESSION
作用范围,如insert_id
,表示在对某个包含AUTO_INCREMENT
列的表进行插入时,该列的初始值有些系统变量是只读的,不能设置值,如
version
,表示当前MySQL
的版本
启动选项和系统变量的区别
启动选项
是在程序启动时我们程序员传递的一些参数,系统变量
是影响服务器程序运行行为的变量大部分的系统变量都可以被当作启动选项传入
有些系统变量是在程序运行过程中自动生成的,不可以当作启动选项用来设置,如
auto_increment_offset
、character_set_client有些启动选项也不是系统变量,比如
defaults-file
状态变量
为了更好的了解服务器程序的运行情况,MySQL
服务器程序中维护了很多关于程序运行状态的变量,它们被称为状态变量
如: 表示当前有多少客户端与服务器建立了连接的Threads_connected,表示已经更新了多少行记录的Handler_update
状态变量
是用来显示服务器程序运行状况的,它们的值只能由服务器程序自己设置
与系统变量
类似,状态变量
也有GLOBAL
和SESSION
两个作用范围
查看状态变量
SHOW [GLOBAL|SESSION] STATUS [LIKE 匹配的模式];
类似的,如果不写明作用范围,默认的作用范围是SESSION




