MySQL服务器维护许多配置其操作的系统变量。第5.1.8节,“服务器系统变量”,描述了这些变量的含义。每个系统变量都有一个默认值。可以在服务器启动时使用命令行或选项文件中的选项设置系统变量。的方法可以在服务器运行时动态更改它们中的大多数集
语句,该语句使您能够修改服务器的操作,而不必停止和重新启动服务器。您还可以在表达式中使用系统变量值。
许多系统变量是内建的。系统变量也可以通过服务器插件或组件安装:
由服务器插件实现的系统变量在安装插件时公开,其名称以插件名称开头。例如,
audit_log
Plugin实现了一个名为audit_log_policy
.组件实现的系统变量在安装组件时公开,其名称以特定于组件的前缀开头。例如,
log_filter_dragnet
错误日志过滤器组件实现了一个名为log_error_filter_rules
,其全称为dragnet.log_error_filter_rules
.要引用此变量,请使用全名。
存在系统变量的范围有两个。全局变量会影响服务器的整体操作。会话变量影响其对个别客户端连接的操作。给定的系统变量可以同时具有全局值和会话值。全局系统变量和会话系统变量的关系如下:
当服务器启动时,它将每个全局变量初始化为默认值。可以通过在命令行或选项文件中指定的选项更改这些默认值。(见第4.2.2节“指定程序选项”.)
服务器还为每个连接的客户机维护一组会话变量。客户端的会话变量在连接时使用相应全局变量的当前值进行初始化。例如,客户机的SQL模式由会话控制
sql_mode
值,该值在客户机连接到全局变量的值时初始化sql_mode
价值。对于某些系统变量,会话值不是由相应的全局值初始化的;如果是,将在变量描述中指明。
通过在命令行或选项文件中使用选项,可以在服务器启动时全局设置系统变量值。在启动时,系统变量的语法与命令选项相同,因此在变量名中,破折号和下划线可以互换使用。例如,——general_log =
而且——general-log =
是等价的。
当使用启动选项设置接受数值的变量时,该值可以用后缀的K
,米
,或G
(大写或小写)表示1024的乘数2或10243.;即,单位分别为千字节、兆字节或千兆字节。从MySQL 8.0.14开始,后缀也可以是T
,P
,E
表示1024的乘数4, 1024年5或10246.因此,下面的命令使用InnoDB
日志文件大小为16mb,最大包大小为1g:
mysqld——innodb-log-file-size = 16 m max-allowed-packet = 1 g
在一个选项文件中,这些变量是这样设置的:
(mysqld) innodb_log_file_size = 16 m max_allowed_packet = 1 g
后缀字母的字母大小写并不重要;16米
而且16米
是等价的,是吗1克
而且1克
.
控件来限制运行时可以设置系统变量的最大值集
语句,通过使用该形式的选项指定该最大值——最大
在服务器启动。例如,防止的值var_name
=价值
innodb_log_file_size
从运行时增加到超过32MB,使用该选项——maximum-innodb-log-file-size = 32米
.
方法可以在运行时更改许多系统变量集
声明。有关列表,请参见第5.1.9.2节“动态系统变量”.用。改变一个系统变量集
,通过名称引用它,前面可选地加上修饰符。在运行时,系统变量名必须使用下划线,而不是破折号。下面的例子简要说明了这种语法:
设置一个全局系统变量:
SET GLOBAL max_connections = 1000;设置@@GLOBAL。max_connections = 1000;
将全局系统变量持久化到
mysqld-auto.cnf
文件(并设置运行时值):SET PERSIST max_connections = 1000;设置@@PERSIST。max_connections = 1000;
将全局系统变量持久化到
mysqld-auto.cnf
文件(不设置运行时值):设置PERSIST_ONLY back_log = 1000;设置@@PERSIST_ONLY。back_log = 1000;
设置一个会话系统变量:
SET SESSION sql_mode = ' tradition ';设置@@SESSION。sql_mode='TRADITIONAL'; SET @@sql_mode = 'TRADITIONAL';
有关有关集
语法,看第13.7.6.1节“变量赋值的SET语法”.有关设置和持久化系统变量的特权需求的描述,请参见第5.1.9.1节“系统变量特权”
在服务器启动时设置变量时,可以使用用于指定值乘数的后缀,但不能使用集
在运行时。另一方面,与集
可以使用表达式指定变量的值,但在服务器启动时设置变量时不能这样做。例如,下面的第一行在服务器启动时是合法的,但第二行是不合法的:
shell> mysql——max_allowed_packet=16*1024*1024
相反,下面的第二行在运行时是合法的,但第一行是不合法的:
SET GLOBAL max_allowed_packet=16M;SET GLOBAL max_allowed_packet=16*1024*1024;
要显示系统变量名和值,请使用显示变量
声明:
mysql >显示变量;+---------------------------------+-----------------------------------+ | Variable_name |值 | +---------------------------------+-----------------------------------+ | auto_increment_increment | 1 | | auto_increment_offset | 1 | | automatic_sp_privileges上| | | back_log | 151 | | basedir | /home/mysql/ | | binlog_cache_size | 32768 | | bulk_insert_buffer_size | 8388608 | | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8mb4 | |Character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8mb4 | | character_set_system | utf8 utb10 | character_sets_dir | /home/mysql/share/mysql/charsets/ | | collation_connection | utf8_general_ci | | collation_database | utf8mb4_0900_ai_ci | | collation_server | utf8mb4_0900_ai_ci |…| innodb_autoextend_increment | 8 | | innodb_buffer_pool_size | 8388608 | | innodb_commit_concurrency | 0 | | innodb_concurrency_tickets | 500 | | innodb_data_file_path | ibdata1:10M:autoextend | | innodb_data_home_dir | |…| |版本8.0.1-dmr-log | | version_comment源分布| | | version_compile_machine | i686 | | version_compile_os | suse linux | | wait_timeout | 28800年 | +---------------------------------+-----------------------------------+
与一个就像
子句中,语句只显示匹配模式的变量。要获取特定的变量名,请使用就像
条款如下所示:
显示变量'max_join_size';显示会话变量max_join_size;
方法获取名称与模式匹配的变量列表%
中的通配符就像
条款:
显示变量'%size%';显示全局变量'%size%';
通配符可以用于要匹配的模式中的任何位置。严格地说,因为_
是一个通配符匹配任何单个字符,您应该转义为\ _
从字面上来说。实际上,这很少是必要的。
为显示变量
,如果两者都不指定全球
也不会话
, MySQL的回报会话
值。
要求的原因全球
关键字时设置全球
-only变量,但在检索它们时不这样做是为了防止未来出现问题:
是一个
会话
类名称相同的要删除的变量全球
变量时,具有足够权限修改全局变量的客户机可能会意外更改全球
变量而不是会话
变量。是一个
会话
要添加的与类同名的变量全球
变量,该客户机打算更改全球
变量可能只找到它自己的会话
变量的变化。