MySQL学习Day30—其他数据库日志

一、MySQL支持的日志

1.日志类型:

(1)慢查询日志:记录所有执行时间超过long_query_time的所有查询,方便对查询进行优化;

(2)通用查询日志:记录所有连接的起始时间和终止时间,以及连接发送给数据库服务器的所有指令,对复原操作的实际场景、发现问题,甚至是对数据库操作的审计都有很大的帮助;

(3)错误日志:记录MySQL服务的启动、运行或停止MySQL服务时出现的问题,方便了解服务器的状态,从而对服务器进行维护。

(4)二进制日志:记录所有更改数据的语句,可以用于主从服务器之间的数据同步,以及服务器遇到故障时数据的无损失恢复。

(5)中继日志:用于主从服务器架构中从服务器用来存放主服务器二进制日志内容的一个中间文件。从服务器通过读取中继日志的内容,来同步主服务器上的操作。

(6)数据定义语句日志:记录数据定义语句执行的元数据操作。

除二进制日志外,其他日志都是文本文件,默认情况下所有日志创建于MySQL数据目录中;

2.日志的弊端:

日志功能会降低MySQL数据库的性能。例如在查询非常频繁的MySQL数据库系统中如果开启了通用查询日志和慢查询日志,MySQL数据库会花费很多时间记录日志;

日志会占用大量的磁盘空间。对于用户量非常大、操作非常频繁的数据库,日志文件需要的存储空间设置比数据库文件需要的存储空间还要大;

3.通用查询日志(general query log):

通用查询日志用来记录用户的所有操作,包括启动和关闭MySQL服务、所有用户的连接开始时间和截止时间、发给MySQL数据库服务器的所有SQL指令等。当数据发生异常时,查看通用查询日志,还原操作时的具体场景,可以准确定位问题。

查看当前状态:
SHOW VARIABLES LIKE '%general%';
系统变量general_log的值是OFF,即通用査询日志处于关闭状态。在MySQL中general_log的默认值是关闭的。因为一旦开启记录通用査询日志MySQL会记录所有的连接起止和相关的SQL操作,这样会消耗系统资源并且占用磁盘空间。可以通过手动修改变量的值在需要的时候开启日志。
启动日志:
SET GLOBAL general_log = ON;
查看日志:
通用查询日志是以文本文件的形式存储在文件系统中的,可以使用文本编辑器直接打开日志文件。每台MySQL服务器的通用查询日志内容是不同的;
停止日志:
SET GLOBAL general_log = OFF;
删除/刷新日志:
正常删除文件

4.错误日志(error log):

错误日志记录了MySQL服务器启动、停止运行的时间,以及系统启动、运行和停止过程中的诊断信息,包括错误、 警告和提示等。通过错误日志可以查看系统的运行状态,便于即时发现故障、修复故障。如果MySQL服务出现异常 ,错误日志是发现问题、解决故障的首选。

启动日志:
在MySQL数据库中错误日志功能是默认开启的,而且错误日志无法被禁止,默认情况下错误日志存储在MySQL的数据文件夹下,名称默认为mysqld.log,可以指定错误日志的文件名;
查看日志:
SHOW VARIABLES LIKE 'log_err%';
删除/刷新日志:
和通用查询日志类似,同样可以通过删除日志文件删除错误日志

5.二进制日志(bin log):

binlog即binary log,二进制日志文件,也叫作变更日志(update log)。它记录了数据库所有执行的 DDL和DML等数据库更新事件的语句,但是不包含没有修改任何数据的语句(如数据查询语句select、show等);它以事件形式记录并保存在二进制文件中。通过这些信息可以再现数据更新操作的全过程。

bin log主要应用场景:

一是用于数据恢复,如果MySQL数据库意外停止可以通过二进制日志文件来查看用户执行了哪些操作,对数据库服务器文件做了哪些修改,然后根据二进制日志文件中的记录来恢复数据库服务器

二是用于数据复制,由于日志的延续性和时效性,master把它的二进制日志传递给slaves来达到master-slave数据一致的目的;

binlog格式设置:

(1)STATEMENT:每一条会修改数据的sql语句都会记录到binlog中,这是默认的binlog格式;

(2)ROW:不记录每条sql语句的上下文信息,仅记录哪条记录被修改了以及被修改成为什么样

(3)MIXED:实际上就是statement和row的结合,一般的语句修改使用statement格式保存binlog,statement无法完成主从复制的操作时会采用ROW格式保存binlog.MySQL会根据执行的每条具体的sql语句来区分对待记录的日志形式;

1、查看默认情况:
查看记录二进制日志是否开启,在默认情况下二进制文件是开启的;
SHOW VARIABLES LIKE '%log_bin%';
2.日志参数设置:
log-bin = mysql-bin#打开日志(主机需要打开),mysql-bin可以自定义也可以加上路径;
binlog_expire_logs_seconds:此参数控制二进制日志文件保留的时长,单位是秒
max_binlog_size:控制单个二进制日志大小,当前日志文件大小超过此变量时执行切换动作;
3.查看日志:
当MySQL创建二进制日志文件时,先创建一个以'filename'为名称、以'.index'为后缀的文件,再创建一个以“filename"为名称、以'.000001'为后缀的文件。
MySQL服务重新启动一次,以'.000001'为后缀的文件就会增加一个,并且后缀名按1递增。即日志文件的个数与MySQL服务启动的次数相同;如果日志长度超过了max_binlog_size的上限(默认是1GB),就会创建一个新的日志文件。
查看当前的二进制日志文件列表及大小:SHOW BINARY LOGS;
所有对数据库的修改都会记录在binlog中,但binlog是二进制文件无法直接查看,可以借助 mysqlbinlog命令工具:
mysqlbinlog -v 二进制日志文件名称;
4.删除二进制日志:
PURGE {MASTER|BINARY} LOGS TO '指定日志文件名';
PURGE {MASTER|BINARY} LOGS BEFORE '指定日期';
RESET MASTER;删除所有的二进制日志

二进制日志可以通过数据库的全量备份和二进制日志中保存的增量信息完成数据库的无损失恢复。但是,如果遇到数据量大、数据库和数据表很多(比如分库分表的应用)的场景,用二进制日志进行数据恢复是很有挑战性的,因为起止位置不容易管理。在这种情况下,一个有效的解决办法是配置主从数据库服务器,甚至是一主多从的架构,把二进制日志文件的内容通过中继日志同步到从数据库服务器中,这样就可以有效避免数据库故障导致的数据异常等问题。

6.中继日志(relay log):

中继日志只在主从服务器架构的从服务器上存在。从服务器为了与主服务器保持一致,要从主服务器读取二进制日志的内容,并且把读取到的信息写入本地的日志文件中,这个从服务器本地的日志文件就叫中继日志。然后从服务器读取中继日志,并根据中继日志的内容对从服务器的数据进行更新,完成主从服务器的数据同步。搭建好主从服务器之后,中继日志默认会保存在从服务器的数据目录下;文件名的格式是从服务器名-relay-bin.序号。中继日志还有一个索引文件从服务器名-relay-bin.index,用来定位当前正在使用的中继日志。

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值