许多 MySQL 程序都有内部变量,可以在运行时使用SET
语句进行设置。参见 第 13.7.6.1 节 “变量赋值的 SET 语法” 和 第 5.1.9 节 “使用系统变量” 。
这些程序变量中的大多数也可以在服务器启动时使用与指定程序选项相同的语法进行设置。例如,mysql 有一个max_allowed_packet
变量,用于控制其通信缓冲区的最大大小。要将 mysql 的max_allowed_packet
变量设置为 16MB ,请使用以下任一命令:
mysql --max_allowed_packet=16777216
mysql --max_allowed_packet=16M
第一个命令以字节为单位指定值。第二个值以兆字节为单位指定值。对于采用数值的变量,该值可以用K、M或G作为后缀,以表示 1024 、1024^2 或 1024^3 的乘数。(例如,当用于设置max_allowed_packet
时,后缀表示单位为 K 字节、M 字节或 G 字节。)从 MySQL 8.0.14 开始,后缀也可以是 T、P 和 E ,表示乘数为 1024^4 、1024^5 或 1024^6 。后缀字母可以是大写或小写。
在选项文件中,变量设置可以不带前导短划线:
[mysql]
max_allowed_packet=16777216
或:
[mysql]
max_allowed_packet=16M
如果愿意,可以将选项名称中的下划线指定为短划线。以下选项组等效。两者都将服务器键缓冲区的大小设置为 512MB :
[mysqld]
key_buffer_size=512M
[mysqld]
key-buffer-size=512M
在程序调用时设置变量时,可以使用指定值乘数的后缀(比如 K , M , G 等),但在运行时不能使用SET
设置该值。另一方面,使用SET
,您可以使用表达式分配变量的值,当您在服务器启动时设置变量时,这是不正确的。例如,以下第一行在程序调用时合法,但第二行不合法:
$> mysql --max_allowed_packet=16M
$> mysql --max_allowed_packet=16*1024*1024
相反,以下第二行在运行时是合法的,但第一行不合法:
mysql> SET GLOBAL max_allowed_packet=16M;
mysql> SET GLOBAL max_allowed_packet=16*1024*1024;