MySQL是怎样运行的:(2)启动选项和系统变量
Session 2 启动选项和系统变量
对于在程序启动时指定的设置项,称之为启动选项(startup options),这些选项控制着程序启动后的行为。通常,在命令行中指定启动选项时需要在选项名前加上**--
前缀**。
指定启动选项的通用格式一般是这样的:(等号左右无空格)
1 | --启动选项1[=值1] --启动选项2[=值2] ... --启动选项n[=值n] |
1 | mysqld --default-storage-engine = MyISAM # 指定默认引擎 |
大多数程序提供了一个--help
选项,你可以查看该程序支持的全部启动选项以及它们的默认值。
有时会对一些常用的启动选项提供短形式,例如:
长形式 | 短形式 | 含义 |
---|---|---|
--host |
-h |
主机名 |
--user |
-u |
用户名 |
--password |
-p |
密码 |
--port |
-P |
端口 |
--version |
-V |
版本信息 |
为了使下一次重启程序时保留这些启动选项,需要把启动选项写在配置文件(这里又称选项文件)中,
在类UNIX
操作系统中,MySQL
会按照下列路径来寻找配置文件:
路径名 | 备注 |
---|---|
/etc/my.cnf |
|
/etc/mysql/my.cnf |
|
SYSCONFDIR/my.cnf |
|
$MYSQL_HOME/my.cnf |
特定于服务器的选项(仅限服务器) |
defaults-extra-file |
命令行指定的额外配置文件路径 |
~/.my.cnf |
用户特定选项 |
~/.mylogin.cnf |
用户特定的登录路径选项(仅限客户端) |
如果在多个配置文件中设置了相同的启动选项,那以按上表顺序为优先级,以最后一个配置文件中的为准。
MYSQL_HOME
是一个环境变量,该变量的值是我们自己设置的。我们可以在该路径下创建一个my.cnf
配置文件,那么这个配置文件中只能放置关于启动服务器程序相关的选项。
可以通过指定defaults-extra-file
参数的值来添加额外的配置文件路径。(至于defaults-file
是另一个启动项,指定只到指定路径去找配置文件;这两个启动选项只能作用在命令行)
配置文件中的启动选项被划分为若干个组,每个组有一个组名,用中括号[]
扩起来,像这样:
1 | [server] |
每种启动命令都有其对应的能读取的选项组:
启动命令 | 类别 | 能读取的组 |
---|---|---|
mysqld |
启动服务器 | [mysqld] 、[server] |
mysqld_safe |
启动服务器 | [mysqld] 、[server] 、[mysqld_safe] |
mysql.server |
启动服务器 | [mysqld] 、[server] 、[mysql.server] |
mysql |
启动客户端 | [mysql] 、[client] |
mysqladmin |
启动客户端 | [mysqladmin] 、[client] |
mysqldump |
启动客户端 | [mysqldump] 、[client] |
[server]
组下面的启动选项将作用于所有的服务器程序。[client]
组下面的启动选项将作用于所有的客户端程序。
类似[mysqld-5.7]
的选项组,它的含义和[mysqld]
一样,只不过只有版本号为5.7
的mysqld
程序才能使用这个选项组中的选项。
如果同一个启动选项既出现在命令行中,又出现在配置文件中,那么以命令行中的启动选项为准。
启动选项与系统变量的关系是大体相交的。启动选项的名称可以用短划线-
或者下划线_
连接单词,但是系统变量必须使用下划线_
连接。
对于大部分系统变量来说,它们的值可以在服务器程序运行过程中进行动态修改。系统变量的作用范围分为这两种:
GLOBAL
:全局变量,影响服务器的整体操作。SESSION
:会话变量,影响某个客户端连接的操作。(注:SESSION
有个别名叫LOCAL
)
系统变量的初始值由命令行或选项文件赋予。通过启动选项设置的系统变量的作用范围都是GLOBAL
的。
通过客户端程序设置或系统变量:
1 | SET [GLOBAL|SESSION] 系统变量名 = 值; |
MySQL
服务器程序中维护了很多关于程序运行状态的变量,它们被称为状态变量
。比方说Threads_connected
表示当前有多少客户端与服务器建立了连接,Handler_update
表示已经更新了多少行记录等。显然,它们的值只能由服务器程序自己来设置,我们是不能设置的。
1 | SHOW [GLOBAL|SESSION] STATUS [LIKE 匹配的模式]; |
可以通过@@变量名
(不区分大小写)来获取系统变量值
1 | mysql> select @@version; |