• 关于MySQL参数,这些你要知道


    前言:

    在前面一些文章中,经常能看到介绍某某参数的作用,可能有些小伙伴仍搞不清楚 MySQL 参数是啥。本篇文章我们来聊聊 MySQL 参数,学习下如何管理维护 MySQL 参数。

    1.MySQL参数概念

    我们所说的参数在官方文档中称为 系统变量(system variable),不同的变量有着不同的作用。 MySQL 服务端维护了许多表示其配置的系统变量,所有变量均有默认值。一般可以在启动命令行中或配置文件中对它们进行设置。

    系统变量分为全局系统变量(global)和会话系统变量(session)。有些变量既有全局变量又有会话变量,有些变量只有全局变量。全局变量影响服务器的全局操作,会话变量只影响具体客户端连接相关操作。若会话变量未单独设置,则继承自相应全局变量。

    MySQL 服务启动时,会按照配置文件或命令行中指定的选项来给全局变量赋值,没有指定则按默认值处理。服务启动后,通过连接服务器并执行 SET GLOBAL var_name 语句可以动态更改部分全局变量的值。要想更改全局变量,必须具有 SUPER 权限。 MySQL 还为每个客户端连接维护会话变量,连接时使用相应全局变量的当前值对客户端会话变量进行初始化。客户端可以通过 SET SESSION var_name 语句来动态更改会话变量。设置会话变量不需要特殊权限,但会话变量只作用于当前连接。

    2.参数查询与变更示例

    这里也要说明下,并不是所有的参数都可以动态修改,某些参数只能写入配置文件然后重启数据库才能生效。下面我们来展示下 MySQL 参数的查询与修改。

    # 参数查询
    show global  variables like 'var_name';  //查看全局系统变量的值,可使用%通配符
    show session variables like 'var_name';  //查看会话系统变量的值
    show         variables like 'var_name';  //优先返回会话系统变量,若会话系统变量不存在,则返回全局系统变量。
    
    # 也可用select查询某个特定参数
    select @@global.var_name;  //全局系统变量
    select @@session.var_name;  //会话系统变量
    select @@var_name;  //优先会话系统变量
    
    # 查询示例
    mysql> show global variables like 'server_id';
    +---------------+---------+
    | Variable_name | Value   |
    +---------------+---------+
    | server_id     | 1003306 |
    +---------------+---------+
    1 row in set (0.00 sec)
    
    mysql> show global variables like 'log_bin%';
    +---------------------------------+-------------------------------+
    | Variable_name                   | Value                         |
    +---------------------------------+-------------------------------+
    | log_bin                         | ON                            |
    | log_bin_basename                | /data/mysql/logs/binlog       |
    | log_bin_index                   | /data/mysql/logs/binlog.index |
    | log_bin_trust_function_creators | ON                            |
    | log_bin_use_v1_row_events       | OFF                           |
    +---------------------------------+-------------------------------+
    5 rows in set (0.00 sec)
    
    mysql> select @@server_id;
    +-------------+
    | @@server_id |
    +-------------+
    |     1003306 |
    +-------------+
    1 row in set (0.00 sec)
    
    # 动态修改参数
    set global var_name = value;
    set session var_name = value;
    set var_name = value;
    
    set @@global.var_name = value;
    set @@session.var_name = value;
    set @@var_name = value;
    
    # 参数修改示例
    mysql> set global sort_buffer_size = 2097152;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> set session sort_buffer_size = 4194304;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select @@global.sort_buffer_size,@@session.sort_buffer_size;
    +---------------------------+----------------------------+
    | @@global.sort_buffer_size | @@session.sort_buffer_size |
    +---------------------------+----------------------------+
    |                   2097152 |                    4194304 |
    +---------------------------+----------------------------+
    1 row in set (0.00 sec)
    

    参数动态修改后,建议将其写入配置文件。因为动态修改的参数在 MySQL 服务重启后会失效,只有写入配置文件才能够重启后仍有效。对于一些无法动态修改的参数,我们只能通过修改配置文件,然后重启来使之生效。这里所说的配置文件就是 my.cnf 文件了,Linux 系统一般在 /etc 目录下;Windows 系统一般在 basedir 目录下,名称可命名为 my.ini 。大部分参数需要配置在 [mysqld] 下,一份简单的配置文件示例如下:

    vi /etc/my.cnf
    # 简单模板如下:
    [mysqld]
    user = mysql       
    datadir = /data/mysql/data                
    socket = /data/mysql/tmp/mysql.sock
    pid-file  = /data/mysql/tmp/mysqld.pid   
    skip_name_resolve = 1
    max_connections = 2000
    lower_case_table_names = 1
    log_timestamps=SYSTEM
    max_allowed_packet = 32M
    ...
    

    MySQL 参数一般由 DBA 或运维来维护,可能有些同学对这些参数还比较陌生。建议在数据库初始化时,根据服务器规格设置对应的数据库参数。对于不清楚作用的参数,建议保持默认值即可。关于更多参数相关的内容,可以参考官方文档:

    总结:

    本篇文章详细讲述了 MySQL 参数相关概念及查询更改方法,希望各位小伙伴能学到相关知识。

    wx_blog.png

    作者:MySQL技术
    出处:https://www.cnblogs.com/kunjian/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    如果文中有什么错误,欢迎指出。以免更多的人被误导。有需要沟通的,可以站内私信,文章留言,或者关注『MySQL技术』公众号私信我。一定尽力回答。
  • 相关阅读:
    taotao订单系统
    使用JMeter进行一次简单的带json数据的post请求测试
    taotao购物车2 解决购物车本地cookie和服务器redis不同步的问题
    Dubbo入门介绍---搭建一个最简单的Demo框架
    关于地图模糊
    二维纹理 Texture 2D
    TexturePacker
    Unity3D实现3D立体游戏原理及过程,需偏振眼镜3D显
    解决RegexKitLite编译报错
    QualitySettings 3d模型质量显示设置
  • 原文地址:https://www.cnblogs.com/mysqljs/p/13613494.html
Copyright © 2020-2023  润新知