深入理解mysql参数

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:        前言:mysql参数的修改在mysql的课程里面应该属于相对基础的知识,但是作为一个mysql的初学者还是很有必要弄懂这个知识点,以后的学习过程中将会经常用到的。

       前言:mysql参数的修改在mysql的课程里面应该属于相对基础的知识,但是作为一个mysql的初学者还是很有必要弄懂这个知识点,以后的学习过程中将会经常用到的。技术很多时候都是相通的,如果有学过oracle的朋友应该会知道,oracle的参数里面有几个标签:动态参数、静态参数、session级别修改、全局修改、立即生效和延迟生效。作为数据库mysql也同样有这些特性,但是整体学起来后会发现mysql某些方面还是没有oracle做的到位,在该文档的最后咱们再做个总结。

       

 一、参数文件

      1、查看参数文件

      通过命令行"mysql --help | grep my.cnf"查看my.cnf文件的位置,linux操作系统中参数文件默认为/etc/my.cnf,按照mysql官方文档的说明,mysql的启动参数文件的顺序如下:

 

1、查找根据顺序查找全局 /etc/my.cnf  /etc/mysql/my.cnf  /SYSCONFDIR/my.cnf为全局选项

2、$MYSQL_HOME/my.cnf为服务指定变量

     

       二、参数文件的修改

       1、动态参数和静态参数的概念

       Mysql 的参数类型:分为动态(dynamic)和静态参数(static);

       动态参数意味着可以再mysql实例运行中进行更改;

        静态参数说明在整个实例声明周期内都不得进行更改,就好像是只读的。

        在动态参数中,有些参数修改可以是基于回话的也可以是基于整个实例的生命周期。

     

        2、全局变量与会话变量

       全局变量在MYSQL启动的时候由服务器自动将它们初始化为默认值。会话变量在每次建立一个新的连接的时候,由MYSQL来初始化。MYSQL会将当前所有全局变量的值复制一份。来做为会话变量。(也就是说,如果在建立会话以后,没有手动更改过会话变量与全局变量的值,那所有这些变量的值都是一样的。全局变量与会话变量的区别就在于,对全局变量的修改会影响到整个服务器,但是对会话变量的修改,只会影响到当前的会话(也就是当前的数据库连接)

       3、参数的查看方式

        Mysql的参数可以通过"show variables"来查看,由于从mysql5.1版本开始,可以通过information_schema架构下的GLOBAL_VARIABLES视图来进行查找,所以也可以这样查看"select * from information_schema.global_variables";

查看参数的脚本:

语句一、 


mysql> SHOW VARIABLES LIKE 'max_join_size'; 


mysql> SHOW GLOBAL VARIABLES LIKE 'max_join_size'; 


 

语句二、 


mysql> select * from information_schema.global_variables;

+---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+

| VARIABLE_NAME                                     | VARIABLE_VALUE                                                                                                         |

+---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+

| MAX_PREPARED_STMT_COUNT                           | 16382                                                                                                                  |

| INNODB_BUFFER_POOL_SIZE                           | 134217728                                                                                                              |

| HAVE_CRYPT                                        | YES                                                                                                                    |

| PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_LONG_SIZE | 10000                                                                                                                  |

| INNODB_VERSION                                    | 5.5.36                                                                                                                 |

| QUERY_PREALLOC_SIZE                               | 8192                                                                                                                   |

| DELAYED_QUEUE_SIZE                                | 1000                                                                                                                   |

| PERFORMANCE_SCHEMA_MAX_COND_INSTANCES             | 1000                                                                                                                   |

| SSL_CIPHER                                        |                                                                                                                        |

| COLLATION_SERVER                                  | utf8_general_ci                                                                                                        |

| SECURE_FILE_PRIV                                  |                                                                                                                        |

| TIMED_MUTEXES                                     | OFF                                                                                                                    |

| DELAYED_INSERT_TIMEOUT                            | 300                                                                                                                    |

| PERFORMANCE_SCHEMA_MAX_MUTEX_INSTANCES            | 1000000                                                                                                                |

| LC_TIME_NAMES                                     | en_US                 

 

        4、参数的修改,参数的修改有以下几种方法,作为学习、便于理解其中的原理所在,这里把几种方法都整理出来了,欢迎各位的查看

        方法一、修改参数文件。所有的参数都保存在/etc/my.cnf文件中,所以直接修改该参数文件便可修改相应的系统参数。

        弊端:修改该参数需要重启后才能生效,当系统上线后一般都不能随便重启,所以该方法很少用;

操作方法:

1、修改参数文件/etc/my.cnf,添加general_log_file = /data/mysql/mysql_2.log
vi  /etc/my.cnf

# The MySQL server

[mysqld]

port            = 3306

socket          = /tmp/mysql.sock

skip-external-locking

key_buffer_size = 384M

max_allowed_packet = 1M

table_open_cache = 512

sort_buffer_size = 2M

read_buffer_size = 2M

read_rnd_buffer_size = 8M

myisam_sort_buffer_size = 64M

thread_cache_size = 8

query_cache_size = 32M

# Try number of CPU's*2 for thread_concurrency

thread_concurrency = 8

general_log_file = /data/mysql/mysql_2.log

 

2、重启mysql服务

service mysqld stop

 

3、检查参数是否生效

mysql> show variables like 'general%';

+------------------+-------------------------+

| Variable_name    | Value                   |

+------------------+-------------------------+

| general_log      | OFF                     |

| general_log_file | /data/mysql/mysql_2.log |

+------------------+-------------------------+

2 rows in set (0.00 sec)

 

当前显示已生效

 

方法二、如果是动态参数的话,便可以直接通过语句修改。

http://dev.mysql.com/doc/refman/5.6/en/dynamic-system-variables.html mysql的所有参数详情介绍

sql语法:

SET variable_assignment [, variable_assignment] ...      //可以同时修改多个参

   

variable_assignment: 


      user_var_name = expr 


    | [GLOBAL | SESSION] system_var_name = expr 


    | @@[global. | session.]system_var_name = expr 


 

例子: 


SET sort_buffer_size=10000;   /修改SESSION参数 


SET @@local.sort_buffer_size=10000;   /修改全局参数 


SET GLOBAL sort_buffer_size=1000000, SESSION sort_buffer_size=1000000;   /同时修改多个SESSION参数 


SET @@sort_buffer_size=1000000; /第二种修改全局参数的方法 


SET @@global.sort_buffer_size=1000000, @@local.sort_buffer_size=1000000;


 

说明如下:

1)修改SESSION的参数的影响:如果您使用SESSION(默认情况)设置一个系统变量,则该值仍然有效,直到当前会话结束为止,或者直到您把变量设置为一个不同的值为止。

2)如果您使用GLOBAL(要求SUPER权限)来设置一个系统变量,则该值被记住,并被用于新的连接,直到服务器重新启动为止。

如果您想要进行永久式变量设置,需要写入到参数文件。(通过SET命令并不会修改参数文件的内容,还需要另行修改,这点做的没有ORACLE好)

3)为了防止不正确的使用,如果您使用SET GLOBAL时同时使用了一个只能与SET SESSION同时使用的变量,或者如果您在设置一个全局变量时未指定GLOBAL(或@@),则MySQL会产生一个错误。( SET GLOBAL命令修改SESSION参数的时候会报错

4)如果您想要把一个SESSION变量设置为GLOBAL值或把一个GLOBAL值设置为内部MySQL默认值,需使用DEFAULT关键词。例如,在把max_join_size会话值设置为全局值时,以下两个语句是一样的:SET max_join_size=DEFAULT;(恢复成默认值的设置)

总结:1、mysql的参数设置相对oracle来说较为简单。

           2、针对参数设置的方法本身没有太多经验,作为一个DBA不管是修改oracle参数、或mysql参数,建议每个数据库都有一个文档用于记录参数修改的历史,这样哪台出现了问题,便于跟踪;

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

本文作者:JOHN

ORACLE技术博客:ORACLE 猎人笔记               数据库技术群:367875324 (请备注ORACLE管理 )  

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
资源调度 JavaScript 前端开发
【TypeScript】TS 看这一篇就够了
【TypeScript】TS 看这一篇就够了
1372 0
|
自然语言处理 JavaScript
vue element plus Config Provider 全局配置
vue element plus Config Provider 全局配置
408 0
|
存储 Web App开发 Go
使用Golang上传文件到MinIO对象存储(一)
前一篇文章介绍了开源存储系统 MinIO 的基本内容,今天我们就来看一下,如何使用 Golang 语言将本地的文件上传到 MinIO 对象存储服务上。
3055 2
|
存储 人工智能 搜索推荐
详解MySQL字符集和Collation
MySQL支持了很多Charset与Collation,并且允许用户在连接、Server、库、表、列、字面量多个层次上进行精细化配置,这有时会让用户眼花缭乱。本文对相关概念、语法、系统变量、影响范围都进行了详细介绍,并且列举了有可能让字符串发生字符集转换的情况,以及来自不同字符集的字符串进行比较等操作时遵循的规则。对于最常用的基于Unicode的字符集,本文介绍了Unicode标准与MySQL中各个字符集的关系,尤其详细介绍了当前版本(8.0.34)默认字符集utf8mb4。
|
JavaScript 关系型数据库 MySQL
❤Nodejs 第二章(Node连接本地数据库)
【4月更文挑战第2天】本文介绍了如何使用Node.js连接本地MySQL数据库。首先,提到了在MySQL官网下载安装数据库和使用Navicat for MySQL进行数据库管理。接着,通过`yarn add mysql`在项目中安装数据库依赖。然后,创建`app.js`文件,设置数据库连接参数,并建立连接进行查询操作。遇到导入模块的错误后,修改导入方式为CommonJS语法。
488 1
|
自然语言处理 算法 物联网
【技术前沿】智能反向寻车解决方案:提升停车场用户体验与运营效率
本文介绍了一种智能反向寻车解决方案,通过集成物联网(IoT)、大数据分析及用户友好的移动应用,利用蓝牙信标或RFID标签实现车辆厘米级定位。车主仅需输入车牌号或停车位编号,即可获得最佳寻车路径。该方案不仅大幅缩短寻车时间,还提升了停车场运营效率。以合肥骆岗公园为例,应用后车主平均寻车时间从10分钟缩短至2分钟内,用户满意度显著提高。
427 1
【技术前沿】智能反向寻车解决方案:提升停车场用户体验与运营效率
|
12月前
|
存储 前端开发 JavaScript
🚀 10 个 GitHub 存储库,助你成为前端巨匠✨
本文介绍了10个极具价值的GitHub存储库,旨在帮助各级JavaScript开发人员提升技能。这些资源涵盖了从基本概念到高级算法、编码风格指南、面试准备等各个方面,包括经典书籍、实用工具和面试手册。无论您是刚入门的新手还是有经验的开发者,这些存储库都能为您提供丰富的学习资源,助您在JavaScript领域更进一步。探索这些资源,开启您的学习之旅吧!
219 0
🚀 10 个 GitHub 存储库,助你成为前端巨匠✨
|
12月前
|
存储 Rust 监控
使用 watchfiles 监控目录变更
使用 watchfiles 监控目录变更
254 2
|
存储 Java
java 服务 JVM 参数设置配置
java 服务 JVM 参数设置配置
307 3
|
JSON 安全 Java
微服务Token鉴权设计:概念与实战
【4月更文挑战第29天】在微服务架构中,鉴权是确保服务安全的重要环节。由于微服务往往由多个独立的服务组成,这些服务之间的通信需要一种高效、安全的鉴权机制。Token鉴权作为一种常用的鉴权方式,为微服务架构提供了简洁而有效的解决方案。
365 0