MySQL服务配置与管理

这里说的MySQL服务就是mysqld,MySQL服务器.

MySQL有很多选项和系统变量可以在配置文件配置,服务启动的时候会读取这个配置文件.这篇文章就主要将配置文件.

服务器配置和默认值

可以通过这个命令来查看mysqld所有的选项和系统变量

mysqld --verbose --help

内容太多这里就不截图了.

查看服务器在运行时系统变量的值,连接到MySQL并执行以下语句:

show variables;

如果觉得打印的不好看,可以使用 :show variables/G

内容也太多了,也不截图了.

当然如果觉得内容太多,可以用like进行过滤.

show variables like '%tmp%';

查看服务器在运行时的一些统计和状态指示器,连接到MySQL并执行以下语句:

show status;

这个也可以用like

系统变量和状态变量也可以用mysqladmin来查看

mysqladmin variables;

mysqladmin extended-status

这里就不截图了.

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

https://dev.mysql.com/doc/refman/8.0/en/server-option-variable-reference.html

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

系统变量和选项

为了保证每次启动的时候参数都是一样的,所以最好使用配置文件.

mysqld从选项文件(配置文件)里的[mysqld]节点读取内容.

还有就是部分系统变量可以通过set动态设置.

还有一点就是选项是没办法在运行时修改的.这也就能区分选项和系统变量,选项是在启动或者连接时设置,而系统变量可以通过set动态设置.
选项是 "配置指令",系统变量是 "运行参数";指令的作用是初始化参数,参数的作用是控制运行

还有就是有的选项和系统变量在配置文件中的写法是一样的,可以说是一种映射关系.就拿最大连接数来说,选项的值会赋值给系统变量.

上面我给了一个网站,就可以通过这个网站查看,打开后就是这样的:

这个是说明就可通过这个来查.

使用系统变量

上面说了,系统变量大部分是动态的,可以通过set进行设置(在客户端设置),举个例子:

set Global max_connection = 1000;

set Global @@.max.connection=1000;

注:这两者是等价的,但是推荐第一种写法

将全局系统变量持久化到 mysqld-auto.cnf 文件(同时设置运行时值):

mysql> SET PERSIST max_connections = 1000;

mysql> SET @@PERSIST.max_connections = 1000;

这个文件在数据目录里,数据目录的路径为:/var/lib/mysql,在这个里面可以查看.

如果执行了上面的命令,就会有这样的内容.

删除持久化的系统变量可以使用语句:

RESET PERSIST IF EXISTS system_var_name;

这样就删除了.

有一点要注意的是,要注意作用域,Global是全局生效的,Session是仅仅针对于当前会话.

选项和系统变量就说到这里,使用请参考官方文档.

MySQL数据目录

这个是重点,数据库中的数据都在这里面,包括日志,服务器进程ID文件,持久化全局系统变量的文件也在这里面,目录是:/var/lib/mysql.

日志简介:

日志类型有:一般查询日志,慢查询日志,错误日志,中继日志,二进制日志等,这里主要介绍这几种日志.

1.一般情况下,windows下默认开启错误日志,其他日志不开启,linux下默认开启错误日志和二进制日志.

2.在服务器运行期间可以控制一般查询和慢查询日志的禁用与开启,也可以更改日志文件名

3.一般查询日志和慢查询日志记录可以写入日志表、日志文件或两者同时写入

4.默认情况下,所有启用的日志将写入数据目录,可以通过刷新日志强制服务器关闭并重新打开日志文件

5.通过FLUSH LOGS 语句刷新日志来强制服务器关闭并重新打开日志文件,也可以使mysqladmin 的 flush-logs 或 refresh 参数,或mysqldump 的 --flush-logs 或 --master-data 选项

6.中继日志仅用于主从复制过程中的从服务器。

日志日志可以输出在文件中,或者表中,也可以两者都写入,开启这些日志必然会降低服务器的性能.

可以通过下面两个配置来开启慢日志查询和文件输出位置:

一般查询也可以配置,我上面的截图是通过官网截的图,一般日志的开启也可以在这上面查看到,上面我也给出了网站.

就是日志文件默认的输出位置为MySQL的数据目录,这里可以指定一个创建的目录,方便查询日志

还有就是日志的输出方式,上面说了可以是表,文件,两者,这里可以在服务器运行的时候通过set手动修改 命令是:

set Global log_output file

在MySQL中0表示关闭,1表示开启,用这个控制日志的开启.

既然可以写入文件中,为什么还要写到表中呢?

当然写入表自然有它的优点:

1.可以通过 SQL 语句的条件查询过滤日志内容,从而选择满足特定条件的日志记录。比如,某个客户端的日志;

2.可以通过客户端程序连接到服务器并查询表中的日志信息,无需登录服务器主机访问文件系统。

日志记录具有标准格式,可看日志表的结构,可以使用以下语句:

SHOW CREATE TABLE mysql.general_log; # 一般查询日志

SHOW CREATE TABLE mysql.slow_log; # 慢查询日志

一般查询日志

一般查询日志开启后记录连接和断开信息,和每个从客户端接收到的sql信息.我来开启一般查询日志,看一下数据目录.

这样就开启了,当然也可以使用set开启.但是有一点要注意的是,如果是配置文件的方式要重启服务器.set不需要.

我执行了select * 操作 就有了这个文件,在数据目录下

这样就一般查询日志的开启

再来看一下文件内容

这些都是你的操作行为,第一个是时间,第二个是服务器id,第三个是操作类型,第四个是具体的语句.

慢查询日志

首先说一下,在开启慢日志情况下会向慢日志中写内容?

首先就是达到一定的时间,就是sql语句执行的时间,默认是达到10秒,才会写入日志中,还有就是管理操作和有索引的查询就算超过10秒也不会写入慢日志.

当然要是想记录管理语句,可以启动这个配置环境变量:log_slow_admin_statements 就可以记录了.

记录带索引的语句可以开启log_queries_not_using_indexes 这个环境变量.当然开启带索引的会产生大量的日志,影响服务器性能,可以开启这个系统变量: log_throttle_queries_not_using_indexes来限制每分钟写入的数量.

开启慢日志查询

也是在配置文件中配置系统变量,有三种和一般查询日志一样共用一个系统变量.

这样就开启了慢查询日志.因为慢日志查询我模拟不了,所以这里就不演示文件内容了.

同样也可以修改日志文件的位置,默认位置就是数据目录.

错误日志

首先这里说明一下,这个日志不在数据目录下

错误日志是默认开启的,不用自己手动开启,日志文件位置也可以修改,默认位置就是下面这个图片

可以打开这个文件,看看里面的内容,大部分都能看懂.能看懂就可以了.

二进制日志

二进制日志包含数据库更改的"事件",不会记录SELECT 和SHOW

主要作用就是主从复制和数据恢复.

这些就是二进制文件.

默认情况下二进制是开启的.禁用二进制日志,可以指定 --skip-log-bin 或 --disable-log-bin 选项

二进制日志文件名是由基本名+数字扩展名组成的,服务器每次创建一个新的日志文件时,数字扩

展名都会增加,从而保证有序的文件系列,发生以下事件时,服务器都会在创建一个新的日志文件:

1.服务器已启动或重新启动

2.服务器刷新日志

3.当前日志文件的大小达到 max_binlog_size (单个日志文件的最大字节数,最小值 4096 字

节,最大值和默认值 1GB).

4.二进制日志文件大小可能会超出 max_binlog_size 设定的值,因为二进制日志在记录事务

时,会完整的记录整个事务,不存在把一个事务拆分的情况,如果遇到一个大事务时,即使记录

整个事务会超过日志大小限制,也会保证事务的完整性

5.mysqld还会创建一个包含二进制日志文件名的日志索引文件,默认情况下,这与二进制日志文件

具有相同的基本名称,扩展名为 .index . 可以使用选项--log-bin-index[=file_name ]修改索引文件名;

6.二进制日志文件和索引文件的默认位置是数据目录。可以使用 --log-bin[=file_name ] 选项

指定自定义路径, file_name 格式 = 绝对路径+基本名。--log-bin 对应的系统变量log_bin_basename ;

7.MySQL 5.7 中,启用二进制日志必须指定服务器 ID,对应server_id 选项,否则服务器将无法

启动。在 MySQL 8.0 中, server_id 系统变量默认设置为 1,在集群环境中,每台MySQL服务

器必须有唯一的server_id ;

8.二进制日志记录事件支持三种格式类型:基于行的日志记录、基于语句的日志记录和混合日志记

录,稍候具体介绍;

9.二进制日志记录在语句或事务完成之后,释放锁或在提交完成之前进行。这样做是为了确保按照提交顺序记录日志;

10.在一个未提交的事务中,对支持事务的表(如InnoDB表)的更改都会被缓存(UPDATE, DELETE或INSERT),直到服务器收到COMMIT 语句,mysqld在执行 COMMIT 之前将整个事务写入二进制日志;

11.如果事务回滚,则在整个事务中记录一个ROLLBACK 语句,但是对非事务性表(如MyISAM表)的修改不能回滚,所以这些修改将被复制到从节点;

12.对非事务表的更新在执行后立即存储在二进制日志中;

13.当处理事务的线程启动时,它会分配一个大小为binlog_cache_size 的缓冲区来缓存语句。如

果语句大小大缓冲区的值,线程则打开一个临时文件来存储事务,临时文件在线程结束时删除;

14.Binlog_cache_use 状态变量显示使用该缓冲区(可能还有临时文件)存储事务的数量;

Binlog_cache_disk_use 状态变量显示有多少事务实际上使用了临时文件。结合这两个变量

可以把binlog_cache_size 调优到一个足够大的值,从而避免使用临时文件;

写这么多应该就够了.

默认二进制日志的过期时间为30天,过期后将自动删除,要指定自定义过期时间,可以使用系统变

量binlog_expire_logs_seconds=N 单位为秒,在下一次启动服务器和刷新日志时删除过期

日志文件;

相关推荐
+VX:Fegn08955 小时前
计算机毕业设计|基于springboot + vue旅游信息推荐系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计·旅游
百锦再5 小时前
国产数据库的平替亮点——关系型数据库架构适配
android·java·前端·数据库·sql·算法·数据库架构
wusp19945 小时前
基于vite + nodejs + MongoDB + vue2 的博客发布系统
数据库·mongodb
全栈小55 小时前
【数据库】浙人医携手金仓数据库,打造全国首个多院区异构多活容灾架构
数据库·1024程序员节·金仓
studytosky6 小时前
Linux 基础开发工具(3):Git 控制与 GDB 调试实用指南
linux·运维·服务器·网络·数据库·git
凌睿马6 小时前
关于复杂数据结构从MySQL迁移到PostgreSQL的可行性
数据结构·数据库·mysql
是一个Bug6 小时前
声明式事务:深度解析与实战指南
数据库·oracle
星光一影6 小时前
美容/心理咨询/问诊/法律咨询/牙医预约/线上线下预约/牙医行业通用医疗预约咨询小程序
mysql·小程序·vue·php·uniapp
laocooon5238578866 小时前
C#二次开发中简单块的定义与应用
android·数据库·c#