MySQL是怎样运行的——第2章 启动选项和系统变量

文章目录

      • [2.1 在命令行上使用选项](#2.1 在命令行上使用选项)
        • [2.1.1 选项的长形式和短形式](#2.1.1 选项的长形式和短形式)
      • [2.2 配置文件中使用选项](#2.2 配置文件中使用选项)
        • [2.2.1 配置文件的路径](#2.2.1 配置文件的路径)
        • [2.2.2 配置文件的内容](#2.2.2 配置文件的内容)
        • [2.2.3 配置文件的优先级](#2.2.3 配置文件的优先级)
      • [2.3 命令行和配置文件中启动选项的区别](#2.3 命令行和配置文件中启动选项的区别)
      • [2.4 系统变量](#2.4 系统变量)
        • [2.4.1 简介](#2.4.1 简介)
        • [2.4.2 查看系统变量](#2.4.2 查看系统变量)
        • [2.4.3 设置系统变量](#2.4.3 设置系统变量)
        • [2.4.4 启动选项和系统变量的区别](#2.4.4 启动选项和系统变量的区别)
      • [2.5 状态变量](#2.5 状态变量)

2.1 在命令行上使用选项

启动服务器程序的命令行后边指定启动选项的通用格式如下:

--启动选项1[=值1] ---启动选项2[=值2] ... --启动选项n[=值n]

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

使用mysql ---help可以看到mysql程序支持的启动选项。

2.1.1 选项的长形式和短形式

2.2 配置文件中使用选项

在命令行中设置启动选项只对当次启动生效,从而引出配置文件的概念:把需要设置的启动选项都写在配置文件中,每次启动服务器的时候都从这个文件里加载相应的启动选项。

2.2.1 配置文件的路径


2.2.2 配置文件的内容

配置文件中的启动选项被划分为若干个组,每个组有一个组名,用中括号\[\]括起来,像这样:

text 复制代码
[server]
(具体的启动选项...)

[mysqld]
(具体的启动选项...)

[mysqld_safe]
(具体的启动选项...)

[client]
(具体的启动选项...)

[mysql]
(具体的启动选项...)

[mysqladmin]
(具体的启动选项...)

📌但是配置文件中只能使用长形式的选项。在配置文件中指定的启动选项不允许加 -- 前缀,并且每行只指定一个选项,而且 = 周围可以有空白字符(命令行中选项名、= 、选项值之间不允许有空白字符)。另外,在配置文件中,我们可以使用 # 来添加注释,从 # 出现直到行尾的内容都属于注释内容,读取配置文件时会忽略这些注释内容。

2.2.3 配置文件的优先级

MySQL 将按照我们在上表中给定的顺序依次读取各个配置文件,如果该文件不存在则忽略。值得注意的是,如果我们在多个配置文件中设置了相同的启动选项,那以最后一个配置文件中的为准。

2.3 命令行和配置文件中启动选项的区别

命令行上指定的绝大部分启动选项都可以放到配置文件中,但是有一些选项是专门为命令行设计的,比方说defaults-extra-file 、 defaults-file这种本身就是为了指定配置文件路径的。

注意:若同一个启动选项既出现在命令行中,又出现在配置文件中,则已命令行中的为准!

2.4 系统变量

2.4.1 简介

MySQL服务器程序运行过程中会用到许多影响程序行为的变量,被称为MySQL系统变量,如max_connections等,MySQL有好几百条。可以使用命令行或配置文件中的选项在启动服务器时改变一些系统变量的值。大多数系统变量的值也可以在程序运行过程中修改,而无需停止并重新启动它。

2.4.2 查看系统变量

SHOW VARIABLES [LIKE 匹配的模式];

2.4.3 设置系统变量
  1. 通过启动选项设置

    大部分的系统变量都可以通过启动服务器时传送启动选项的方式来设置,可以通过命令行添加启动选项通过配置文件添加启动选项两种方式。

  2. 服务器程序运行过程中设置

    大部分系统变量的值都可以在服务器程序运行过程中进行动态修改而无需停止并重启服务器。

    系统变量的作用范围:

    • GLOBAL:全局变量,影响服务器的整体操作;
    • SESSION:会话变量,影响某个客户端连接的操作;
      在服务器程序运行期间通过客户端程序设置系统变量的语法:
      SET [GLOBAL|SESSION] 系统变量名 = 值;SET [@@(GLOBAL|SESSION).]var_name = XXX;

    例如:

    语句一:SET GLOBAL default_storage_engine = MyISAM;

    语句二:SET @@GLOBAL.default_storage_engine = MyISAM;

    若省略了作用范围,默认为SESSION。

注意:

  1. SHOW VARIABLES语句查看的是SESSION作用范围的系统变量。完整语法为SHOW [GLOBAL|SESSION] VARIABLES [LIKE 匹配的模式];
  2. 某个客户端修改了某个系统变量在GLOBAL作用范围的值,并不会影响在当前已经连接的客户端作用范围为SESSION的值,只会影响后续连入的客户端在作用范围为SESSION的值。
  3. 有些系统变量只有GLOBAL作用范围,有些只有SESSION;
  4. 有些系统变量是只读的,不能设置值,比如version
2.4.4 启动选项和系统变量的区别

启动选项时程序启动时传递的一些参数,而系统变量是影响服务器程序运行行为的变量,关系如下:

  • 大部分系统变量都可以被当做启动选项传入;
  • 有些系统变量是在程序运行过程中自动生成的,不可以当做启动选项来设置,如auto_increment_offset 、 character_set_client;
  • 有些启动选项也不是系统变量,比如defaults-file。

2.5 状态变量

状态变量是关于程序运行状态的变量。如 Threads_connected表示当前有多少客户端与服务器建立了连接,Handler_update表示已经更新了多少行记录。

状态变量的值只能由服务器程序自己设置。

查看状态变量的语法与系统变量类似,省略作用范围则默认SESSION:

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

相关推荐
三十..3 分钟前
Redis 核心原理与高可用架构实践
运维·数据库·redis
这个DBA有点耶20 分钟前
索引优化深潜(下):索引合并、ICP 与索引设计的实战法则
数据库·mysql·架构
用户30745969820728 分钟前
EXPLAIN 执行计划 完全精通指南
mysql
努力努力再努力wz37 分钟前
【内存管理与高并发内存池系列】从 mmap 到 malloc:文件映射、匿名映射与 glibc 内存分配机制详解
linux·c语言·数据结构·数据库·c++·qt·链表
JdSnE27zv1 小时前
Qt 操作SQLite数据库
数据库·qt·sqlite
tedcloud1231 小时前
HyperFrames部署教程:用HTML生成MP4视频
前端·数据库·人工智能·html·音视频
布朗克1681 小时前
25 IO流高级操作——序列化、NIO与Files工具类
java·数据库·io·nio
阿演1 小时前
DataDjinn 新版本更新:新增 Oracle 支持,查询窗口、表预览和连接树继续打磨
数据库·oracle·ai编程·数据库连接工具
lixora2 小时前
Oracle 11g Active Data Guard Go 自动化部署工具 v1.0
数据库·oracle
Nturmoils2 小时前
自增主键别只会 auto_increment,先把值从哪来讲清楚
数据库·后端