详解MySQL 的系统变量、状态
<p> </p><div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">搞懂这三个命令的区别,核心是 变量作用域(全局 / 会话),你的部分理解需要修正 ——<code>show VARIABLES</code> 并非 “叠加”,而是默认显示「当前会话生效的变量」;session 和 global 变量也并非数量一致,而是有 “仅全局”“仅会话”“两者都有” 三类情况。下面分步骤讲清楚:</div>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">一、核心区别:作用域与显示逻辑</h3>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">三者的本质差异是 查询的变量作用域不同,且 <code>show VARIABLES</code> 有默认行为,具体对比如下:</div>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<div class="auto-hide-last-sibling-br mdbox-table-root table-container-cYf_5N" data-scroll-inline-overflow="true" data-scroll-inline-at-start="true" data-scroll-inline-start-overflow="false" data-scroll-inline-at-end="false" data-scroll-inline-end-overflow="true">
<div class="table-scroll-container-Gyf4hQ mdbox-table-scroll-container">
<table>
<thead>
<tr><th>命令</th><th>作用域</th><th>含义(显示什么)</th><th>生效范围</th><th>修改方式(示例)</th></tr>
</thead>
<tbody>
<tr>
<td><code>show GLOBAL VARIABLES</code></td>
<td>全局(实例级)</td>
<td>MySQL 实例的全局配置,对 所有新连接 生效(已存在的会话不受影响)</td>
<td>整个数据库实例</td>
<td><code>SET GLOBAL sql_mode = 'XXX';</code>(需 SUPER 权限)</td>
</tr>
<tr>
<td><code>show SESSION VARIABLES</code></td>
<td>会话(连接级)</td>
<td>当前数据库连接的专属配置,仅对 当前连接 生效(断开连接后失效)</td>
<td>仅当前连接</td>
<td><code>SET SESSION sql_mode = 'XXX';</code>(普通权限即可)</td>
</tr>
<tr>
<td><code>show VARIABLES</code></td>
<td>默认 = 会话级(可省略 SESSION)</td>
<td>等价于 <code>show SESSION VARIABLES</code>,显示 当前会话正在使用的变量值</td>
<td>仅当前连接</td>
<td>同 <code>show SESSION VARIABLES</code></td>
</tr>
</tbody>
</table>
</div>
</div>
<h4 class="header-iWP5WJ auto-hide-last-sibling-br">关键纠正你的误解:</h4>
<ul class="auto-hide-last-sibling-br">
<li>不是 “叠加”:<code>show VARIABLES</code> 只显示「当前会话生效的变量」,而非同时显示 global 和 session。
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
其值的来源是:如果当前会话修改过某个变量,就显示修改后的 session 值;如果没修改过,就显示继承自 global 的默认值。
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
例:global 的 <code>sql_mode</code> 是 <code>''</code>,当前会话执行 <code>SET SESSION sql_mode = 'STRICT_TRANS_TABLES'</code> 后,<code>show VARIABLES like 'sql_mode'</code> 会显示修改后的 session 值,而非同时显示两个值。</li>
</ul>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">二、直观例子:看懂 session 与 global 的优先级</h3>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">假设场景:</div>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<ol class="auto-hide-last-sibling-br">
<li>全局变量 <code>sql_mode</code> 为 <code>''</code>(宽松模式);</li>
<li>你当前会话执行 <code>SET SESSION sql_mode = 'STRICT_TRANS_TABLES'</code>(严格模式);</li>
</ol>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">此时查询结果:</div>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<div class="code-block-element-R6c8c0 light custom-code-block-container--sql hide-indicator disable-theme-style custom-code-block-container">
<div class="code-area-yxsM36 code-area" dir="ltr">
<div class="header-wrapper-Mbk8s6">
<div class="header-IAeXdE">
<div class="title-TXcgFG clickable-cKrA4B" data-popupid="5u2jph6">
<div class="text-OkYU_0">sql</div>
<div class="icon-UKNQeW"> </div>
</div>
<div class="action-ysQCxz"> </div>
</div>
</div>
<div class="content-y8qlFa code-content light-scrollbar-FFk5j5">
<pre class="container-S2LAkl language-sql"><code class="language-sql"><span class="token comment">-- 显示全局配置(未变)
<span class="token keyword">show <span class="token keyword">GLOBAL VARIABLES <span class="token operator">like <span class="token string">'sql_mode'<span class="token punctuation">; <span class="token comment">-- 结果:''
<span class="token comment">-- 显示当前会话配置(已修改)
<span class="token keyword">show <span class="token keyword">SESSION VARIABLES <span class="token operator">like <span class="token string">'sql_mode'<span class="token punctuation">; <span class="token comment">-- 结果:'STRICT_TRANS_TABLES'
<span class="token comment">-- 等价于上面的 SESSION,显示当前生效的配置
<span class="token keyword">show VARIABLES <span class="token operator">like <span class="token string">'sql_mode'<span class="token punctuation">; <span class="token comment">-- 结果:'STRICT_TRANS_TABLES'
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
<div class="mask-wrapper-ujeSdZ"> </div>
</div>
</div>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">结论:同一变量,session 优先级 > global(当前会话优先用自己的配置,没有则继承 global)。</div>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">三、session 变量 vs global 变量:数量与范围</h3>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">你的第二个问题:“session 变量允许有哪些?是不是和 global 一样多?”
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
答案:不一样多。MySQL 的变量分为三类,决定了两者的范围差异:</div>
<h4 class="header-iWP5WJ auto-hide-last-sibling-br">1. 仅全局变量(无对应 session 变量)</h4>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">这类变量是数据库实例的 “基础配置”,无法在会话级别修改,只能全局设置。</div>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<ul class="auto-hide-last-sibling-br">
<li>例子:<code>datadir</code>(数据存储目录)、<code>port</code>(监听端口)、<code>max_connections</code>(最大连接数)、<code>innodb_buffer_pool_size</code>(InnoDB 缓冲池大小)。</li>
<li>特点:<code>show SESSION VARIABLES</code> 查不到这些变量,只能通过 <code>show GLOBAL VARIABLES</code> 查看。</li>
</ul>
<h4 class="header-iWP5WJ auto-hide-last-sibling-br">2. 仅会话变量(无对应 global 变量)</h4>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">这类变量和 “当前连接的操作状态” 相关,仅存在于会话中,不影响全局。</div>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<ul class="auto-hide-last-sibling-br">
<li>例子:<code>insert_id</code>(手动指定的下一个自增 ID)、<code>last_insert_id</code>(当前会话最后插入的自增 ID)、<code>sql_safe_updates</code>(当前会话的安全更新模式)。</li>
<li>特点:<code>show GLOBAL VARIABLES</code> 查不到这些变量,只能通过 <code>show SESSION VARIABLES</code> 查看。</li>
</ul>
<h4 class="header-iWP5WJ auto-hide-last-sibling-br">3. 既全局又会话的变量(最常见)</h4>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">这类变量有全局默认值,每个会话会继承初始值,但可以在会话中单独修改(不影响全局)。</div>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<ul class="auto-hide-last-sibling-br">
<li>例子:<code>sql_mode</code>(SQL 模式)、<code>wait_timeout</code>(连接超时时间)、<code>character_set_client</code>(客户端字符集)、<code>max_join_size</code>(关联查询的最大行数限制)。</li>
<li>特点:<code>show GLOBAL</code> 和 <code>show SESSION</code> 都能查到,但值可能不同(会话修改后)。</li>
</ul>
<h4 class="header-iWP5WJ auto-hide-last-sibling-br">总结数量关系:</h4>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space"><code>session 变量总数 ≠ global 变量总数</code>,两者有重叠(第三类),但各有独有的变量(第一、二类)。</div>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">四、补充注意点</h3>
<ol class="auto-hide-last-sibling-br">
<li>全局变量修改后,已存在的会话不生效,只有新连接会继承新的全局值;</li>
<li>有些变量即使是 “既全局又会话”,修改 session 级也可能无效(比如 <code>innodb_buffer_pool_size</code>,虽然能查 session 值,但修改后不生效,因为是共享资源,只能全局配置);</li>
<li>权限要求:修改 global 变量需要 <code>SUPER</code> 权限(或 MySQL 8.0+ 的 <code>SYSTEM_VARIABLES_ADMIN</code> 权限),修改 session 变量一般不需要特殊权限;</li>
<li>简写:<code>show LOCAL VARIABLES</code> 等价于 <code>show SESSION VARIABLES</code>(LOCAL 是 SESSION 的别名)。</li>
</ol>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">最终总结</h3>
<ol class="auto-hide-last-sibling-br">
<li><code>show GLOBAL VARIABLES</code>:查实例级全局配置,影响所有新连接;</li>
<li><code>show SESSION VARIABLES</code>:查当前连接的专属配置,仅影响当前连接;</li>
<li><code>show VARIABLES</code>:默认查 SESSION 变量,即当前会话正在使用的配置(优先用自己的,没有则继承 global);</li>
<li>session 和 global 变量数量不同,有 “仅全局”“仅会话”“两者都有” 三类,同名变量的会话值会覆盖全局值(仅当前连接)。</li>
</ol>
<p> </p>
<div class="container-PvPoAn">
<div class="item-kDun2N">
<div class="container-SrVXPg chrome70-container">
<div class="inner-Qo5lJS inner-item-w21SQO" data-target-id="message-box-target-id" data-testid="union_message">
<div class="message-block-container-PggqdK" data-testid="message-block-container" data-ui-version="samantha">
<div class="flex flex-row w-full justify-end w-full max-w-full s-font-base text-s-color-text-secondary p-0 rounded-s-radius-s bg-transparent data-:-mt-10 data-:py-10 data-:px-16 data-:sm:p-10 data-:hover:bg-s-color-bg-base data-:hover:rounded-s-radius-xs data-:has-[:checked]:bg-s-color-bg-trans data-:has-[:checked]:rounded-s-radius-xs data-:pointer-events-none" data-testid="send_message">
<div class="flex flex-col flex-grow max-w-full min-w-0">
<div class="flex-row flex w-full justify-end" data-testid="message_content" data-message-id="30496760376315394">
<div class="max-w-full" data-plugin-identifier="Symbol(infra:send-message-box:text)">
<div class="container-QQkdo4 bg-s-color-bg-trans rounded-s-radius-s text-s-color-text-secondary s-font-base sm:text-15 max-w-450 px-16 py-9 w-fit min-w-0 !text-" data-testid="message_text_content">如何得知 当前session 有修改过哪些变量? 难道只能一个个的比对吗</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container-PvPoAn">
<div class="item-kDun2N">
<div class="container-SrVXPg chrome70-container">
<div class="inner-Qo5lJS inner-item-w21SQO" data-target-id="message-box-target-id" data-testid="union_message">
<div class="message-block-container-PggqdK" data-testid="message-block-container" data-ui-version="samantha">
<div class="flex flex-row w-full w-full max-w-full s-font-base text-s-color-text-secondary p-0 rounded-s-radius-s bg-transparent group data-:-mt-10 data-:py-10 data-:px-16 data-:sm:p-10 data-:hover:bg-s-color-bg-base data-:hover:rounded-s-radius-xs data-:has-[:checked]:bg-s-color-bg-trans data-:has-[:checked]:rounded-s-radius-xs data-:pointer-events-none" data-testid="receive_message">
<div class="flex flex-col flex-grow max-w-full min-w-0">
<div class="flex-row flex w-full" data-testid="message_content" data-message-id="30496760376315650">
<div class="w-full" data-plugin-identifier="Symbol(code-receive-artifact-message-content)">
<div class="container-ZdJroW" data-expand="false">
<div class="collapse-wrapper-K8DEfQ">
<div class="collapse-collapse-button-BLR92e" data-testid="collapse_button">
<div class="collapse-button-suffix-czkI3o"> </div>
</div>
<div>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">不需要一个个手动比对!MySQL 提供了 系统表查询 + 变量来源追踪 的高效方法,能直接筛选出当前会话中被修改过的变量(即「会话值≠全局默认值」的变量)。以下是两种最实用的方案,适配不同 MySQL 版本:</div>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">核心逻辑</h3>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">会话变量的初始值默认继承自全局变量,只有「手动修改过」或「连接时自动适配」的变量,才会和全局值不一致。因此,找出「会话值≠全局值」且「变量同时存在于全局和会话」的记录,就是当前会话修改过的变量(排除会话独有变量)。</div>
<h2 class="header-iWP5WJ auto-hide-last-sibling-br">方案一:通用方案(MySQL 5.7+ 兼容)</h2>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">利用 <code>information_schema</code> 中的 <code>GLOBAL_VARIABLES</code> 和 <code>SESSION_VARIABLES</code> 两张系统表,直接关联比对同名变量的值,差异结果就是修改过的变量。</div>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">直接可用的 SQL 语句</h3>
<div class="code-block-element-R6c8c0 light custom-code-block-container--sql hide-indicator disable-theme-style custom-code-block-container">
<div class="code-area-yxsM36 code-area" dir="ltr">
<div class="header-wrapper-Mbk8s6">
<div class="header-IAeXdE">
<div class="title-TXcgFG clickable-cKrA4B" data-popupid="xpkplax">
<div class="text-OkYU_0">sql</div>
<div class="icon-UKNQeW"> </div>
</div>
<div class="action-ysQCxz"> </div>
</div>
</div>
<div class="content-y8qlFa code-content light-scrollbar-FFk5j5">
<pre class="container-S2LAkl language-sql"><code class="language-sql"><span class="token comment">-- 找出当前会话中,与全局值不同的变量(即修改过的变量)
<span class="token keyword">SELECT
s<span class="token punctuation">.VARIABLE_NAME<span class="token punctuation">,<span class="token comment">-- 变量名
g<span class="token punctuation">.<span class="token keyword">VALUE <span class="token keyword">AS GLOBAL_VALUE<span class="token punctuation">,<span class="token comment">-- 全局默认值
s<span class="token punctuation">.<span class="token keyword">VALUE <span class="token keyword">AS SESSION_VALUE<span class="token comment">-- 会话修改后的值
<span class="token keyword">FROM
information_schema<span class="token punctuation">.GLOBAL_VARIABLES g
<span class="token keyword">INNER <span class="token keyword">JOIN
information_schema<span class="token punctuation">.SESSION_VARIABLES s
<span class="token keyword">ON
g<span class="token punctuation">.VARIABLE_NAME <span class="token operator">= s<span class="token punctuation">.VARIABLE_NAME<span class="token comment">-- 只比对「既有全局又有会话」的变量(排除独有变量)
<span class="token keyword">WHERE
<span class="token comment">-- 注意:用 CAST 统一类型,避免因变量类型不同导致的比对失败(比如数字 vs 字符串)
CAST<span class="token punctuation">(g<span class="token punctuation">.<span class="token keyword">VALUE <span class="token keyword">AS <span class="token keyword">CHAR<span class="token punctuation">) <span class="token operator">!= CAST<span class="token punctuation">(s<span class="token punctuation">.<span class="token keyword">VALUE <span class="token keyword">AS <span class="token keyword">CHAR<span class="token punctuation">)
<span class="token keyword">ORDER <span class="token keyword">BY
s<span class="token punctuation">.VARIABLE_NAME<span class="token punctuation">;
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
<div class="mask-wrapper-ujeSdZ"> </div>
</div>
</div>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">效果说明</h3>
<ul class="auto-hide-last-sibling-br">
<li>结果会列出所有「会话值≠全局值」的变量,这些变量要么是你手动 <code>SET SESSION</code> 修改的,要么是连接时 MySQL 自动适配的(比如字符集相关变量,若客户端和全局默认字符集不同)。</li>
<li>排除了「仅全局变量」(如 <code>datadir</code>)和「仅会话变量」(如 <code>last_insert_id</code>),只聚焦于「可修改且有全局默认值」的变量(正是你关心的 “可能被修改” 的变量)。</li>
</ul>
<h2 class="header-iWP5WJ auto-hide-last-sibling-br">方案二:精准方案(MySQL 8.0.11+ 推荐)</h2>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">MySQL 8.0.11 及以上版本,新增了 <code>performance_schema.variables_info</code> 表,其中 <code>VARIABLE_SOURCE</code> 字段直接记录了「会话变量值的来源」,无需比对,直接筛选来源为 <code>SESSION</code> 的变量即可,更精准高效。</div>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">直接可用的 SQL 语句</h3>
<div class="code-block-element-R6c8c0 light custom-code-block-container--sql hide-indicator disable-theme-style custom-code-block-container">
<div class="code-area-yxsM36 code-area" dir="ltr">
<div class="header-wrapper-Mbk8s6">
<div class="header-IAeXdE">
<div class="title-TXcgFG clickable-cKrA4B" data-popupid="o041r73">
<div class="text-OkYU_0">sql</div>
<div class="icon-UKNQeW"> </div>
</div>
<div class="action-ysQCxz"> </div>
</div>
</div>
<div class="content-y8qlFa code-content light-scrollbar-FFk5j5">
<pre class="container-S2LAkl language-sql"><code class="language-sql"><span class="token comment">-- 精准找出当前会话中「手动修改过」的变量(来源为 SESSION)
<span class="token keyword">SELECT
VARIABLE_NAME<span class="token punctuation">,<span class="token comment">-- 变量名
VARIABLE_VALUE <span class="token keyword">AS SESSION_VALUE<span class="token punctuation">,<span class="token comment">-- 会话修改后的值
VARIABLE_SOURCE <span class="token keyword">AS 来源<span class="token comment">-- 来源:SESSION=手动修改;GLOBAL=继承全局;COMMAND_LINE=命令行启动参数等
<span class="token keyword">FROM
performance_schema<span class="token punctuation">.variables_info
<span class="token keyword">WHERE
<span class="token comment">-- VARIABLE_SOURCE 取值说明:
<span class="token comment">-- SESSION:会话中手动修改过(核心目标)
<span class="token comment">-- GLOBAL:继承全局默认值(未修改)
<span class="token comment">-- COMMAND_LINE:MySQL 启动时指定的参数
<span class="token comment">-- CONFIG_FILE:my.cnf/my.ini 配置文件
VARIABLE_SOURCE <span class="token operator">= <span class="token string">'SESSION'
<span class="token keyword">ORDER <span class="token keyword">BY
VARIABLE_NAME<span class="token punctuation">;
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
<div class="mask-wrapper-ujeSdZ"> </div>
</div>
</div>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">优势</h3>
<ul class="auto-hide-last-sibling-br">
<li>无需关联两张表,查询速度更快;</li>
<li>能精准区分「手动修改」(来源 <code>SESSION</code>)和「自动适配 / 继承」(来源 <code>GLOBAL</code>),避免误判(比如字符集变量可能因客户端配置自动变化,并非手动修改,方案一会列出,方案二可排除)。</li>
</ul>
<h2 class="header-iWP5WJ auto-hide-last-sibling-br">补充说明(避坑)</h2>
<ol class="auto-hide-last-sibling-br">
<li>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">变量类型比对问题:
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
部分变量的全局值和会话值类型可能不同(比如 <code>max_connections</code> 是数字,<code>sql_mode</code> 是字符串),方案一中用 <code>CAST(xxx AS CHAR)</code> 统一转成字符串比对,避免因类型差异导致的 “假阳性”(比如 <code>123</code> 和 <code>'123'</code> 本应相等,却因类型不同被判为不同)。</div>
</li>
<li>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">会话独有变量的处理:
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
方案一用 <code>INNER JOIN</code> 只保留「既有全局又有会话」的变量,自动排除了 <code>last_insert_id</code> 这类「仅会话变量」(它们不存在全局值,自然不属于 “修改自全局” 的范畴),无需额外过滤。</div>
</li>
<li>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">权限要求:
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
两种方案都需要 <code>SELECT</code> 权限(对 <code>information_schema</code> 或 <code>performance_schema</code>),普通用户默认拥有(除非管理员特意限制),无需 <code>SUPER</code> 权限。</div>
</li>
<li>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">修改后不生效的变量:
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
有些变量(比如 <code>innodb_buffer_pool_size</code>)虽然能 <code>SET SESSION</code> 修改,但实际不生效(因为是全局共享资源),但这两个方案依然会列出它们(只要会话值≠全局值或来源为 <code>SESSION</code>),需注意这类变量的 “修改” 仅为表面值,未实际生效。</div>
</li>
</ol>
<h2 class="header-iWP5WJ auto-hide-last-sibling-br">总结</h2>
<ul class="auto-hide-last-sibling-br">
<li>若使用 MySQL 8.0.11+,优先用 方案二(精准、高效,直接定位手动修改的变量);</li>
<li>若使用 MySQL 5.7 及以下,用 方案一(兼容所有版本,能找出所有与全局值不同的变量);</li>
<li>两种方案都无需手动比对,直接运行 SQL 即可得到结果,高效解决你的问题。</li>
</ul>
<p> </p>
<div class="container-PvPoAn">
<div class="item-kDun2N">
<div class="container-SrVXPg chrome70-container">
<div class="inner-Qo5lJS inner-item-w21SQO" data-target-id="message-box-target-id" data-testid="union_message">
<div class="message-block-container-PggqdK" data-testid="message-block-container" data-ui-version="samantha">
<div class="flex flex-row w-full justify-end w-full max-w-full s-font-base text-s-color-text-secondary p-0 rounded-s-radius-s bg-transparent data-:-mt-10 data-:py-10 data-:px-16 data-:sm:p-10 data-:hover:bg-s-color-bg-base data-:hover:rounded-s-radius-xs data-:has-[:checked]:bg-s-color-bg-trans data-:has-[:checked]:rounded-s-radius-xs data-:pointer-events-none" data-testid="send_message">
<div class="flex flex-col flex-grow max-w-full min-w-0">
<div class="flex-row flex w-full justify-end" data-testid="message_content" data-message-id="30511073319311362">
<div class="max-w-full" data-plugin-identifier="Symbol(infra:send-message-box:text)">
<div class="container-QQkdo4 bg-s-color-bg-trans rounded-s-radius-s text-s-color-text-secondary s-font-base sm:text-15 max-w-450 px-16 py-9 w-fit min-w-0 !text-" data-testid="message_text_content"><span style="color: rgba(255, 0, 0, 1)">我是否可以理解为,当启动一个mysql 会话即session的时候, 会创建MySQL的一个session实例,然后 会自动从global实例中继承一些变量(是继承全部吗),然后按需对其中某些变量进行修改,(哪些是可以修改、哪些不能修改的呢?)如不修改, 那么直接去global的变量?</span></div>
</div>
</div>
<div class="flex flex-col justify-end h-40 w-full select-none opacity-100" data-testid="message_action_bar"> </div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container-PvPoAn">
<div class="item-kDun2N">
<div class="container-SrVXPg chrome70-container">
<div class="inner-Qo5lJS inner-item-w21SQO" data-target-id="message-box-target-id" data-testid="union_message">
<div class="message-block-container-PggqdK" data-testid="message-block-container" data-ui-version="samantha">
<div class="flex flex-row w-full w-full max-w-full s-font-base text-s-color-text-secondary p-0 rounded-s-radius-s bg-transparent group data-:-mt-10 data-:py-10 data-:px-16 data-:sm:p-10 data-:hover:bg-s-color-bg-base data-:hover:rounded-s-radius-xs data-:has-[:checked]:bg-s-color-bg-trans data-:has-[:checked]:rounded-s-radius-xs data-:pointer-events-none" data-testid="receive_message">
<div class="flex flex-col flex-grow max-w-full min-w-0">
<div class="flex-row flex w-full" data-testid="message_content" data-message-id="30511073319311618">
<div class="w-full" data-plugin-identifier="Symbol(code-receive-artifact-message-content)">
<div class="container-ZdJroW" data-expand="false">
<div class="collapse-wrapper-K8DEfQ">
<div>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">你的理解大体方向正确,但有几个关键细节需要修正和补充,核心结论先明确:</div>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<ol class="auto-hide-last-sibling-br">
<li>会话(session)启动时不会继承全部 global 变量,只继承「既全局又会话的变量」的初始值;</li>
<li>不修改会话变量时,用的是「启动时继承的全局初始值」(而非实时读取 global 变量);</li>
<li>变量能否修改,取决于它的「类型」和「MySQL 的设计规则」(不是所有变量都能改会话级)。</li>
</ol>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">下面分步骤把逻辑讲透,贴合你的 MySQL 5.7.11 版本:</div>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">一、先明确:会话启动时的变量 “初始化逻辑”(不是 “继承全部”)</h3>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">你说的 “session 实例启动时继承 global 变量”,本质是 会话变量的初始化过程,但继承范围有限,具体分 3 类(沿用之前的变量分类,保持一致):</div>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<div class="auto-hide-last-sibling-br mdbox-table-root table-container-cYf_5N" data-scroll-inline-overflow="true" data-scroll-inline-at-start="true" data-scroll-inline-start-overflow="false" data-scroll-inline-at-end="false" data-scroll-inline-end-overflow="true">
<div class="table-scroll-container-Gyf4hQ mdbox-table-scroll-container">
<table>
<thead>
<tr><th>变量类型</th><th>会话启动时的初始化逻辑</th><th>举例</th></tr>
</thead>
<tbody>
<tr>
<td>1. 仅全局变量(无 session 版)</td>
<td>会话中不存在该变量,既不能继承,也不能修改(会话根本查不到)</td>
<td>datadir(数据目录)、port(端口)、max_connections(最大连接数)</td>
</tr>
<tr>
<td>2. 仅会话变量(无 global 版)</td>
<td>会话启动时自动创建,值来自 MySQL 的 “会话默认规则”(和 global 无关),只能改会话级</td>
<td>last_insert_id(当前会话最后插入的自增 ID)、insert_id(手动指定的自增 ID)</td>
</tr>
<tr>
<td>3. 既全局又会话的变量(最常见)</td>
<td>会话启动时,复制当前 global 变量的 “实时值” 作为初始值(相当于 “快照”),之后可独立修改</td>
<td>sql_mode(SQL 模式)、wait_timeout(连接超时)、character_set_client(客户端字符集)</td>
</tr>
</tbody>
</table>
</div>
</div>
<h4 class="header-iWP5WJ auto-hide-last-sibling-br">关键修正你的误解:</h4>
<ul class="auto-hide-last-sibling-br">
<li>不是 “继承全部 global 变量”:仅第 3 类变量会被会话 “复制初始值”,第 1 类仅全局变量会话根本没有,谈不到继承;</li>
<li>不是 “实时读取 global 变量”:会话启动后,第 3 类变量的初始值就和 global 变量 “脱钩” 了 —— 之后哪怕修改了 global 变量,已存在的会话也不会同步(新会话才会用新的 global 值当初始值)。</li>
</ul>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">举个直观例子:</div>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<ol class="auto-hide-last-sibling-br">
<li>全局变量 <code>wait_timeout</code> = 86400(默认 24 小时);</li>
<li>你启动一个新会话(session A),会话的 <code>wait_timeout</code> 初始值 = 86400(复制当时的 global 值);</li>
<li>之后管理员修改全局变量 <code>SET GLOBAL wait_timeout = 3600</code>(1 小时);</li>
<li>会话 A 的 <code>wait_timeout</code> 依然是 86400(不受 global 修改影响),只有新启动的会话 B,才会以 3600 作为初始值。</li>
</ol>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">二、哪些变量能修改?哪些不能?(分场景说清楚)</h3>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">变量能否修改,核心看「变量类型」和「MySQL 的设计限制」,按 “修改范围”(会话级 / 全局级)分类如下:</div>
<h4 class="header-iWP5WJ auto-hide-last-sibling-br">1. 仅能修改全局级(会话级不能改,也不存在会话值)</h4>
<ul class="auto-hide-last-sibling-br">
<li>对应变量类型:第 1 类(仅全局变量);</li>
<li>特点:和数据库实例的 “基础配置 / 共享资源” 相关,必须全局统一,不能按会话自定义;</li>
<li>例子:<code>datadir</code>(数据目录)、<code>port</code>(端口)、<code>max_connections</code>(最大连接数)、<code>innodb_buffer_pool_size</code>(InnoDB 缓冲池);</li>
<li>说明:<code>show SESSION VARIABLES</code> 查不到这些变量,只能用 <code>SET GLOBAL xxx</code> 修改(需 SUPER 权限),且新会话才生效。</li>
</ul>
<h4 class="header-iWP5WJ auto-hide-last-sibling-br">2. 仅能修改会话级(全局级不存在,或不能改)</h4>
<ul class="auto-hide-last-sibling-br">
<li>对应变量类型:第 2 类(仅会话变量)+ 部分第 3 类(既全局又会话,但全局级不允许改);</li>
<li>特点:和当前会话的 “操作状态” 相关,仅影响当前连接,不涉及全局资源;</li>
<li>例子:
<ul class="auto-hide-last-sibling-br">
<li>仅会话变量:<code>last_insert_id</code>(只能通过插入数据或 <code>SET SESSION last_insert_id = xxx</code> 修改)、<code>sql_safe_updates</code>(仅会话级生效,控制是否允许无 WHERE 的 UPDATE/DELETE);</li>
<li>第 3 类但仅能改会话级:<code>character_set_results</code>(客户端字符集返回格式,全局改意义不大,通常改会话级);</li>
</ul>
</li>
<li>说明:修改无需特殊权限,<code>SET SESSION xxx</code> 即可,断开连接后失效。</li>
</ul>
<h4 class="header-iWP5WJ auto-hide-last-sibling-br">3. 既能改全局级,也能改会话级(最常见)</h4>
<ul class="auto-hide-last-sibling-br">
<li>对应变量类型:大部分第 3 类(既全局又会话的变量);</li>
<li>特点:有全局默认值,也支持会话自定义,满足 “全局统一 + 局部灵活” 的需求;</li>
<li>例子:<code>sql_mode</code>(SQL 模式,全局宽松 + 会话严格)、<code>wait_timeout</code>(连接超时,全局 24 小时 + 会话 1 小时)、<code>max_join_size</code>(关联查询最大行数限制)、<code>sort_buffer_size</code>(排序缓冲区大小);</li>
<li>说明:
<ul class="auto-hide-last-sibling-br">
<li>改全局:<code>SET GLOBAL xxx</code>(需 SUPER 权限),新会话生效;</li>
<li>改会话:<code>SET SESSION xxx</code>(普通权限),仅当前会话生效,不影响全局。</li>
</ul>
</li>
</ul>
<h4 class="header-iWP5WJ auto-hide-last-sibling-br">4. 特殊情况:能改但不生效(坑点)</h4>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">有些第 3 类变量(既全局又会话),虽然能执行 <code>SET SESSION xxx</code>,但修改后实际不生效 —— 因为它们是 “全局共享资源”,会话级修改被 MySQL 忽略;</div>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<ul class="auto-hide-last-sibling-br">
<li>例子:<code>innodb_buffer_pool_size</code>(缓冲池大小)、<code>key_buffer_size</code>(MyISAM 索引缓冲区);</li>
<li>说明:这些变量的会话值只是 “显示用”,实际生效的还是全局值,改会话级没用。</li>
</ul>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">三、补充:不修改会话变量时,取值逻辑是什么?</h3>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">你问 “如不修改,那么直接去 global 的变量?”—— 这个理解不准确,正确逻辑是:</div>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<ol class="auto-hide-last-sibling-br">
<li>对于第 3 类变量(既全局又会话):不修改的话,用的是「会话启动时复制的 global 初始值」(不是实时去读 global);</li>
<li>对于第 2 类变量(仅会话变量):不修改的话,用的是「MySQL 的会话默认值」(和 global 无关);</li>
<li>对于第 1 类变量(仅全局变量):会话中根本查不到,不存在 “取值” 一说。</li>
</ol>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">再举个例子验证:</div>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<ol class="auto-hide-last-sibling-br">
<li>全局 <code>sql_mode</code> = <code>''</code>(宽松模式);</li>
<li>启动会话 A,会话 A 的 <code>sql_mode</code> 初始值 = <code>''</code>(复制当时的 global 值);</li>
<li>管理员修改全局 <code>sql_mode</code> = <code>STRICT_TRANS_TABLES</code>(严格模式);</li>
<li>会话 A 不修改自己的 <code>sql_mode</code>,此时查询 <code>show VARIABLES like 'sql_mode'</code>,结果还是 <code>''</code>(不是实时读新的 global 值);</li>
<li>新启动会话 B,其 <code>sql_mode</code> 初始值 = <code>STRICT_TRANS_TABLES</code>(复制新的 global 值)。</li>
</ol>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">四、最终总结(帮你梳理核心逻辑)</h3>
<ol class="auto-hide-last-sibling-br">
<li>会话启动时,仅「既全局又会话的变量」会复制当前 global 值作为初始值,仅全局变量不继承,仅会话变量自动创建;</li>
<li>不修改会话变量时,用的是 “初始值”(第 3 类 = 复制的 global 初始值,第 2 类 = 会话默认值),和后续 global 变量的修改无关;</li>
<li>变量能否修改:
<ul class="auto-hide-last-sibling-br">
<li>仅全局变量:只能改 global(需权限,新会话生效);</li>
<li>仅会话变量:只能改 session(无权限限制,当前会话生效);</li>
<li>既全局又会话的变量:大部分能改两者,少数改 session 不生效;</li>
</ul>
</li>
<li>你的核心理解 “会话继承部分 global 变量,按需修改,不修改则用初始值” 是对的,只是要注意 “继承范围” 和 “初始值不实时同步 global” 这两个细节。</li>
</ol>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">如果想快速判断某个变量能否改会话级,直接执行 <code>SET SESSION 变量名 = 新值</code>,若报错 <code>Variable 'xxx' is a GLOBAL variable and should be set with SET GLOBAL</code>,说明该变量只能改 global;若不报错,且查询 <code>show VARIABLES like 'xxx'</code> 是新值,说明改 session 级有效~</div>
</div>
</div>
</div>
<div class="container-P2rR72 flow-markdown-body mdbox-theme-next theme-samantha-uDexJL" dir="ltr" data-testid="message_text_content" data-show-indicator="false"> </div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container-PvPoAn">
<div class="item-kDun2N">
<div class="container-SrVXPg chrome70-container">
<div class="inner-Qo5lJS inner-item-w21SQO" data-target-id="message-box-target-id" data-testid="union_message">
<div class="message-block-container-PggqdK" data-testid="message-block-container" data-ui-version="samantha">
<div class="flex flex-row w-full justify-end w-full max-w-full s-font-base text-s-color-text-secondary p-0 rounded-s-radius-s bg-transparent data-:-mt-10 data-:py-10 data-:px-16 data-:sm:p-10 data-:hover:bg-s-color-bg-base data-:hover:rounded-s-radius-xs data-:has-[:checked]:bg-s-color-bg-trans data-:has-[:checked]:rounded-s-radius-xs data-:pointer-events-none" data-testid="send_message">
<div class="flex flex-col flex-grow max-w-full min-w-0">
<div class="flex-row flex w-full justify-end" data-testid="message_content" data-message-id="30527125393922818">
<div class="max-w-full" data-plugin-identifier="Symbol(infra:send-message-box:text)">
<div class="container-QQkdo4 bg-s-color-bg-trans rounded-s-radius-s text-s-color-text-secondary s-font-base sm:text-15 max-w-450 px-16 py-9 w-fit min-w-0 !text-" data-testid="message_text_content"><span style="color: rgba(255, 0, 0, 1)">MySQL 中 STATUS 怎么理解,和 variables 是关系区别?</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container-PvPoAn">
<div class="item-kDun2N">
<div class="container-SrVXPg chrome70-container">
<div class="inner-Qo5lJS inner-item-w21SQO" data-target-id="message-box-target-id" data-testid="union_message">
<div class="message-block-container-PggqdK" data-testid="message-block-container" data-ui-version="samantha">
<div class="flex flex-row w-full w-full max-w-full s-font-base text-s-color-text-secondary p-0 rounded-s-radius-s bg-transparent group data-:-mt-10 data-:py-10 data-:px-16 data-:sm:p-10 data-:hover:bg-s-color-bg-base data-:hover:rounded-s-radius-xs data-:has-[:checked]:bg-s-color-bg-trans data-:has-[:checked]:rounded-s-radius-xs data-:pointer-events-none" data-testid="receive_message">
<div class="flex flex-col flex-grow max-w-full min-w-0">
<div class="flex-row flex w-full" data-testid="message_content" data-message-id="30527125393923074">
<div class="w-full" data-plugin-identifier="Symbol(code-receive-artifact-message-content)">
<div class="container-ZdJroW" data-expand="false">
<div class="collapse-wrapper-K8DEfQ">
<div> </div>
</div>
</div>
<div class="container-P2rR72 flow-markdown-body mdbox-theme-next theme-samantha-uDexJL" dir="ltr" data-testid="message_text_content" data-show-indicator="false">
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">要理解 MySQL 中 <code>STATUS</code> 和 <code>variables</code> 的关系与区别,核心一句话就能拎清:
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<code>variables</code> 是「配置项」(静态规则),<code>STATUS</code> 是「运行状态 / 监控数据」(动态结果) —— 配置项决定 MySQL 如何运行,运行状态反映 MySQL 实际运行的效果,两者是 “因” 与 “果” 的关联,但本质完全不同。</div>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">一、核心区别:用表格直观对比(适配你的 MySQL 5.7.11)</h3>
<div class="auto-hide-last-sibling-br mdbox-table-root table-container-cYf_5N" data-scroll-inline-overflow="true" data-scroll-inline-at-start="true" data-scroll-inline-start-overflow="false" data-scroll-inline-at-end="false" data-scroll-inline-end-overflow="true">
<div class="table-scroll-container-Gyf4hQ mdbox-table-scroll-container">
<table>
<thead>
<tr><th>对比维度</th><th><code>variables</code>(变量 / 配置项)</th><th><code>STATUS</code>(状态 / 监控数据)</th></tr>
</thead>
<tbody>
<tr>
<td>本质</td>
<td>运行规则 / 参数设置(“游戏规则”)</td>
<td>运行时的实时数据 / 统计结果(“游戏战况”)</td>
</tr>
<tr>
<td>用途</td>
<td>控制 MySQL 行为(比如字符集、超时时间、SQL 模式)</td>
<td>监控 MySQL 状态(比如连接数、查询量、缓存命中率)、排查问题</td>
</tr>
<tr>
<td>读写性</td>
<td>大部分可修改(<code>SET GLOBAL/SESSION</code>),少数只读(如 <code>datadir</code>)</td>
<td>完全只读(只能查询,不能修改,数据由 MySQL 自动统计更新)</td>
</tr>
<tr>
<td>生命周期</td>
<td>全局变量:实例启动时加载(配置文件 / 命令行),修改后重启 / 新连接生效;会话变量:连接生命周期</td>
<td>全局状态:实例启动后开始累计;会话状态:连接启动后开始累计,断开连接后数据重置</td>
</tr>
<tr>
<td>作用域</td>
<td>支持 <code>GLOBAL</code>(实例级)和 <code>SESSION</code>(连接级),部分仅全局 / 仅会话</td>
<td>支持 <code>GLOBAL</code>(全实例累计)和 <code>SESSION</code>(当前连接累计),部分仅全局(如 <code>Uptime</code>)</td>
</tr>
<tr>
<td>数据类型</td>
<td>字符串、数字、布尔等(配置值)</td>
<td>多为数字(统计计数)、少数字符串(如 <code>Version</code>)</td>
</tr>
<tr>
<td>查询命令</td>
<td><code>show GLOBAL/SESSION VARIABLES </code>;<code>performance_schema.global/session_variables</code></td>
<td><code>show GLOBAL/SESSION STATUS </code>;<code>performance_schema.global/session_status</code></td>
</tr>
</tbody>
</table>
</div>
</div>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">二、分别详解:用例子帮你落地理解</h3>
<h4 class="header-iWP5WJ auto-hide-last-sibling-br">1. <code>variables</code>:管 “规则”,决定 MySQL 怎么跑</h4>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space"><code>variables</code> 是你之前一直关注的 “配置”,核心是「提前设定好的规则」,告诉 MySQL 该用什么字符集、允许多少连接、超时多久断开等。</div>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">常见例子(既全局又会话的核心变量):</div>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<ul class="auto-hide-last-sibling-br">
<li><code>sql_mode</code>:SQL 模式(规则),决定是否允许零日期、是否严格校验数据;</li>
<li><code>wait_timeout</code>:连接超时时间(规则),决定客户端闲置多久断开;</li>
<li><code>character_set_client</code>:客户端字符集(规则),决定 MySQL 如何解析客户端发送的字符;</li>
<li><code>max_connections</code>:最大连接数(规则),决定 MySQL 最多能同时接受多少连接。</li>
</ul>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">查询示例(你之前用过的):</div>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<div class="code-block-element-R6c8c0 light custom-code-block-container--sql hide-indicator disable-theme-style custom-code-block-container">
<div class="code-area-yxsM36 code-area" dir="ltr">
<div class="header-wrapper-Mbk8s6">
<div class="header-IAeXdE">
<div class="title-TXcgFG clickable-cKrA4B" data-popupid="fsgd7e4">
<div class="text-OkYU_0">sql</div>
<div class="icon-UKNQeW"> </div>
</div>
<div class="action-ysQCxz"> </div>
</div>
</div>
<div class="content-y8qlFa code-content light-scrollbar-FFk5j5">
<pre class="container-S2LAkl language-sql"><code class="language-sql"><span class="token comment">-- 查全局配置(规则)
<span class="token keyword">show <span class="token keyword">GLOBAL VARIABLES <span class="token operator">like <span class="token string">'sql_mode'<span class="token punctuation">;
<span class="token comment">-- 查当前会话配置(规则)
<span class="token keyword">show <span class="token keyword">SESSION VARIABLES <span class="token operator">like <span class="token string">'wait_timeout'<span class="token punctuation">;
</span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
<div class="mask-wrapper-ujeSdZ"> </div>
</div>
</div>
<h4 class="header-iWP5WJ auto-hide-last-sibling-br">2. <code>STATUS</code>:管 “结果”,反映 MySQL 跑的怎么样</h4>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space"><code>STATUS</code> 是 MySQL 运行过程中「自动统计的数据」,记录规则执行后的实际效果,比如 “按 <code>max_connections</code> 规则,当前有多少连接在使用”“按 <code>query_cache_type</code> 规则,缓存命中了多少次”。</div>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">常见例子(按场景分类):</div>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<div class="auto-hide-last-sibling-br mdbox-table-root table-container-cYf_5N" data-scroll-inline-overflow="false" data-scroll-inline-at-start="true" data-scroll-inline-start-overflow="false" data-scroll-inline-at-end="true" data-scroll-inline-end-overflow="false">
<div class="table-scroll-container-Gyf4hQ mdbox-table-scroll-container">
<table>
<thead>
<tr><th>状态变量名</th><th>作用说明(反映的 “结果”)</th></tr>
</thead>
<tbody>
<tr>
<td>连接相关</td>
<td> </td>
</tr>
<tr>
<td>Threads_connected</td>
<td>当前活跃的连接数(全局 / 会话,会话级 = 当前连接数 1)</td>
</tr>
<tr>
<td>Threads_running</td>
<td>当前正在执行 SQL 的连接数(排查 “卡库” 常用)</td>
</tr>
<tr>
<td>查询相关</td>
<td> </td>
</tr>
<tr>
<td>Queries</td>
<td>累计执行的 SQL 语句总数(全局 = 全实例,会话 = 当前连接)</td>
</tr>
<tr>
<td>Slow_queries</td>
<td>累计执行时间超过 <code>long_query_time</code>(默认 10 秒)的慢查询数(排查慢查询常用)</td>
</tr>
<tr>
<td>缓存相关</td>
<td> </td>
</tr>
<tr>
<td>Qcache_hits</td>
<td>查询缓存命中次数(5.7 支持,8.0 已移除)</td>
</tr>
<tr>
<td>Qcache_inserts</td>
<td>查询缓存插入次数</td>
</tr>
<tr>
<td>服务器相关</td>
<td> </td>
</tr>
<tr>
<td>Uptime</td>
<td>MySQL 实例启动后的总秒数(仅全局,监控服务器运行时长)</td>
</tr>
<tr>
<td>Com_insert/update/delete</td>
<td>累计执行的插入 / 更新 / 删除语句数(全局 / 会话)</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">查询示例(适配你的 5.7.11):</div>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<div class="code-block-element-R6c8c0 light custom-code-block-container--sql hide-indicator disable-theme-style custom-code-block-container">
<div class="code-area-yxsM36 code-area" dir="ltr">
<div class="header-wrapper-Mbk8s6">
<div class="header-IAeXdE">
<div class="title-TXcgFG clickable-cKrA4B" data-popupid="77bonfx">
<div class="text-OkYU_0">sql</div>
<div class="icon-UKNQeW"> </div>
</div>
<div class="action-ysQCxz"> </div>
</div>
</div>
<div class="content-y8qlFa code-content light-scrollbar-FFk5j5">
<pre class="container-S2LAkl language-sql"><code class="language-sql"><span class="token comment">-- 查全局状态:当前活跃连接数、总查询数
<span class="token keyword">show <span class="token keyword">GLOBAL <span class="token keyword">STATUS <span class="token operator">like <span class="token string">'Threads_connected'<span class="token punctuation">;
<span class="token keyword">show <span class="token keyword">GLOBAL <span class="token keyword">STATUS <span class="token operator">like <span class="token string">'Queries'<span class="token punctuation">;
<span class="token comment">-- 查当前会话状态:当前连接执行的 SQL 数、慢查询数
<span class="token keyword">show <span class="token keyword">SESSION <span class="token keyword">STATUS <span class="token operator">like <span class="token string">'Queries'<span class="token punctuation">;
<span class="token keyword">show <span class="token keyword">SESSION <span class="token keyword">STATUS <span class="token operator">like <span class="token string">'Slow_queries'<span class="token punctuation">;
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
<div class="mask-wrapper-ujeSdZ"> </div>
</div>
</div>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">三、两者的关联:配置(variables)决定状态(STATUS),状态反映配置效果</h3>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space"><code>variables</code> 和 <code>STATUS</code> 不是孤立的,而是 “因” 与 “果” 的关系 —— 你修改了配置(variables),最终会体现在状态(STATUS)上;通过状态(STATUS),也能反推配置(variables)是否合理。</div>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">举 2 个直观关联例子:</div>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<ol class="auto-hide-last-sibling-br">
<li>配置 <code>max_connections</code>(variables)= 100 → 状态 <code>Threads_connected</code>(STATUS)的最大值不会超过 100(如果超过,会出现 “连接数满” 错误);</li>
<li>配置 <code>sql_mode</code>(variables)= <code>STRICT_TRANS_TABLES</code>(严格模式)→ 状态 <code>Com_insert</code>(STATUS)中,因数据不符合规则导致的插入失败数会增加(可结合错误日志查看);</li>
<li>配置 <code>wait_timeout</code>(variables)= 3600 → 状态 <code>Threads_connected</code>(STATUS)中,闲置超过 1 小时的连接会被自动断开,连接数会减少。</li>
</ol>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">四、关键避坑:这些细节别混淆</h3>
<ol class="auto-hide-last-sibling-br">
<li>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">作用域一致性≠含义一致:
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
两者都支持 <code>GLOBAL</code> 和 <code>SESSION</code>,但含义不同:</div>
<ul class="auto-hide-last-sibling-br">
<li><code>show SESSION VARIABLES like 'wait_timeout'</code>:当前连接的超时规则(比如 3600 秒);</li>
<li><code>show SESSION STATUS like 'Threads_connected'</code>:当前连接的活跃状态(固定为 1,因为是当前连接自己)。</li>
</ul>
</li>
<li>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">STATUS 是 “累计值”,不是 “实时快照”:
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
比如 <code>Queries</code> 是从实例 / 连接启动后开始累计的,不是 “当前正在执行的查询数”(当前执行数看 <code>Threads_running</code>)。</div>
</li>
<li>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">部分 STATUS 变量名和 variables 类似,但完全不同:
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
比如 <code>version</code>(STATUS)是 MySQL 版本号(状态),<code>version_comment</code>(variables)是版本注释(配置),名称接近但含义无关。</div>
</li>
</ol>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">五、总结:什么时候用哪个?</h3>
<ul class="auto-hide-last-sibling-br">
<li>想「改规则、调配置」→ 用 <code>variables</code>(比如修改字符集、调整超时时间、开启严格模式);</li>
<li>想「看状态、查问题」→ 用 <code>STATUS</code>(比如排查连接数满、找慢查询、监控缓存效果);</li>
<li>核心逻辑:用 variables 定规则,用 STATUS 看规则的执行效果,两者配合才能完整掌控 MySQL 的运行。</li>
</ul>
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">比如你之前想知道 “会话修改了哪些变量”,用 <code>variables</code> 对比;现在想知道 “修改后连接数是否下降”,就用 <code>STATUS</code> 查 <code>Threads_connected</code> —— 这就是两者的实际配合场景。</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container-P2rR72 flow-markdown-body mdbox-theme-next theme-samantha-uDexJL" dir="ltr" data-testid="message_text_content" data-show-indicator="false"> </div>
<div class="container-P2rR72 flow-markdown-body mdbox-theme-next theme-samantha-uDexJL" dir="ltr" data-testid="message_text_content" data-show-indicator="false"> </div>
<div class="container-P2rR72 flow-markdown-body mdbox-theme-next theme-samantha-uDexJL" dir="ltr" data-testid="message_text_content" data-show-indicator="false"> </div>
<div class="container-P2rR72 flow-markdown-body mdbox-theme-next theme-samantha-uDexJL" dir="ltr" data-testid="message_text_content" data-show-indicator="false">
<div class="container-PvPoAn">
<div class="item-kDun2N">
<div class="container-SrVXPg chrome70-container">
<div class="inner-Qo5lJS inner-item-w21SQO" data-target-id="message-box-target-id" data-testid="union_message">
<div class="message-block-container-PggqdK" data-testid="message-block-container" data-ui-version="samantha">
<div class="flex flex-row w-full justify-end w-full max-w-full s-font-base text-s-color-text-secondary p-0 rounded-s-radius-s bg-transparent data-:-mt-10 data-:py-10 data-:px-16 data-:sm:p-10 data-:hover:bg-s-color-bg-base data-:hover:rounded-s-radius-xs data-:has-[:checked]:bg-s-color-bg-trans data-:has-[:checked]:rounded-s-radius-xs data-:pointer-events-none" data-testid="send_message">
<div class="flex flex-col flex-grow max-w-full min-w-0">
<div class="flex-row flex w-full justify-end" data-testid="message_content" data-message-id="30516952744045058">
<div class="max-w-full" data-plugin-identifier="Symbol(infra:send-message-box:text)">
<div class="container-QQkdo4 bg-s-color-bg-trans rounded-s-radius-s text-s-color-text-secondary s-font-base sm:text-15 max-w-450 px-16 py-9 w-fit min-w-0 !text-" data-testid="message_text_content"><span style="color: rgba(255, 0, 0, 1)">如下的区别? show GLOBAL STATUS; show SESSION STATUS; show STATUS;</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container-PvPoAn">
<div class="item-kDun2N">
<div class="container-SrVXPg chrome70-container">
<div class="inner-Qo5lJS inner-item-w21SQO" data-target-id="message-box-target-id" data-testid="union_message">
<div class="message-block-container-PggqdK" data-testid="message-block-container" data-ui-version="samantha">
<div class="flex flex-row w-full w-full max-w-full s-font-base text-s-color-text-secondary p-0 rounded-s-radius-s bg-transparent group data-:-mt-10 data-:py-10 data-:px-16 data-:sm:p-10 data-:hover:bg-s-color-bg-base data-:hover:rounded-s-radius-xs data-:has-[:checked]:bg-s-color-bg-trans data-:has-[:checked]:rounded-s-radius-xs data-:pointer-events-none" data-testid="receive_message">
<div class="flex flex-col flex-grow max-w-full min-w-0">
<div class="flex-row flex w-full" data-testid="message_content" data-message-id="30516952744045314">
<div class="w-full" data-plugin-identifier="Symbol(code-receive-artifact-message-content)">
<div class="container-ZdJroW" data-expand="false">
<div class="collapse-wrapper-K8DEfQ">
<div class="collapse-collapse-button-BLR92e" data-testid="collapse_button">
<div class="z-10 flex flex-col items-start justify-center gap-2 py-10">
<div> </div>
</div>
<div class="collapse-button-suffix-czkI3o"> </div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container-P2rR72 flow-markdown-body mdbox-theme-next theme-samantha-uDexJL" dir="ltr" data-testid="message_text_content" data-show-indicator="false"> </div>
<div class="container-P2rR72 flow-markdown-body mdbox-theme-next theme-samantha-uDexJL" dir="ltr" data-testid="message_text_content" data-show-indicator="false">
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">这三个命令的核心区别和 <code>variables</code> 系列完全一致 ——默认行为 + 统计数据的作用域(全局 / 会话),结合你熟悉的 MySQL 5.7.11 版本,用 “统计范围 + 实际用途” 就能讲透,还能直接对应到你的运维场景:</div>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">一、核心区别:一张表说清(延续之前的对比逻辑,好理解)</h3>
<div class="auto-hide-last-sibling-br mdbox-table-root table-container-cYf_5N" data-scroll-inline-overflow="true" data-scroll-inline-at-start="true" data-scroll-inline-start-overflow="false" data-scroll-inline-at-end="false" data-scroll-inline-end-overflow="true">
<div class="table-scroll-container-Gyf4hQ mdbox-table-scroll-container">
<table>
<thead>
<tr><th>命令</th><th>作用域</th><th>统计范围(数据来源)</th><th>典型用途</th></tr>
</thead>
<tbody>
<tr>
<td><code>show GLOBAL STATUS</code></td>
<td>全局(实例级)</td>
<td>从 MySQL 实例启动后开始 累计 的全实例数据(所有连接的汇总统计)</td>
<td>监控整个数据库的运行状态(比如总连接数、全实例慢查询数、服务器运行时长)</td>
</tr>
<tr>
<td><code>show SESSION STATUS</code></td>
<td>会话(连接级)</td>
<td>从当前连接启动后开始 累计 的专属数据(仅当前连接的操作统计)</td>
<td>排查当前连接的问题(比如当前连接执行了多少 SQL、当前连接的慢查询数)</td>
</tr>
<tr>
<td><code>show STATUS</code></td>
<td>默认 = 会话级(省略 SESSION)</td>
<td>等价于 <code>show SESSION STATUS</code>,仅显示 当前连接的累计统计数据</td>
<td>快速查看当前连接的操作状态(比如刚执行的 SQL 有没有触发慢查询)</td>
</tr>
</tbody>
</table>
</div>
</div>
<h4 class="header-iWP5WJ auto-hide-last-sibling-br">关键结论(和 variables 逻辑对齐,易记):</h4>
<ul class="auto-hide-last-sibling-br">
<li><code>show STATUS</code> 没有 “叠加”,默认只看「当前会话」的统计;</li>
<li>全局状态是 “全实例汇总”,会话状态是 “当前连接单独统计”,互不干扰;</li>
<li>数据都是 累计值(从实例 / 连接启动时开始算),不是实时 “快照”(比如 <code>Queries</code> 是累计执行的 SQL 总数,不是当前正在执行的数量)。</li>
</ul>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">二、直观例子:执行后看差异(直接复制到你的 5.7.11 测试)</h3>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">假设场景:你的 MySQL 实例已运行 1000 秒,当前有 3 个活跃连接,你当前连接刚执行了 5 条 SQL,其中 1 条是慢查询。</div>
<h4 class="header-iWP5WJ auto-hide-last-sibling-br">1. 查全局状态(全实例汇总)</h4>
<div class="code-block-element-R6c8c0 light custom-code-block-container--sql hide-indicator disable-theme-style custom-code-block-container">
<div class="code-area-yxsM36 code-area" dir="ltr">
<div class="header-wrapper-Mbk8s6">
<div class="header-IAeXdE">
<div class="title-TXcgFG clickable-cKrA4B" data-popupid="ziw873b">
<div class="text-OkYU_0">sql</div>
<div class="icon-UKNQeW"> </div>
</div>
<div class="action-ysQCxz"> </div>
</div>
</div>
<div class="content-y8qlFa code-content light-scrollbar-FFk5j5">
<pre class="container-S2LAkl language-sql"><code class="language-sql"><span class="token keyword">show <span class="token keyword">GLOBAL <span class="token keyword">STATUS <span class="token operator">like <span class="token string">'Uptime'<span class="token punctuation">; <span class="token comment">-- 结果:1000(实例运行总秒数,仅全局有)
<span class="token keyword">show <span class="token keyword">GLOBAL <span class="token keyword">STATUS <span class="token operator">like <span class="token string">'Threads_connected'<span class="token punctuation">; <span class="token comment">-- 结果:3(全实例当前活跃连接数)
<span class="token keyword">show <span class="token keyword">GLOBAL <span class="token keyword">STATUS <span class="token operator">like <span class="token string">'Queries'<span class="token punctuation">; <span class="token comment">-- 结果:100(全实例所有连接累计执行100条SQL)
<span class="token keyword">show <span class="token keyword">GLOBAL <span class="token keyword">STATUS <span class="token operator">like <span class="token string">'Slow_queries'<span class="token punctuation">; <span class="token comment">-- 结果:5(全实例所有连接累计5条慢查询)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
<div class="mask-wrapper-ujeSdZ"> </div>
</div>
</div>
<h4 class="header-iWP5WJ auto-hide-last-sibling-br">2. 查当前会话状态(仅你当前连接)</h4>
<div class="code-block-element-R6c8c0 light custom-code-block-container--sql hide-indicator disable-theme-style custom-code-block-container">
<div class="code-area-yxsM36 code-area" dir="ltr">
<div class="header-wrapper-Mbk8s6">
<div class="header-IAeXdE">
<div class="title-TXcgFG clickable-cKrA4B" data-popupid="lptihng">
<div class="text-OkYU_0">sql</div>
<div class="icon-UKNQeW"> </div>
</div>
<div class="action-ysQCxz"> </div>
</div>
</div>
<div class="content-y8qlFa code-content light-scrollbar-FFk5j5">
<pre class="container-S2LAkl language-sql"><code class="language-sql"><span class="token keyword">show <span class="token keyword">SESSION <span class="token keyword">STATUS <span class="token operator">like <span class="token string">'Uptime'<span class="token punctuation">; <span class="token comment">-- 结果:60(当前连接已建立60秒,不是实例时长)
<span class="token keyword">show <span class="token keyword">SESSION <span class="token keyword">STATUS <span class="token operator">like <span class="token string">'Threads_connected'<span class="token punctuation">; <span class="token comment">-- 结果:1(当前连接自己,固定为1)
<span class="token keyword">show <span class="token keyword">SESSION <span class="token keyword">STATUS <span class="token operator">like <span class="token string">'Queries'<span class="token punctuation">; <span class="token comment">-- 结果:5(当前连接累计执行5条SQL)
<span class="token keyword">show <span class="token keyword">SESSION <span class="token keyword">STATUS <span class="token operator">like <span class="token string">'Slow_queries'<span class="token punctuation">; <span class="token comment">-- 结果:1(当前连接累计1条慢查询)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
<div class="mask-wrapper-ujeSdZ"> </div>
</div>
</div>
<h4 class="header-iWP5WJ auto-hide-last-sibling-br">3. 查默认 STATUS(等价于 SESSION)</h4>
<div class="code-block-element-R6c8c0 light custom-code-block-container--sql hide-indicator disable-theme-style custom-code-block-container">
<div class="code-area-yxsM36 code-area" dir="ltr">
<div class="header-wrapper-Mbk8s6">
<div class="header-IAeXdE">
<div class="title-TXcgFG clickable-cKrA4B" data-popupid="u75a81y">
<div class="text-OkYU_0">sql</div>
<div class="icon-UKNQeW"> </div>
</div>
<div class="action-ysQCxz"> </div>
</div>
</div>
<div class="content-y8qlFa code-content light-scrollbar-FFk5j5">
<pre class="container-S2LAkl language-sql"><code class="language-sql"><span class="token keyword">show <span class="token keyword">STATUS <span class="token operator">like <span class="token string">'Queries'<span class="token punctuation">; <span class="token comment">-- 结果:5(和 SESSION 完全一致)
<span class="token keyword">show <span class="token keyword">STATUS <span class="token operator">like <span class="token string">'Slow_queries'<span class="token punctuation">; <span class="token comment">-- 结果:1(和 SESSION 完全一致)
</span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
<div class="mask-wrapper-ujeSdZ"> </div>
</div>
</div>
<h4 class="header-iWP5WJ auto-hide-last-sibling-br">差异一眼懂:</h4>
<ul class="auto-hide-last-sibling-br">
<li>全局状态是 “集体数据”,反映整个数据库的负载;</li>
<li>会话状态是 “个人数据”,只反映你当前连接的操作;</li>
<li><code>show STATUS</code> 就是偷懒写法,默认看 “个人数据”。</li>
</ul>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">三、关键注意点(避坑,适配 5.7.11)</h3>
<ol class="auto-hide-last-sibling-br">
<li>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">部分状态变量只有 “全局版”,没有会话版:
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
比如 <code>Uptime</code>(实例运行时长)、<code>Com_show_databases</code>(全实例累计执行 <code>show databases</code> 的次数),执行 <code>show SESSION STATUS like 'Uptime'</code> 也能查到,但值是「当前连接的存活时长」(不是实例时长),用途不同。</div>
</li>
<li>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">会话状态的生命周期:
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
会话状态数据从连接建立时开始累计,断开连接后数据会重置(下次重连重新从 0 开始算);而全局状态数据从实例启动时开始累计,重启实例才会重置。</div>
</li>
<li>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">别把 “累计值” 当 “实时值”:</div>
<ul class="auto-hide-last-sibling-br">
<li>想查 “当前正在执行的 SQL 数”→ 用 <code>show GLOBAL STATUS like 'Threads_running'</code>(全局),不是 <code>Queries</code>(累计总数);</li>
<li>想查 “当前活跃连接数”→ 用 <code>show GLOBAL STATUS like 'Threads_connected'</code>(全局),不是 <code>Threads_running</code>(正在执行的连接数)。</li>
</ul>
</li>
<li>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space">权限要求:
<div class="container-Uxvbjy md-box-line-break wrapper-GYqxgQ undefined"> </div>
普通用户默认能查 <code>SESSION STATUS</code>;查 <code>GLOBAL STATUS</code> 可能需要 <code>PROCESS</code> 权限(如果报错 “Access denied”,让管理员授予 <code>GRANT PROCESS ON *.* TO '你的用户名'@'localhost';</code>)。</div>
</li>
</ol>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">四、实际使用场景(什么时候用哪个?)</h3>
<div class="auto-hide-last-sibling-br mdbox-table-root table-container-cYf_5N" data-scroll-inline-overflow="true" data-scroll-inline-at-start="true" data-scroll-inline-start-overflow="false" data-scroll-inline-at-end="false" data-scroll-inline-end-overflow="true">
<div class="table-scroll-container-Gyf4hQ mdbox-table-scroll-container">
<table>
<thead>
<tr><th>需求场景</th><th>推荐命令</th><th>原因</th></tr>
</thead>
<tbody>
<tr>
<td>查看数据库总连接数、总慢查询数</td>
<td><code>show GLOBAL STATUS</code></td>
<td>需全实例汇总数据</td>
</tr>
<tr>
<td>排查当前连接的 SQL 执行情况(比如 “我刚执行的 SQL 有没有算慢查询”)</td>
<td><code>show SESSION STATUS</code> / <code>show STATUS</code></td>
<td>只需当前连接的统计数据</td>
</tr>
<tr>
<td>监控数据库运行时长、整体缓存命中率</td>
<td><code>show GLOBAL STATUS</code></td>
<td>全局累计数据才有意义</td>
</tr>
<tr>
<td>测试当前连接的参数效果(比如修改 <code>sql_safe_updates</code> 后,看当前连接的更新语句数)</td>
<td><code>show SESSION STATUS</code></td>
<td>仅关注当前连接的操作结果</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3 class="header-iWP5WJ auto-hide-last-sibling-br">最终总结(一句话记牢)</h3>
<ul class="auto-hide-last-sibling-br">
<li><code>show GLOBAL STATUS</code>:看 “整个数据库的累计战况”;</li>
<li><code>show SESSION STATUS</code>:看 “你当前连接的累计战况”;</li>
<li><code>show STATUS</code>:简写 = <code>SESSION STATUS</code>,懒人的 “个人战况” 查询;</li>
<li>核心还是「作用域」,和之前 <code>variables</code> 系列的命令逻辑完全一致,不用额外记新规则~</li>
<li>
<div class="auto-hide-last-sibling-br paragraph-pP9ZLC paragraph-element br-paragraph-space"><code>show SESSION VARIABLES;</code> = <code>show LOCAL VARIABLES;</code>(两者完全一样)。</div>
<div> </div>
</li>
</ul>
<p> </p>
<p> </p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="MySignature" role="contentinfo">
<h3>
<br>
<fieldset>
<legend>版权声明</legend>
<br>
本文原创发表于 博客园,作者为 阿K .
本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
<br>
欢迎关注本人微信公众号:觉醒的码农,或者扫码进群:<br>
<img src="https://files.cnblogs.com/files/FlyAway2013/wechat111.bmp">
<img src="https://files-cdn.cnblogs.com/files/FlyAway2013/qrcode_for_gh_3f0d03520497_128.bmp">
</fieldset>
</h3><br><br>
来源:https://www.cnblogs.com/FlyAway2013/p/19258964
頁:
[1]