MySQL 日志管理

MySQL所支持的日志文件

       每个用户都知道 , 日志文件用来记录其每天的行为 . MySQL软件所支持的日志文件 , 也用来记录该软件运行的各种信息 .例如 , 当用户root登录到MySQL服务器 , 就hi在日志文件里记录该用户的登录时间 , 操作记录等.当MySQL服务器运行时出错 , 出错因袭就会被记录到日志文件里.
       日志操作是数据库维护中最重要的手段之一 , 由于日志文件会记录MySQL服务器的各种信息 , 所以当MySQL服务器遭到以外的损害时 , 不仅可以通过日志文件来查看出错的原因 , 而且还可以通过日志文件进行数据恢复 .
       在MySQL中 , 除二进制文件外 , 其他的日志文件都是文本文件 .默认情况下 , MySQL软件只会启动错误日记文件 , 而其他文件则需要手动启动才可以被启动.

如下是各类文件的作用:

  • 二进制日志 :该日志文件会以二进制形式记录数据库的各种操作 , 但是却不记录查询语句.
  • 错误日志 : 该日志文件会记录MySQL服务器启动 , 关闭和运行时出错等信息.
  • 通用查询日志 : 该日志记录MySQL服务器的启动和关闭信息 , 客户端的连接信息 , 更新数据记录SQL语句和查询数据记录SQL语句.
  • 慢查询日志 : 记录执行时间超过指定时间的各种操作 , 通过工具分析慢查询日志可以定位MySQL服务器性能瓶颈所在.
    查看帮助文档可以发现 , 使用日志有优点也有缺点 . 启动日志后 , 虽然可以实现对MySQL服务器进行维护 , 但是会降低MySQL软件的执行速度 . 因此是否启动日志 , 启动什么类型日志要根据具体应用来决定.

二进制日志

       二进制文件(BinLog)是MySQL软件非常重要的日志之一 , 其详细记录了数据库的变化情况 , 即SQL语句中的DDL和DML语句 , 但是不包含数据记录查询操作 . 通过二进制日志文件 , 可以详细了解MySQL数据库中进行了哪些操作.

启动二进制日志

提问:为什么要启动二进制日志?
       如果MySQL数据库意外停止 , 可以通过二进制日志文件来查看用户执行了哪些操作 , 对数据库服务器文件做了哪些修改 , 然后根据二进制日志文件中记录来恢复数据库服务器.
       在默认情况下 ,二进制日志是关闭的 , 如果想启动二进制日志 , 可以通过设置MySQL服务器的配置文件my.ini来实现 , 具体如下:

[mysql]
log-bin[=dir\[filename]]

       在上述语句中,参数dir用来指定二进制文件的存储路径; 参数flename用来指定二进制文件的文件名,具体格式为filename number,其中number的格式为000001,000002 , 000003 等。
        在具体启动二进制日志时,如果没有设置参数 dir 和 flename,二进制日志文件将使用默认名字主机名-bin.number,保存到默认目录------数据库数据文件里。

注意:每次重启MySQL服务器都会生成一个新的二进制日志文件,这些日志文件的文件名里,filename部分不会改变,但是number的值会不断递增。

       在MySQL软件中,与二进制日志相关的文件除了保存内容的filename number文件外,还有一个关于二进制日志文件列表的文件filename index.
例如:修改MySQL的配置文件my.ini , 启动二进制文件
1)打开文件my.ini配置文件 , 在[mysqld]组里添加:

[mysqld]
log-bin

这是一个隐藏文件 , 需要打开显示隐藏文件
在这里插入图片描述
在这里插入图片描述

一直往下拉 , 你就会看到"#log-bin" , 把"#"去掉 , 然后保存 , 重新启动服务器

在这里插入图片描述

重启之后的效果图:(重启是重启服务 , 不是重启客户端)
在这里插入图片描述

       根据执行结果发现 , 如果没有为二进制日志配置文件目录和文件名 , 将在默认路径中(win10将文件夹隐藏了)创建文件.

在linux上需要到/etc/mysql/mysql.conf.d 中 , 在mysql.cnf中修改
2) 在启动二进制日志时,二进制日志文件最好不要与数据库的数据文件放在同一磁盘上.这样当存放数据的磁盘遭受到破坏后,即可通过二进制日志文件进行恢复.打开文件my.ini配置文件,在[mysqld]组里添加相应语句,具体内容如下:

[mysql]
log-bin=D://A/a

如图:
在这里插入图片描述

重新启动MySQL , 就会发现 在指定的路径上保存了二进制日志
在这里插入图片描述

查看二进制日志

       如果要查看二进制日志 , 需要通过执行命令mysqlbinlog来实现 , 如果直接打开该文件 , 将会显示乱码
在这里插入图片描述

具体语法 (在linu中)
查看是否开启二进制日志

show variables like 'log_bin'

在这里插入图片描述

如果binlog没有开启,可以通过set sql_log_bin=1命令来启用;如果想停用binlog,可以使用set sql_log_bin=0。

mysqlbinlog命令 将在当前文件夹下査找指定的二进制日志。因此需要在二进制日志 filename.number所在的目录下运行该命令,否则将会找不到指定的二进制日志文件。
所以进入保存二进制日志的目录(这里需要管理员权限): /var/lib/mysql , 查看已经保存的二进制日志
在这里插入图片描述然后使用mysqlbinlog , 查看二进制日志的内容

mysqlbinlog filename.number

在这里插入图片描述下面还有很多 , 这里就省略了.

在MySQL端中:

可以查看自己二进制日志的名称

show binary logs;

在这里插入图片描述

可以查看已生成的二进制日志

show binlog events;

在这里插入图片描述
查看指定binlog文件的内容

show binlog events in 'binlog.000001'

在这里插入图片描述

停止二进制日志

       在MySQL服务器的配置文件my.ini里,如果在[mysqld]组添加了log-bin 内容,MySQL服务器将会一直开启二进制日志功能。即用户对MySQL服务器的各种操作将记录到二进制日志里。如果想停止二进制日志功能,只需删除[mysqld]组里的log-bin内容即可

       在具体操作MySQL服务器时,有时某些操作是不需要记录到二进制日志文件里,这时如果先删除文件my.ini 中[mysqld]组里log-bin 内容,那么执行完这些操作后,还需要重新在[mysqld]组添加log-bin内容。
为了解决上述问题 , MySQL专门提供了一个命令SET , 实现暂停二进制日志 , 具体内容:

SET SQL_LOG_BIN=0

SET SQL_LOG_BIN=0

       在上述命令中 , 当设置SET SQL_LOG_BIN的值为0时 , 表示赞停二进制日志功能 , 当设置SET SQL_LOG_BIN的值为1时 , 表示重新开启二进制日志功能.
注:只有拥有SUPER权限的用户 , 才可以执行SET语句.

删除二进制日志

       如果需要删除进制日志,需要通过执行命令RESET MASTER、PURGE MASTER LOGS TO和PURGE MASTER LOGS BEFORE来实现,具体语法形式分别如下:

reset master;//删除master的二进制日志

purge master logs before 'yyyy-mm-dd hh:MM:ss';  //删除指定日期以前的日志索引中二进制日志文件

purge master logs to 'filename.number';   //删除编号小于number的所有二进制日志文件

如果是在windows端上, 直接删除文件即可.

错误日志

错误日志也是MySQL中非常重要的日志之一,其详细记录了MySQL服务器的开启、关闭和错误信息 .

启动错误日志

       在MySQL数据库服务器里,错误日志默认是开启的同时该种类型的日志也是无法被禁止。错误日志一般存放在MySQL服务器的数据文件夹下(C:\ProgramData\MySQL\MySQL Server 5.7\Data), 错误日志文件通常的名称格式为hostname.err (cjgong.er),其中参数hostname表示MySQL服务器的主机名

在这里插入图片描述

如果想修改错误日志的存放目录 ,可以通过my.ini来实现(和二进制日志基本相同)

[mysqld]
error-bin[=dir\[filename]]

       参数dir用来指定错误日志的存储路径; 参数flename用来指定错误日志的文件名 .如果没有在文件my.ini里设置错误日志的相关信息 , 错误日志文件将使用默认名字 主机名.error , 保存到默认目录-----数据库文件里.

查看错误日志

       错误日志是以文本文件的形式存储内容 , 所以可以直接使用普通文本工具来查看该类型日志的内容.
如图所示:
在这里插入图片描述

删除错误日志

如果需要删除错误日志 , 需要执行命令来实现 , 具体语法形式如下 :

mysqladmin -u root -p flush-logs

       执行上述命令 , MySQL服务器首先会穿件一个新的错误日志 , 然后将旧的错误日志更名为filename.err-old.如果数据库管理员认为filename.err-old文件没有任何用处 , 即没有任何存在的理由 , 可以直接删除.

通用查询日志

       通用查询日志主要用来记录用户关于MySQL服务器的所有操作,包含MySQL服务器的启动和关闭信息、客户端的连接信息、更新数据,记录SQL语句和查询数据记录SQL语句。由于该日志记录了客户端连接MySQL的所有请求,如当前实例访问量较大,此日志会急剧增加,会抢占系统IO导致影响MySQL的性能,一般建议关闭此日志,需要时可以通过设置环境变量打开。

启动通用查询日志

       在默认情况下,通用查询日志是关闭的,如果想启动通用查询日志,可以通过设置MySQL服务器的配置文件my.ini来实现,具体内容如下:

[mysqld]
log [=dir\[filename]]

       在上述语句中,参数dir用来指定通用查询日志文件的存储路径;参数filename用来指定通用查询日志的文件名,具体格式为filename.log. 在具体启动通用查询日志时,如果没有设置参数dir和filename,日志文件将使用默认名字 主机名.log , 保存到默认目录一数据库数据文件里 .
       以上方法是通过配置文件指定开启了通用查询日志,此时需要重启MySQL服务器才可使设置生效,除此之外,还有一种方法通过设置MySQL的环境变量进行动态的控制通用查询日志的开启与关闭。通过设置环境变量generallog进行通用查询日志的动态控制,而不需要重启MySQL服务器,操作示例如下:

 set global general_log = on; //on为开启状态 (off为关闭状态)

 show variables like '%general_log%'\G    //查看相关环境变量

在这里插入图片描述

       参数general_log 用于动态的控制通用查询日志的开启与关闭on表示开启通用查询日志,general_log_file 变量指定了通用查询日志文件所处的位置 .

查看通用查询日志

       由于通用查询日志是以文本文件的形式存储内容,所以可以直接使用普通文本工具来查看该类型日志内容 .
在这里插入图片描述

停止通用查询日志

       通用查询日志启动后,可以通过两种方法停止该日志,一种是通过设置MysQL服务器的配置文件my.ini来实现,具体内容如下:

[mysqld]
#log [=dir\[filename]]

       在上述语句中,通过将相关配置注释掉,然后重启MsOL服务器 , 则可以停止通用查询日志.
       上述方法需要重启MySQL服务器,这在某些场景比如有业务量访通过设置MySQL可的情况下是不允许的,这时可以通过另一种方法来动态地控制通用查询日志的开启与关闭 .通过设置mySQL 的环境变量general_log 为关闭状态可以停止该日志,操作示例如下:

 set global general_log = off;

 show variables like '%general_log%'\G    //查看相关环境变量

在这里插入图片描述

       参数general_log 置为 off 用于动态的控制通用查询日志为关闭状态,general_log_file 变量指定了通用查询日志文件所处的位置 .

删除通用查询日志

如果需要删除通用查询日志 ,需要通过执行命令来实现 , 具体语法形式如下:

 mysqladmin -u root -p flush-logs

       执行上述命令 ,如果为删除查询日志 , MySOL服务器会创建一个新的查询日志,覆盖旧的查询日志 . 如果需要备份旧的日志文件,则必须先将旧的日志文件复制出来或者改名,然后再次执行命令 .
注意 : 在具体删除查询日志时,一旦执行mysqladmin命令,就会先删除旧的通用查询日志文件,然后再创建一个新的查询日志 .

慢查询日志

       慢查询主要用来记录执行时间超过指定时间的查向语句。通过查看该类型日志文件,可以查找到哪些查询语句的执行效率低,以便找出MySQL服务器的性能瓶颈从而进行优化。

启动慢查询日志

       在默认情况下,慢查询日志是关闭的,如果想启动慢查询日志,可以通过设置MySQL服务器的配置文件my.ini来实现,具体内容如下:

[mysqld]
log-slow-queries [=dir\[filename]]
long_queery_time=n

       在上述语句中,参数dir用来指定慢查询日志文件的存储路径 ; 参数flename 用来指定慢查询日志的文件名,具体格式为 filename-slow.log . 在具体启动慢查询日志时,如果没有设置参数 dir 和filename ,慢查询日志文件将使用默认名字 主机名-slow.log ,保存到默认目录一数据库 数据文件里。参数n用来设置时间,该值的单位为秒 . 如果没有设置long query_ time 选项,默认时间为10秒 .
       通过上述方法开启了MySQL服务器的慢查询日志,此时需要重启MySQL服务器以便使设置生效。这在某些场景比如有业务量访问的情况下是不允许的,这时可以通过另外种方法动态的控制慢查询日志的开启与停止。通过设置MySQL的环境变量slow_query_log 为开启状态,操作示例如下:

 set global slow_query_log=on; 
 //设置环境变量slow_query_log 进行慢查询日志的动态控制 , on表示开启状态(off为关闭状态)
 set global long_query_time=3;
 //设置慢查询日志最大允许时间 , 单位为秒

在这里插入图片描述
       注意:在通过环境变量开启慢查询日志时,slow_query_ log 针对当前登录的连接实时生效,而long_query_time 针对当前连接并不生效,是针对新增的连接有效,如需启用修改后的变量值,需要重新连接MySQL .

查看慢查询日志

       由于慢查询日志是以文本文件的形式存储内容,所以可以直接使用普通文本工具来查看该类型日志内容 .
在这里插入图片描述
在这里插入图片描述

分析慢查询的日志

       如果想了解执行时间超过指定时间的查询语句,以便定位MySQL服务器的性能瓶颈,可以分析慢查询日志 . MySQL提供了对应的工具用于分析MySQL慢查询日志的内容,比如,查看慢查询次数最多的语句或者慢查询时间最长的语句 , 对应的工具为mysqldumpslow.pl , 常用参数如下:

-s” 为分析慢查询日志时指定排序参数 , 可选的有:“al” 表示平均锁定时间,“ar” 表示平均返回记录数,"at “表示平均查询时间。

“-t“参数表示只显示指定的行数。

在这里插入图片描述

       注意 : 在分析慢查询日志时 , mysqldumpslow.pl 为perl语言编写的脚本 , 执行该脚本需要对应的perl语言环境 .

停止慢查询日志

如需停止慢查询日志,可以通过设置MySQL服务器的配置文件my.ini来实现,具体内容如下:

[mysqld]
#log-slow-queries [=dir\[filename]]
#long_queery_time=n

       通过将对应配置注释掉可以将MySQL慢查询停止.此时需要重启MySQL服务器,这在某些场景比如有业务量访问的情况下是不允许的 , 这时可以通过另外种方法动态的控制慢查询日志的开启与停止 . 通过设置MySOL的环境变量slow_query_log为会关闭状态可以停止该日志 , 操作实例如下 :

 set global slow_query_log=off; 
 //设置环境变量slow_query_log 进行慢查询日志的动态控制 , off表示开启状态

在这里插入图片描述

删除慢查询日志

       如果需要删除慢查询日志,可以通过Windows的直接将慢查询日志文件删除,然后使用以下命令重新创建对应文件。具体语法形式分别如下:

mysqladmin -u root -p flush-logs

       注意 : 执行上述命令,MySQL 服务器会创建一个新的慢查询日志, 此时慢查询日志内容为空。如果需要备份旧的日志文件,则必须先将旧的日志文件复制出来或者改名,然后再次执行命令mysqladmin。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值