1109关于redo_Log和undo_log和BIN-LOG

转自http://www.cnblogs.com/Bozh/archive/2013/03/18/2966494.html

三者之间的区别
BIN-LOG 一个对应BINLOG文件
REDO-LOG 对应ib_logfile0
UNDO-LOG 对应ib_logfile0

第一:REDO LOG是在INNODB存储引擎层产生,而BINLOG是MYSQL数据库的上层产生的,并且二进制日志不仅仅针对INNODB存储引擎,MYSQL数据库中的任何存储引擎对于数据库的更改都会产生二进制日志。

第二:两种日志记录的内容形式不同。MYSQL的BINLOG是逻辑日志,其记录是对应的SQL语句。而INNODB存储引擎层面的重做日志是物理日志。

第三:两种日志与记录写入磁盘的时间点不同,二进制日志只在事务提交完成后进行一次写入。

而INNODB存储引擎的重做日志在事务进行中不断地被写入,并日志不是随事务提交的顺序进行写入的。

二进制日志仅在事务提交时记录,并且对于每一个事务,仅在事务提交时记录,并且对于每一个事务,仅包含对应事务的一个日志。

而对于INNODB存储引擎的重做日志,由于其记录是物理操作日志,

因此每个事务对应多个日志条目,并且事务的重做日志写入是并发的,并非在事务提交时写入,做其在文件中记录的顺序并非是事务开始的顺序。

 

 

--LOGS-BIN和--LOGS-SLAVE-updates


-- 开启二进制log_bin
SHOW VARIABLES LIKE '%log_bin%';

-- 开启将执行SQL语句转化为二进制日志文件
SHOW VARIABLES LIKE '%log_slave_updates%';


RESET MASTER;-- 删除日志文件


--LOGS-SLAVE-updates
通常情况,从服务器从主服务器接收到的更新不记入它的二进制日志。该选项告诉从服务器将其SQL线程执行的更新记入到从服务器自己的二进制日志。为 了使该选项生效,还必须用--LOGS-BIN选项启动从服务器以启用二进制日志。如果想要应用链式复制服务器,应使用--LOGS-SLAVE- updates。例如,可能你想要这样设置:

A -> B -> C

也就是说,A为从服务器B的主服务器,B为从服务器C的主服务器。为了能工作,B必须既为主服务器又为从服务器。你必须用--LOGS-BIN启动 A和B以启用二进制日志,并且用--LOGS-SLAVE-updates选项启动B。

以上是摘自MySQL对于LOGS-SLAVE-updates启动选项的描述。
当然LOGS-SLAVE-upates也可以写入my.cnf :
//////////////////
log_slave_updates=1
//////////////////

当然在这种机制下可能有的同学会存在这么个问题:
如果a->b b->a 这样的双MASTER架构下,a,b都打开log_slave_updates选项会不会出现无限循环的状态。
mysql已经考滤到了这个问题,每条BIN-LOG都会记录执行语句的源server_id.当SLAVE读到语句的server_id等于本身的ID 的时候,不会忽略执行,所以我们不用担心a,b会不会无限循环下去。

基于以上这种情况,mysql的REPLICATION集群将更加灵活,你如果需要可以做成各种各样的链式复制。比如 a->b b->a b中设置log_slave_updates后还可以b->c. 这样a,c中的数据也是一致的。

-- 比较常用的语句 查看事件信息
SHOW BINLOG EVENTS IN 'mysql-bin.000031';

Log_name Pos Event_type Server_id End_log_pos Info
mysql-bin.000031 4 Format_desc 111 123 SERVER ver: 5.7.14-LOG, BINLOG ver: 4
mysql-bin.000031 123 Previous_gtids 111 154
mysql-bin.000031 154 Anonymous_Gtid 111 219 SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
mysql-bin.000031 219 QUERY 111 309 BEGIN
mysql-bin.000031 309 Intvar 111 341 INSERT_ID=4980699
mysql-bin.000031 341 QUERY 111 475 USE `copy_db`; INSERT INTO admin_log_info(admin_id) VALUES (555)
mysql-bin.000031 475 Xid 111 506 COMMIT /* xid=1450 */

 

SHOW VARIABLES LIKE '%innodb_flush_log_at_trx_commit%';

SHOW VARIABLES LIKE '%innodb%';

SHOW VARIABLES LIKE 'innodb_max_undo_log_size'

SHOW VARIABLES LIKE 'innodb_undo_logs'

SHOW VARIABLES LIKE '%innodb_log_file_size%';

SHOW VARIABLES LIKE '%innodb_log_files_in_group%';

三者之间的区别
BIN-LOG 一个对应BINLOG文件
REDO-LOG 对应ib_logfile0
UNDO-LOG 对应ib_logfile0

SHOW BINLOG EVENTS

posted @ 2016-11-09 14:38  秦楚风  阅读(690)  评论(0编辑  收藏  举报