许多 MySQL 程序都有内部变量,可以在运行时使用
SET
语句设置。请参阅第 13.7.6.1 节,“变量赋值的 SET 语法”和
第 5.1.9 节,“使用系统变量”。
大多数这些程序变量也可以在服务器启动时设置,方法是使用适用于指定程序选项的相同语法。例如,mysql有一个
max_allowed_packet
变量控制其通信缓冲区的最大大小。要将
mysqlmax_allowed_packet
的变量
设置为 16MB 的值,请使用以下任一命令:
mysql --max_allowed_packet=16777216
mysql --max_allowed_packet=16M
第一个命令以字节为单位指定值。第二个以兆字节为单位指定值。对于采用数值的变量,该值可以后缀
K
,M
或
G
表示乘数 1024、1024 2或 1024 3。(例如,当用于设置 时
max_allowed_packet
,后缀表示单位为千字节、兆字节或千兆字节。)从 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
在程序调用时设置变量时可以使用用于指定值乘数的后缀,但不能
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;