1.binlog
binlog记录了数据库表结构和表数据变更,比如update/delete/insert/truncate/create。它不会记录select,因为这个没有对表进行变更。
binlog到底是什么样的?binlog我们可以理解位存储着每条变更的SQL语句。
主要的两个作用:复制和恢复数据
MySQL在公司使用的时候往往都是一主多从结构的,从服务器需要与主服务器的数据保持一致,这就是通过binlog来是实现的。
数据库的数据被不小心刪掉了,我们可以通过binlog来对数据进行恢复。
因为binlog记录了数据库表的变更,所以我们可以用binlog进行复制和恢复数据
2.redo log
redo log的作用是为了持久化而生的。
写完内存,如果数据库挂了,那我们可以通过redo log来恢复内存还没来得及写入磁盘的数据,将redo log加载到内存里面,那内存就能恢复到挂掉之前的数据了
3.undo log
undo log主要有两个作用:回滚和多版本控制(MVCC)
在数据修改的时候,不仅记录了redo log,还记录undo log,如果因为某些原因导致事务失败或回滚了,可以用undo log进行回滚
undo log主要存储的也是逻辑日志,比如我们要insert一条数据了,那undo log会记录的一条对应的delete日志。我们要update一条记录时,它会记录一条对应相反的update记录。
这也应该容易理解,毕竟回滚嘛,跟需要修改的操作相反就好,这样就能达到回滚的目的。因为支持回滚操作,所以我们就能保证:“一个事务包含多个操作,这些操作要么全部执行,要么全都不执行”。
【原子性】
因为undo log存储着修改之前的数据,相当于一个前版本,MVCC实现的是读写不阻塞,读的时候只要返回前一个版本的数据就行了。
4.中继日志(Relay Log)
中继日志主要是MySQL主从同步的时候会用到
主从同步主要分成三步:
1:主库将数据库的变更操作记录到Binlog日志文件中
2:从库读取主库中的Binlog日志文件信息写入到从库的Relay Log中继日志中
3:从库读取中继日志信息在从库中进行Replay,更新从库数据信息
5.慢查询日志
记录所有执行时间超时的查询SQL,默认是10秒,方便于查询缓慢的定位和分析。
可以通过
show variables like '%slow_query%'查看是否开启和日志的位置,
show variables like '%long_query_time%'查看慢查询的阈值。
6.错误日志
记录MySQL 运行过程中较为严重的警告和错误信息,以及MySQL每次启动和关闭的详细信息,默认是开启的,
可以通过
show variables like '%log_error%'查看。
7.通用日志
记录用户的所有操作,包括启动和关闭 MySQL 服务、更新语句和查询语句等,默认情况下是关闭
可以通过
show variables like '%general%'查看。
一般不开启,会占用大量的磁盘空间。