事务的四大特性:

  • 原子性:以事务为单位
  • 隔离性:事务和事务之间不能产生干扰
  • 一致性:事务前后的状态不能出现异常
  • 持久性:事务一旦提交,就会写入磁盘,无法恢复
  • 事务的隔离性由锁机制来实现
  • 其他的三个特性,由事务的redo日志和undo日志来保证
    • REDO LOG:重做日志,恢复提交事务修改的页操作(保证提交状态)
    • UNDO LOG:回滚日志,回滚行记录到某个特定版本,用来保证事务的原子性、一致性(保证中止状态)

重做日志和恢复日志都可以理解为是一种恢复操作,不过是恢复的目的不同而已。

  • redo log:是存储引擎层(InnoDB)生成的日志,记录的是“物理级别”上修改操作,主要是为了保障数据的可靠性。
  • undo log:存储引擎层(InnoDB)生成的日志,记录的是“逻辑操作”日志,主要是用于事务的回滚

IMG_0278.PNG

课堂知识

日志相关特点

主要特点:

  • 日志文件记录了数据库的全部更新顺序
  • DBMS允许事务的并发执行导致日志文件是“交错乱序的”
  • 属于单个事务的日志顺序与该事务更新操作的执行顺序是一致的。
  • 日志记录会写到日志缓冲区中,然后再写回到磁盘上对应的文件中。(主要是解决速度不匹配的问题)

    先写日志规则

    事务在执行的过程中,并不是立即将更新后的数据写入到磁盘中,因此如果在特定的时间内,数据还未写入磁盘中,系统宕机了,那么就会出现事务Commit了但是未持久到数据库文件中的现象。
    为了保证数据库能运用日志文件进行相关的恢复操作,要求日志文件必须放到稳固存储器上(比如磁盘上),每条日志必须在其写入到数据库文件之前,先将数据和操作写入数据库日志文件中,即先写日志规则

根据日志文件进行恢复

  • UNDO操作:从事务T的最后一条更新日志记录开始,从日志尾向日志头(反向)依次将T更新的数据元素值恢复为旧值
  • REDO操作:从事务T的第一条更新日志记录开始,从日志头向日志尾(顺向)依次将T的数据元素值恢复为新值

三个阶段

  • 分析阶段:分析需要进行重做的事务集合撤销事务集
  • 撤销阶段:从日志尾反向扫描日志,对每一条属于UNDO-set中事务的更新操作日志依次执行UNDO操作
  • 重做阶段:从日志头顺向扫描日志,对每一条属于REDO-set中事务的更新操作日志依次执行REDO操作

数据库备份

image.png

使用mysqldump命令进行备份 执行mysqldump命令,可以将数据库备份成一个文本文件 mysqldump -u username -h host -ppassword databasename [tablename …] > filename.sql

image.png
image.png

错误日志

  • 错误日志功能在默认情况下是开启的,并且是不能够被禁止、关闭的。
  • 错误日志默认以hostname.err为文件名,其中hostname是主机名
  • image.png
  • 错误日志是以文本文件的形式存储的,可以直接使用文本查看工具打开查看。
  • 管理员可以对错误日志进行管理(新开一个错误日志文件,删除老旧的日志文件等等)
  • image.png

二进制日志文件(binlog)

  • 二进制日志文件默认是关闭的,可以通过修改my.ini数据库配置文件的方式,手动开启
    image.png
  • 开启后,所有对数据库操作的记录都会被记录到此文件。长时间开启之后,文件会变得很大。
  • 查看二进制文件是否开启:show variables like 'log_bin'
    image.png
  • 可以使用mysqlbinlog来检查二进制日志文件,命令格式为:mysqlbinlog [options] 日志文件名...

使用二进制日志文件还原数据库

  1. # 根据备份文件恢复数据库
  2. mysqldump -uroot -p123456 xscj<file.sql
  3. # 根据二进制文件恢复数据库
  4. mysqlbinlog xxxx | mysql -uroot -p123456

image.png

image.png