启动选项

MySQL 程序启动时指定的设置项成为启动变量(startup option)

例如服务器允许同时连入的客户端的默认数量是151,表的默认存储引擎是InnoDB

在 MySQL 安装目录的 bin 目录下的各种可执行文件(包括服务器相关的程序mysqldmysqld_safe等,客户端相关程序mysqlmysqladmin等)基本都可以指定启动选项

指定选项的方法

1.命令行

只对当次启动有效。

进程通信设置:在启动服务器程序时禁止各客户端使用TCP/IP网络进行通信

1
mysqld --skip-networking

等价写法:(启动选项前添加--,启动选项由多个单词组成,之间添加_或者-)

1
mysqld --skip_networking

按照该命令启动服务器程序,再使用mysql来启动客户端程序,把服务器主机名指定为127.0.0.1的话会显示连接失败。

1
2
3
4
mysql -h127.0.0.1 -uroot -p
Enter password:

ERROR 2003 (HY000):Can't connect to MySQL server on '127.0.0.1'

存储引擎设置:在启动服务器程序时指定默认存储引擎

1
mysqld --default-storage-engine=MyISAM

然后在客户端程序连接到服务器程序后创建的表默认就是用启动选项中指定的类型。

可以使用以下命令查询表的结构(包括存储引擎):

1
SHOW CREATE TABLE {Table_name};

查看启动选项帮助信息:

1
2
3
mysql --help
mysqld_safe --help
mysqld --verbose --help

总结

  • 通用格式:

    1
    
    mysqld --option_1[=value_1] --optio_2[=value_2]  ...  --option_n[=value_n]
  • 某些选项不需要指定值,例如skip-networking等。

  • 启动选项前添加--,启动选项由多个单词组成,之间添加_或者-

  • 选项名、=、选项值之间不可以由空白字符。

  • 选项的长形式和短形式:

短形式只需要添加一个短划线前缀

1
mysqld -P 3306

2.配置文件

在配置文件中,不同的选项组给不同的程序使用。其中,[server]组下面的启动选项作用于所有的服务器程序,[client]组下面的作用于所有的客户端程序。

2.1 配置文件路径

类 UNIX 操作系统中

路径名 备注
/etc/my.conf
/etc/mysql/my.conf
SYSCONFDIR/my.cnf
$MYSQL_HOME/my.conf 特定于服务器的选项(仅限服务器)
defaults-extra-file 命令行指定的额外配置文件路径
~/.my.conf 特定于用户的选项
~/.mylogin.conf 特定于用户的登陆路径选项(仅限客户端)

2.2 配置文件的内容

[server]
skip-networking
default-storage-engine=MyISAM

[mysqld]
.....

[mysqld_safe]
.....

[client]
.....

[mysql]
.....

[mysqladmin]
.....

2.3 程序的对应类别和能读取的组

程序名 类别 能读取的组
mysqld 启动服务器 [mysqld]、[server]
mysqld_safe 启动服务器 [mysqld]、[server]、[mysqld_safe]
mysql.server 启动服务器 [mysqld]、[server]、[mysql.server]
mysql 启动客户端 [mysql]、[client]
mysqladmin 启动客户端 [mysqladmin]、[client]
mysqldump 启动客户端 [mysqldump]、[client]

2.4 特定 MySQL 版本的专用选项组

可以定义一个[mysqld-5.7]的选项组,含义和[mysqld]一样,不过只有版本号为 5.7 的mysqld程序才能使用这个选项组中的配置。

2.5 配置文件的优先级

  • MySQL 将在某些固定的路径下搜索配置文件(配置文件路径表中的顺序依次读取各个文件,越后面的文件优先级越高)
  • MySQL 也可以通过在命令行中指定defaults-extra-file启动选项来指定额外的配置文件路径

2.6 同一个配置文件中的优先级

越靠后的优先级越高。

2.7 defaults-file 的使用

  • 不搜索默认路径下的配置文件

    1
    
    mysqld --defaults-file=/tmp/myconfig.txt
  • 搜索默认的配置文件路径

    1
    
    mysqld --defaults-extra-file=/tmp/myconfig.txt

3.命令行和配置文件中启动选项的优先级

命令行 > 配置文件

系统变量

大多数系统变量的值都可以在程序运行过程中修改,而无需停止并重启服务器。

查看系统变量

SHOW VARIABLES [LIKE 匹配的模式];

如,查询以 default 开头的系统变量的值

1
SHOW VARIABLES LIKE 'default%';

设置系统变量

通过命令行添加启动选项

1
mysqld --default-storage-engine=MyISAM --maxconnections=10

通过配置文件添加启动选项

1
2
3
[server]
default-storage-engine=MyISAM
max-connections=10

通常情况下,长变量之间建议使用_连接。对于⼤部分系统变量来说,它们的值可以在服务器程序运⾏过程中进⾏动态修改⽽⽆需停⽌并重启服务器。

系统变量的作用范围

  • GLOBAL:全局变量,影响服务器的整体操作。
  • SESSION:会话变量(可以理解为私有的系统变量),影响某个客户端连接的操作。(注:SESSION有个别名叫LOCAL)

在服务器启动时,会将每个全局变量初始化为其默认值(可以通过命令⾏或选项⽂件中指定的选项更改这些默认值)。然后服务器还为每个连接的客户端维护⼀组会话变量,客户端的会话变量在连接时使⽤相应全局变量的当前值初始化。这话有点⼉绕,还是以default_storage_engine举例,在服务器启动时会初始化⼀个名为default_storage_engine,作⽤范围为GLOBAL的系统变量。之后每当有⼀个客户端连接到该服务器时,服务器都会单独为该客户端分配⼀个名为default_storage_engine,作⽤范围为SESSION的系统变量,该作⽤范围为SESSION的系统变量值按照当前作⽤范围为GLOBAL的同名系统变量值进⾏初始化。

指定系统变量的作用范围

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

或者

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

例如,需要修改default_storage_engine变量的值,

全局变量的修改:

语句⼀:SET GLOBAL default_storage_engine = MyISAM;
语句⼆:SET @@GLOBAL.default_storage_engine = MyISAM;

会话变量的修改:

语句⼀:SET SESSION default_storage_engine = MyISAM;
语句⼆:SET @@SESSION.default_storage_engine = MyISAM;
语句三:SET default_storage_engine = MyISAM;

SET 系统变量名 = 值 <=> SET SESSION 系统变量名 = 值

查看不同作用范围的系统变量

SHOW [GLOBAL|SESSION] VARIABLES [LIKE 匹配的模式];

例如:

1
2
SHOW SESSION VARIABLES LIKE 'default_storage_engine';
SHOW GLOBAL VARIABLES LIKE 'default_storage_engine';

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

2.并不是所有系统变量都具有GLOBAL和SESSION的作⽤范围

有⼀些系统变量只具有GLOBAL作⽤范围,比如max_connections,表示服务器程序⽀持同时最多有多少个客户端程序进⾏连接。有⼀些系统变量只具有SESSION作⽤范围,⽐如insert_id,表示插⼊值时使⽤的AUTO_INCREMENT修饰的列的值。有⼀些系统变量的值既具有GLOBAL作⽤范围,也具有SESSION作⽤范围,⽐如我们前边⽤到的default_storage_engine,⽽且其实⼤部分的系统变量都是这样的,

3.有些系统变量是只读的,并不能设置值,如version

4.系统变量和启动选项的关系

有些系统变量是在程序运⾏过程中⾃动⽣成的,是不可以当作启动选项来设置,⽐如auto_increment_offsetcharacter_set_client。有些启动选项也不是系统变量,⽐如defaults-file

状态变量

⽤来显示服务器程序运⾏状况。与系统变量类似,状态变量也有GLOBALSESSION两个作⽤范围。

查看状态变量

SHOW [GLOBAL|SESSION] STATUS [LIKE 匹配的模式];