+ -
当前位置:首页 → 问答吧 → mysql的二进制日志和重做日志(redo)的用处有何不同?

mysql的二进制日志和重做日志(redo)的用处有何不同?

时间:2011-09-07

来源:互联网

看了一点资料,总感觉这一点不好理解。
还有,二进制日志是几个文件?满了怎么办?有归档之说吗?

还望高手指点,不甚感激!

作者: 我上面有人   发布时间: 2011-09-07

lZ最近转行做mysql了

作者: hhuxyb   发布时间: 2011-09-07

了解一下。
感觉mysql在很多地方跟oracle很相似。

作者: 我上面有人   发布时间: 2011-09-07



QUOTE:原帖由 我上面有人 于 2011-9-7 15:49 发表
看了一点资料,总感觉这一点不好理解。
还有,二进制日志是几个文件?满了怎么办?有归档之说吗?

还望高手指点,不甚感激!

1,二进制日志

(1) 一开始是一个文件,比如

-rw-rw---- 1 mysql mysql      27850 Jan 19  2011 mysql-bin.000001
在文件满1.1G之后或者数据库重启之后,就会自动生成第二个日志文件
-rw-rw---- 1 mysql mysql     993661 Jan 19  2011 mysql-bin.000002
然后依次类推.......


-rw-rw---- 1 mysql mysql        126 Jan 19  2011 mysql-bin.000009
在同目录下的 mysql-bin.index里面记载了所有的二进制日志信息。

(2) 二进制没有归档一说。

但是你可以设置参数expire_logs_days来决定在数据库服务器上保留多少天的二进制日志
-- ===============================================================
-- 在线清理mysql日志
-- ===============================================================
set global  expire_logs_days=3;
flush logs;
不需要重启mysql,立即生效


-- ===============================================================
-- 在mysql的配置文件里面设置
-- ===============================================================
[mysqld]
expire_logs_days=3
设置了之后,需要重新启动mysql服务,才能生效。

[ 本帖最后由 mchdba 于 2011-9-7 16:00 编辑 ]

作者: mchdba   发布时间: 2011-09-07

二进制日志是几个文件?满了怎么办?有归档之说吗?
二进制日志主要记录数据库的更改操作,类似与ORACLE的归档,但是mysql却是以SQL的形式记录变更,
可以通过string bin-log文件查看;
当二进制日志大小超过max_binlog_size时,会重新生产bin log日志
二进制日志文件命名是通过index文件顺序编号的

作者: hhuxyb   发布时间: 2011-09-07

哦,也就是说mysql的二进制日志文件会不断增多的,对吗?

作者: 我上面有人   发布时间: 2011-09-07

难道重做日志(redo)仅仅是在事务、实例恢复时才用到吗?

数据库恢复时用到的是二进制日志文件????

作者: 我上面有人   发布时间: 2011-09-07

哦,也就是说mysql的二进制日志文件会不断增多的,对吗?
是的;
恢复时候可以通过mysqlbinlog把binlog文件导出成SQL语句

作者: hhuxyb   发布时间: 2011-09-07

数据库恢复用的是备份文件,一般不用二进制日志文件。

除非你的备份坏掉了,万不得已才去启动二进制日志文件,而且二进制文件还不一定保证顺利成功。

作者: mchdba   发布时间: 2011-09-07

oracle的日志和redo是一个文件,mysql为何要分开呢?
mysql的redo是否只是在实例恢复时才有用呢?

作者: 我上面有人   发布时间: 2011-09-07

从来没有见过 mysql dba恢复数据是用 binlog来进行恢复的。都是最后实在没有办法了才走这条道路,囧一个先!

作者: mchdba   发布时间: 2011-09-07



QUOTE:原帖由 我上面有人 于 2011-9-7 16:15 发表
oracle的日志和redo是一个文件,mysql为何要分开呢?
mysql的redo是否只是在实例恢复时才有用呢?

不要用oracle的概念去套mysql,你应该抛弃oracle的理念,从0开始理解mysql,这样会容易一些,少走点弯路。比较两者理念不是一样的。当然了我oracle也是大菜鸟一个,只是说下自己的感悟。

作者: mchdba   发布时间: 2011-09-07

oracle的日志和redo是一个文件,mysql为何要分开呢?
mysql的redo是否只是在实例恢复时才有用呢?
不是,实例恢复采用的ib_logfile恢复

作者: hhuxyb   发布时间: 2011-09-07

你说的这个ib_logfile 好像就是mysql的redo

作者: 我上面有人   发布时间: 2011-09-07

查了一下资料,重做日志(redo)记录的是事务的信息(InnoDB引擎),而二进制日志文件记录的是数据库的所有变更信息。
这样理解对吗?

[ 本帖最后由 我上面有人 于 2011-9-7 16:53 编辑 ]

作者: 我上面有人   发布时间: 2011-09-07

我觉得关键在于mysql的binlog记录的是已经提交的事物。它为复制和恢复服务,是mysql全局上的东西,和引擎无关。
binlog的方式作为rendolog肯定很不理想,因为binlog很少使用基于行的模式,也没有检查点机制,不那么适合恢复。
最主要的是redo理应记录所有dml语句以及数据,不管是否已经提交,这和binlog是冲突的。
还有,redo是只用于innodb自动恢复的。

作者: johnny0924   发布时间: 2011-09-07

热门下载

更多