一、区别redolog和binlog
1、如下表格的一个简单对比
redolog
binlog
日志作用
保护脏数据
数据库备份恢复使用
引擎支持
只适合InnoDB引擎
所有引擎
日志格式
物理日志
逻辑日志,SQL语句
提交方式
快速提交
提交时一次性写入
保存形式
会被循环覆盖
长期保存
2、redolog记录的是对于每个页的修改
数据页地址、行地址、操作类型(I/D)、数据
e.g:一个update修改100行,至少产生200行redo日志,所以DML产生的redo可能很大:
100、2、D
100、2、I、'value'
……
实际就是update table set ……100(数据页地址) 2(行地址)
3、binlog只是记录DML、DDL、DCL,不记录SELECT
通过参数设置控制binlog的记录模式:
1、语句模式
e.g:delete from t1 where id<=1000;
2、行模式
delete from t1 where id=1;
delete from t1 where id=2;
……
delete from t1 where id=1000;
4、图解redolog、binlog机制
注意:
在oracle里面虽然redolog也是循环覆盖的,但是在循环覆盖之前,数据库会将redo拷贝出来做个归档,所以oracle里可以用redolog做数据恢复。
二、开启binlog及相关关注点
1、开启binlog
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | OFF | #默认是关闭的
+---------------+-------+
mysql> set @@global.log_bin=on;
ERROR 1238 (HY000): Variable 'log_bin' is a read only variable
修改配置文件/etc/my.cnf,在[mysqld]下添加:
server-id=1
log-bin=mysql-bin
重启MySQL,即可……binlog的启动大概会为mysql增加1%的负载,因此在绝大多数情况下,binlog都不会成为mysql的性能瓶颈,所以一般都是会开启binlog的。
2、binlog的存放