赞
踩
本文使用的MySQL版本是8.0
MySQL服务器通常说的是mysqld程序。
mysqld 是 MySQL 数据库服务器的核心程序,负责处理客户端的请求、管理数据库和执行数据库操作。管理员可以通过配置文件和各种工具来管理和监控 mysqld 服务器的运行
官方文档:MySQL :: MySQL 8.0 Reference Manual :: 7 MySQL Server Administration
本文将介绍下面三个内容:
服务器启动选项:可以在命令行和配置文件中指定,用于配置服务器的行为和特性。
服务器系统变量:反映了启动选项的当前状态和值,其中一些变量可以在服务器运行时修改。
服务器状态变量:包含了关于运行时操作的计数器和统计信息。
每次启动mysqld的时候,可以通过命令行或者文件来提供选项,建议使用文件的方式来指定选项,这样就能确保每次运行时都是使用相同的选项。
如果mysqld启动时如果没有用--defaults-file 来指定配置文件,那么就是按照表格由上至下依次查找配置文件。后面的配置文件会把前面的覆盖掉(如果有相同的配置)。
使用文件的方式读取选项时,mysqld是从 [mysqld] 和 [server] 这两个节点中读取选项的。
mysqld --verbose --help
使用该命令,会把mysqld的选项和系统变量列出来。一般不使用这个命令,因为它把选项和系统变量都输出了,我们可以在官网查看这些选项。
在指定的配置文件中修改或添加即可
反映了启动选项的当前状态和值,其中一些变量可以在服务器运行时修改。
可以说,系统变量就是选项的表现,
- # 在mysql命令行下
- show variables;
或者用mysqladmin程序
mysqladmin variables
show variables like "%xxx%";
show [global | session] variables;
下面将会讲到全局变量或者局部变量
示例:为服务器指定 256 KB 的排序缓冲区大小和 1 GB 的最大数据包大小
在命令行的指定:
mysqld --sort-buffer-size=256K
--max-allowed-packet=1G
在选项文件中指定:
[mysqld]
sort_buffer_size=256k
max_allowed_packet=1g
服务器启动时,会将每个全局变量初始化并设置默认值,具体的值可以通过命令行或选项文件更改。
服务器为每个客户端维护一组 Session 变量,在客户端连接时使用相应全局变量的当前值进行初始化。范围:全局变量影响整个 MySQL 服务器实例,而会话变量只对当前连接有效。
生命周期:全局变量在服务器启动时初始化,持续存在于服务器的整个生命周期,而会话变量在客户端连接期间存在,当连接关闭时消失。
作用对象:全局变量影响所有连接和操作,而会话变量只影响当前连接。
设置方式:全局变量可以在配置文件或启动命令中设置,会话变量可以通过 SET 语句在连接时动态设置。
设置全局系统变量最大连接数为1000:
mysql> SET GLOBAL max_connections = 1000;
mysql> SET @@GLOBAL.max_connections = 1000;
将全局系统变量持久化到 mysqld-auto.cnf 文件(同时设置运行时值):
mysql> SET PERSIST max_connections = 1000;
mysql> SET @@PERSIST.max_connections = 1000;
将全局系统变量持久化到 mysqld-auto.cnf 文件(不设置运行时值):
mysql> SET PERSIST_ONLY max_connections = 1000;
mysql> SET @@PERSIST_ONLY.max_connections = 1000;
删除持久化的系统变量可以使用语句:RESET PERSIST IF EXISTS system_var_name;
设置 Session 系统变量,时区为 "+8:00":mysql> SET SESSION time_zone='+8:00';
mysql> SET @@SESSION.time_zone='+8:00';
mysql> SET @@time_zone='+8:00';
选项形式:
root@guangchen-vm:~# mysqld --max_allowed_packet=16M # 允许
root@guangchen-vm:~# mysqld --max_allowed_packet=16*1024*1024 # 不允许
运行时 SET 形式:
mysql> SET GLOBAL max_allowed_packet=16M; # 不允许
mysql> SET GLOBAL max_allowed_packet=16*1024*1024; # 允许
如果要删除的 SESSION 变量与 GLOBAL 变量名相同,那么具有修改全局变量权限的客户端可能会意外地更改 GLOBAL 变量,而不仅仅是只修改 SESSION 变量。
如果已经有一个 SESSION 变量而且与 GLOBAL 变量同名,那么本意是要修改 GLOBAL 变量,可能只是修改了 SESSION 变量的值。
所以没有明确指定 GLOBAL 和 SESSION 时,对于当前客户端来说 SESSION 的优先级更高。
MySQL 中的状态变量是用来跟踪服务器状态和性能指标的变量。它们提供了有关 MySQL 服务器运行时状态的信息,可以帮助管理员进行监视、调优和故障排除。状态变量包括了各种性能指标、缓存使用情况、连接和查询统计等信息。
官方文档:MySQL :: MySQL 8.0 Reference Manual :: 7.1.10 Server Status Variables
SHOW [GLOBAL | SESSION] STATUS [like status_name];
与查看系统变量基本一致。
- # MySQL 服务节点
- [mysqld]
-
- # MySQL 服务启动后监听的端口号
- port=3306
-
- # 数据目录的路径,这里演示的是windows下的配置,注意分隔符用/,如果是\则需要转义为\\.
- # 把原data目录整体复制到新路径
- # datadir=写具体的实现目录
-
- # MySQL 服务器的字符集与排序规则
- character_set_server=utf8mb4
- collation_server=utf8mb4_general_ci
-
- # 新建表时使用的存储引擎,windows下已默认配置
- default_storage_engine=INNODB
-
- # 时区
- default-time-zone='+8:00'
-
- # ################# 日志相关 #################
- #日志文件
- log_output=FILE,TABLE
- #开启一般查询日志
- general_log=1
- #指定自定义的文件名
- general_log_file=/var/log/mysql/general.log
-
- #开启慢查询日志
- slow_query_log=1
- #指定自定义的文件名
- slow_query_log_file=/var/log/mysql/slow_query.log
-
- #错误日志的路径
- log-error=/var/log/mysql/error.log

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。