4.2.2.5 使用选项设置程序变量

许多 MySQL 程序具有内部变量,可以在运行时使用SET语句进行设置。参见第 13.7.4.1 节“变量分配的 SET 语法”第 5.1.8 节“使用系统变量”

这些大多数程序变量也可以在服务器启动时通过使用与指定程序选项相同的语法进行设置。例如,mysql具有一个max_allowed_packet变量,该变量控制其通信缓冲区的最大大小。要将mysqlmax_allowed_packet变量设置为 16MB 的值,请使用以下命令之一:

mysql --max_allowed_packet=16777216
mysql --max_allowed_packet=16M

第一个命令以字节为单位指定值。第二个以兆字节为单位指定值。对于采用数值的变量,可以给该值加上后缀KMG(大写或小写),以 table 示乘数 1024、10242 或 10243.(例如,当用于设置max_allowed_packet时,后缀 table 示千字节,兆字节或千兆字节的单位.)

在选项文件中,变量设置不带前导破折号:

[mysql]
max_allowed_packet=16777216

Or:

[mysql]
max_allowed_packet=16M

如果愿意,可以将变量名中的下划线指定为破折号。以下选项组是等效的。两者都将服务器密钥缓冲区的大小设置为 512MB:

[mysqld]
key_buffer_size=512M

[mysqld]
key-buffer-size=512M

可以通过完整或任何明确的前缀将其写入来指定变量。例如,可以将mysqlmax_allowed_packet变量设置为--max_a,但不能将其设置为--max,因为后者不明确:

shell> mysql --max=1000000
mysql: ambiguous option '--max=1000000' (max_allowed_packet, max_join_size)

请注意,在为程序实现新变量的情况下,使用变量前缀可能会导致问题。现在明确的前缀将来可能会变得不明确。

在程序调用时设置变量时,可以使用用于指定值倍数的后缀,但不能在运行时使用SET来设置值。另一方面,通过SET,您可以使用 table 达式来分配变量的值,而在服务器启动时设置变量时则不正确。例如,以下第一行在程序调用时是合法的,但第二行不是:

shell> mysql --max_allowed_packet=16M
shell> mysql --max_allowed_packet=16*1024*1024

相反,以下第二行在运行时合法,但第一行则不合法:

mysql> SET GLOBAL max_allowed_packet=16M;
mysql> SET GLOBAL max_allowed_packet=16*1024*1024;