前言:
在后面一些文章中,常常能看到介绍某某参数的作用,可能有些小伙伴仍搞不清楚 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 或运维来保护,可能有些同学对这些参数还比拟生疏。倡议在数据库初始化时,依据服务器规格设置对应的数据库参数。对于不分明作用的参数,倡议放弃默认值即可。对于更多参数相干的内容,能够参考官网文档:
- https://dev.mysql.com/doc/refman/5.7/en/server-system-variable-reference.html
总结:
本篇文章具体讲述了 MySQL 参数相干概念及查问更改办法,心愿各位小伙伴能学到相干常识。