• MySQL 8.0新特性--让你轻轻松松找到配置项的位置


    前言

    我们都知道,MySQL配置项可以从多种方式设置:

    1、在配置文件中定义, 查看配置路径:

    1. mysqld --verbose --help| grep -A 1 "Default options"
    2. /etc/mysql/my.cnf ~/.my.cnf /usr/etc/my.cnf

    2、通过命令动态修改

    set global var=value;

    当同一个配置项可能在多个配置文件中都定义,或被动态调整过时,要想确认最终生效的值的来源是非常困难的。

    令人高兴的是,MySQL 8.0提供一张表(performance_schema.variables_info)可轻松查找到一个变量在哪里被定义

    使用教程案例

    下面以max_connections为例,验证在不同文件和动态修改下如何查看定义位置。

    1. 先查看当前值为多少:
    1. mysql> show global variables like 'max_connections';
    2. +-----------------+-------+
    3. | Variable_name | Value |
    4. +-----------------+-------+
    5. | max_connections | 151 |
    6. +-----------------+-------+
    1. 通过variables_info查看详细信息:
    mysql> SELECT t1.*, VARIABLE_VALUE        FROM performance_schema.variables_info t1        JOIN performance_schema.global_variables t2          ON t2.VARIABLE_NAME=t1.VARIABLE_NAME      WHERE t1.VARIABLE_NAME LIKE 'max_connections'\G*************************** 1. row ***************************  VARIABLE_NAME: max_connectionsVARIABLE_SOURCE: COMPILED  VARIABLE_PATH:       MIN_VALUE: 1      MAX_VALUE: 100000       SET_TIME: NULL       SET_USER: NULL       SET_HOST: NULL VARIABLE_VALUE: 1511 row in set (0.09 sec)

    可以看到变量的详细信息,包括变量名、变量值、最小最大值约束、以及最重要的变量来源和路径。

    VARIABLE_SOURCE: COMPILED表示未在其它地方定义,采用系统内置默认值。

    (https://dev.mysql.com/doc/refman/8.0/en/variables-info-table.html)可看到所有枚举值说明

    3.修改配置文件/etc/my.cnf

    1. [mysqld]
    2. max_connections=200

    保存,重启mysqld,执行同样的sql:

    1. *************************** 1. row ***************************
    2. VARIABLE_NAME: max_connections
    3. VARIABLE_SOURCE: GLOBAL
    4. VARIABLE_PATH: /etc/my.cnf
    5. MIN_VALUE: 1
    6. MAX_VALUE: 100000
    7. SET_TIME: NULL
    8. SET_USER: NULL
    9. SET_HOST: NULL
    10. VARIABLE_VALUE: 200

    这时,能看到变量是在/etc/my.cnf定义的!

    4.在多个配置文件中定义的情况 在/etc/mysql/my.cnf也定义一次:

    1. [mysqld]
    2. max_connections=300

    重启再检查:

    1. *************************** 1. row ***************************
    2. VARIABLE_NAME: max_connections
    3. VARIABLE_SOURCE: GLOBAL
    4. VARIABLE_PATH: /etc/mysql/my.cnf
    5. MIN_VALUE: 1
    6. MAX_VALUE: 100000
    7. SET_TIME: NULL
    8. SET_USER: NULL
    9. SET_HOST: NULL
    10. VARIABLE_VALUE: 300

    可以看到,尽管在两个文件中都定义max_connections,但最终生效的是/etc/mysql/my.cnf内定义的值。 再也不用担心无法确认在哪个配置文件了。

    1. 动态修改的情况
    1. mysql> set global max_connections=2000;
    2. Query OK, 0 rows affected (0.04 sec)

    执行查询:

    1. *************************** 1. row ***************************
    2. VARIABLE_NAME: max_connections
    3. VARIABLE_SOURCE: DYNAMIC
    4. VARIABLE_PATH:
    5. MIN_VALUE: 1
    6. MAX_VALUE: 100000
    7. SET_TIME: 2017-11-14 11:54:19
    8. SET_USER: root
    9. SET_HOST: localhost
    10. VARIABLE_VALUE: 2000

    可以看到,来源字段显示DYNAMIC动态修改,且可看到修改时间、修改账户以及修改host。

    结尾

    很贴心很强大的一个MysQL 8.0新特性,赶紧用起来吧!

  • 相关阅读:
    99%的人都把三层架构和SpringMVC的关系搞错了
    瑞吉外卖:通过Shell脚本自动部署项目
    STM32时钟系统配置程序源码深入分析
    java毕业设计课堂管理系统小程序用户端mybatis+源码+调试部署+系统+数据库+lw
    10分钟!搞懂计算机CPU实现原理
    【内网穿透】公网远程访问本地硬盘文件
    初刷leetcode题目(5)——数据结构与算法
    【English】十大词性之数词
    有什么好用的站内搜索SaaS能帮网站实现站内搜索功能?
    每个人都应该去学写作
  • 原文地址:https://blog.csdn.net/eeeeety6208/article/details/126673155