MySQL的内部日志
binlog记载的是update/delete/insert这样的SQL语句,而redo log记载的是物理修改的内容(xxxx页修改了xxx)。
binlog无论MySQL用什么引擎,都会有,而redo log是MySQL的InnoDB引擎所产生的。
redo log事务开始的时候,就开始记录每次的变更信息,而binlog是在事务提交的时候才记录。
redo log的作用是为持久化而生的。redo log的存在为了:当我们修改的时候,写完内存了,但数据还没真正写到磁盘的时候。此时我们的数据库挂了,我们可以根据redo log来对数据进行恢复。因为redo log是顺序IO,所以写入的速度很快,并且redo log记载的是物理变化(xxxx页做了xxx修改),文件的体积很小,恢复速度很快。
redo log不会存储着历史所有数据的变更,文件的内容会被覆盖的。
binlog的作用是复制和恢复。
主从服务器需要保持数据的一致性,通过binlog来同步数据。
如果整个数据库的数据都被删除了,binlog存储着所有的数据变更情况,那么可以通过binlog来对数据进行恢复。
先写redo log,再写binlog。
如果写redo log失败了,那我们就认为这次事务有问题,回滚,不再写binlog。
如果写redo log成功了,写binlog,写binlog写一半了,但失败了怎么办?我们还是会对这次的事务回滚,将无效的binlog给删除(因为binlog会影响从库的数据,所以需要做删除操作)