Bootstrap

MySQL 服务器配置与管理<一>

目录

MySQL 服务器

服务器配置和默认值

系统变量和选项 

​编辑 使⽤系统变量

⽰例:服务器常⽤配置 

查看状态变量 

MySQL数据⽬录 

MySQL 服务器

通常所说的 MySQL 服务器指的是mysqld(d指的是daemon 守护进程)程序,当运⾏mysqld后对外提供MySQL服务
以下就是关于MySQL 服务器以及相关配置的内容,包括:
1.服务器⽀持的启动选项。可以在命令⾏和配置⽂件中指定这些选项 [mysqld]
2.服务器系统变量。反映了启动选项的当前状态和值,其中⼀些系统变量可以在服务器运⾏时修改
3.服务器状态变量。这些变量包含了有关运⾏时操作的计数器和统计信息(状态变量不能被修改,它只代表当前的状态,是一个指示器)如连接服务器的客户端数量等是不能被修改的
4.服务器如何管理客⼾端连接
5.配置和使⽤时区⽀持
6.服务器端帮助功能

服务器配置和默认值

mysqld 有很多选项和系统变量可以在启动时进⾏配置

1.查看所有mysqld 选项和可配置的系统变量列表及默认值的命令:mysqld --verbose --help

2.查看服务器在运⾏时系统变量的值,在MySQL客户端中执⾏命令: SHOW VARIABLES;

3.查看服务器在运⾏时的⼀些统计和状态指⽰器,在MySQL客户端中执⾏:SHOW STATUS;

4.系统变量和状态信息也可以使⽤ mysqladmin命令来查看:mysqladmin variables                                mysqladmin extended-statu

5.查看具体的一个变量可以使用like和通配符

 

关于服务器的选项、系统变量、状态变量参考以下官⽹列表

选项,系统变量,状态变量汇总 

系统变量 

状态变量 

对于当前我们重点了解的为这样的变量

 

关于作用域的介绍

系统变量、状态变量的作⽤域分为: Global (全局), Session (当前会话或连接), 或 两者都⽀持

系统变量和选项 

基础知识:
1.当通过mysqld启动数据库服务器时,可以通过选项⽂件或命令⾏中提供选项,但是,在⼤多数情
况下,为确保服务器每次运⾏时都使⽤相同的选项,最好的⽅法是在选项⽂件中指定相应的选项
2. mysqld从选项⽂件中的 [mysqld] (后) [server] (先) 组(节点)中读取选项内容
3.mysqld接受的选项可以通过 mysqld --verbose --help 查看,列表中的有些项⽬是可以在
服务器启动时设置的系统变量,系统变量可以在连接MySQL后使⽤ SHOW VARIABLES 语句查
看,但有些内容只在 --help 中存在,使⽤ SHOW VARIABLES 时并没有显⽰,这是因为它们只
是选项⽽不是系统变量。( mysqld --verbose --help显示选项和系统变量,SHOW VARIABLES只显示系统变量 )
4.对于mysql服务器端只有一个mysqld程序,和两个服务器端的启动脚本(对于其中内容也是去配置文件中去读取)
常⽤选项:

 使⽤系统变量

 1.使用系统变量的必要性:在安装完mysql程序之后,当启动mysqld这个服务端程序时,它是带有默认值的,这些默认值的话对于开发环境的影响并不是很大,但当应用程序部署上线对外提供服务时,大部分的应用程序的负载量较大,产生的数据量也很大,这就需要提高服务器的硬件配置,如加内存,加硬盘等,完成之后,像mysqld这样的服务器程序的默认值是与业务场景贴合的不是很好,这就需要根据业务场景与硬件配置来调整相关的参数,来压榨硬件的性能以达到最高性能,满足业务场景

2.我们介绍了通过选项⽂件和命令⾏设置相应系统变量的值,设置系统变量的语法与命令选项的 语法相同,指定变量名称时,破折号和下划线可以互换使⽤。例如, --general_log=ON - -general-log=ON 是等价的,但我们推荐的还是前面的写法

3.当使⽤选项设置⼀个数值的变量时,可以带有后缀 K M G (⼤⼩写不限)表⽰ 1024
1024^2 1024^3 ;从MySQL 8.0.14 开始,后缀也可以⽤ T P E 来表⽰ 1024^4
1024^5 1024^6
举例:为服务器指定 256 KB 的排序缓冲区⼤⼩和 1 GB 的最⼤数据包⼤⼩
# 在命令⾏的指定
mysqld --sort-buffer-size=256K --max-allowed-packet=1G
# 在选项⽂件中指定
[mysqld]
sort_buffer_size=256k
max_allowed_packet=1g
4.系统变量有两个作⽤域,分别是 Global (全局)和 Session (会话), Global 全局变量影响服
务器的整体操作, Session 会话变量影响各个客⼾端连接的操作。给定的系统变量可以同时具有
全局值和会话值,它们的关系如下:
       ◦ 服务器启动时,会将每个全局变量初始化并设置默认值,具体的值可以通过命令⾏或选项⽂            件更改。
       ◦ 服务器为每个客⼾端维护⼀组 Session 变量,在客⼾端连接时使⽤相应全局变量的当前值进
           ⾏初始化
那么 Global (全局)和 Session (会话)域的初始值是如何确定的
5.⼤部分系统变量是动态的,在服务器运⾏时可以通过 SET 语句动态更改,并且⽆需停⽌和重新启动服务器。在服务器运⾏时,使⽤ SET 语句设置系统变量, 需要指定作⽤域 (也可以在前⾯加上
@@ 修饰符),然后指定系统变量的名称, 名称必须使⽤下划线 ⽽不是破折号
注: 在设置全局变量时需要指定GLOBAL关键字的原因是为了防⽌出现以下问题:
(1)如果要删除的SESSION变量与GLOBAL变量名相同,那么具有修改全局变量权限的客⼾端可能会意外地更改GLOBAL变量,⽽不仅仅是只修改SESSION变量
(2)如果已经有⼀个SESSION变量⽽且与GLOBAL变量同名,那么本意是要修改GLOBAL变量,可能只是修改了SESSION变量的值
所以没有明确指定 GLOBAL SESSION 时,对于当前客⼾端来说 SESSION 的优先级更⾼

示例1:设置全局系统变量最⼤连接数为1000

使用到的命令(两种书写方式)

mysql> SET GLOBAL max_connections = 1000;
mysql> SET @@GLOBAL.max_connections = 1000;

 

示例2:将全局系统变量持久化到 mysqld-auto.cnf ⽂件(同时设置运⾏时值) 

使用到的命令:(两种方式)

# PERSIST 表⽰持久化的同时设置全局变量的值
mysql> SET PERSIST max_connections = 1000;
mysql> SET @@PERSIST.max_connections = 1000;

首先对于这个文件前面在介绍配置文件时就已经出现了

示例3:将全局系统变量持久化到 mysqld-auto.cnf ⽂件(不设置运⾏时值)

# PERSIST_ONLY  表⽰持久化的同时不设置全局变量的值
mysql> SET PERSIST_ONLY max_connections = 1000;
mysql> SET @@PERSIST_ONLY.max_connections = 1000;

 

删除持久化的系统变量可以使⽤: RESET PERSIST IF EXISTS 系统变量名   ;

 

示例4:设置 Session 系统变量,时区为"+8:00":

几种方式:

mysql> SET SESSION time_zone='+8:00';
mysql> SET @@SESSION.time_zone='+8:00';
mysql> SET @@time_zone='+8:00';

6.对于数值型的系统变量,⽤带有后缀的值指定时,只适⽤于选项⽅式,⽽不能⽤在 SET ⽅式中; SET ⽅式可以使⽤表达式为系统变量指定值,⽽在选项⽅式中不允许

7.要显⽰系统变量名称和值,请使⽤以下 SHOW VARIABLES 语句

8.可以使⽤ LIKE ⼦句显⽰与指定内容匹配的变量,也可以使⽤通配符

如:

9.⼀部分系统变量是内置的,也有⼀些需要通过安装服务器插件或组件才可以使⽤
      ⽐如⽤于审计插件 audit_log 实现了名为 audit_log_policy 的系统变量
      错误⽇志过滤组件 log_filter_dragnet 实现了名为 log_error_filter_rules 的系统变量。
10. 可以动态设置的系统变量的文档

⽰例:服务器常⽤配置 

Linux系统下编辑 /etc/mysql/my.cnf
Windows系统下打开C:/ProgramData/MySQL/MySQL Server 8.0/my.ini

注意:

1.编辑前先备份原始⽂件

2.如果要修改数据⽬录选项建议先停⽌MySQL服务,并把原data⽬录整体复制到新路径,配置完成后重启服务

[mysqld] 节点下添加以下内容

用vim打开 /etc/mysql/my.cnf,在末尾空白处添加如下的内容(粘贴操作:shift+insert键)

登录mysql进行验证

注:在Linux中修改datadir时,可能会遇到权限问题,需要用chmon 777 把目标数据目录的权限改为mysql 

查看状态变量 

MySQL服务器维护着当前系统信息的状态变量(不可被修改)
可以使⽤ SHOW [GLOBAL | SESSION] STATUS [like status_name]  (可以使用通配符); 语句查看这些变量和对应的值。
GLOBAL显⽰所有连接的值,SESSION显⽰当前连接的值

 具体的状态变量及表⽰的意义可以参考官⽹⽂档:https://dev.mysql.com/doc/refman/8.0/en/server-status-variables.html

MySQL数据⽬录 

因为数据目录是可以通过选项datadir修改的,不是固定的路径 ,查询的命令为 mysql > show variables like 'datadir'

退出mysql后,进入这个目录查看一些文件

;