MySQL启动选项和配置文件

编程 · 01-29 · 217 人浏览

命令行中使用选项

--skip-networking:禁止客户端使用TCP/IP网络进⾏通信,可在启动服务器程序的命令行⾥添加该选项:mysqld --skip-networking

--default-storage-engine:修改表的默认存储引擎,例如:mysqld --default-storage-engine=MyISAM

--help:查看程序⽀持的全部启动选项以及默认值,例如:mysqld_safe --help看到mysqld_safe程序⽀持的启动选项。查看mysqld⽀持的启动选项有些特别,需要使⽤mysqld--verbose --help

选项长形式和短形式

短形式的选项名只有⼀个字⺟,与使用长形式选项时需要在选项名前加两个短划线--不同的是,使⽤短形式选项时在选项名前只加⼀个短划线-前缀。

使用短形式指定启动选项时,选项名和选项值之间可以没有间隙,或者用空⽩字符隔开。

配置文件中使用选项

在命令行中设置启动选项只对当次启动⽣效,也就是说如果下⼀次重启程序的时候我们还想保留这些启动选项的话,还得重复把这些选项写到启动命令行中。

可以把需要设置的启动选项都写在配置⽂件中,每次启动服务器的时候都从这个⽂件⾥加载相应的启动选项。由于这个配置⽂件可以⻓久的保存在计算机的硬盘⾥,所以只需配置⼀次,以后就都不用显式的把启动选项都写在启动命令行中了,所以推荐使用配置⽂件的方式来设置启动选项。

配置文件路径

配置文件可以使用.ini扩展名,也可以使用.cnf扩展名。

可以通过指定defaults-extra-file参数来添加额外的配置文件路径,例如在命令行上可以这么写:mysqld --defaults-extra-file=C:\Users\abc\my_extra_file.txt,这样MySQL服务器启动时就会额外查找这个配置文件。

配置文件内容

配置文件中的启动选项被划分为若干个组,每组有一个组名,用中括号[]扩起来,组下边可以定义若干个启动选项。

配置文件中只能使用长形式选项,且不允许加--前缀,并且每行只指定一个选项,而且=周围可以有空白字符。另外,可以使用#来添加注释,从#出现直到行尾的内容都属于注释内容,读取配置文件时会忽略这些注释内容。

  • [mysqld][mysql]组分别应用于mysqld服务器程序和mysql客户端程序
  • [server]组作用于所有服务器程序,[client]组作用于所有客户端程序
启动命令类别能读取的组
mysqld启动服务器[mysqld][server]
mysqld_safe启动服务器[mysqld][server][mysqld_safe]
mysql.server启动服务器[mysqld][server][mysql.server]
mysql启动客户端[mysql][client]
mysqladmin启动客户端[mysqladmin][client]
mysqldump启动客户端[mysqldump][client]

特定MySQL版本专用选项组:可在选项组名称后加上特定的MySQL版本号,比如对于[mysqld]选项组来说,定义一个[mysqld-5.7]选项组,它的含义和[mysqld]一样,只不过只有版本号为5.7的mysqld程序才能使用这个选项组中的选项。

配置文件优先级

MySQL会按照给定顺序依次读取各个配置文件,如果文件不存在则忽略。值得注意的是,如果在多个配置文件中设置了相同的启动选项,那以最后一个配置文件中的为准。

同一个配置文件中多个组优先级:比如mysqld可以访问[mysqld][server]组,如果在同一个配置文件中出现同样的配置项,将以最后一个出现的组中启动选项为准。

如果不想让MySQL到默认路径下搜索配置文件,可在命令行指定defaults-file选项,比如:mysqld --defaults-file=/tmp/myconfig.txt,这样,在程序启动时将只在/tmp/myconfig.txt路径下搜索配置文件。如果文件不存在或无法访问,则会发生错误。

另外需要特别注意,如果同一个启动选项既出现在命令行中,又出现在配置文件中,那么以命令行中的启动选项为准。

系统变量

查看系统变量:SHOW VARIABLES [LIKE 匹配模式];,默认查看SESSION作用范围的系统变量。

设置系统变量:可通过启动选项(命令行或配置文件)来设置系统变量。

作用范围

系统变量作用范围分两种:

  • GLOBAL:全局变量,影响服务器整体操作
  • SESSION:会话变量,影响某个客户端连接操作,SESSION有个别名叫LOCAL

在服务器程序运行期间通过客户端程序设置系统变量的语法:

SET [GLOBAL|SESSION] 系统变量名 = 值;
# 或者
SET [@@(GLOBAL|SESSION).]var_name = XXX;

如果在设置系统变量语句中省略了作用范围,默认作用范围是SESSION

如果某个客户端改变了某个系统变量在GLOBAL作用范围的值,并不会影响该系统变量在当前已经连接客户端作用范围为SESSION的值,只会影响后续连入的客户端在作用范围为SESSION的值。

状态变量

状态变量是用来显示服务器程序运行状况的,它们的值只能由服务器程序自己来设置,是不能人为设置的。与系统变量类似,状态变量也有GLOBALSESSION两个作用范围,查看语句为:SHOW [GLOBAL|SESSION] STATUS [LIKE 匹配的模式];,如果不写明作用范围,默认是SESSION

MySQL
Theme Jasmine by Kent Liao